Khai thác XSS thông qua lỗi HTTP Parameter Pollution

Khai thác lỗi HTTP Parameter Pollution là việc thêm vào những tham số thông qua các phương thức GET và POST. Về cơ bản hacker sẽ gửi những tham số giống nhau nhiều lần. Điều này sẽ dân tới hành động của server hoặc là kết hợp những tham số giống nhau làm một, hoặc loại bỏ một trong hai tham số đó.

Sau đây là bảng thống kê những xử lý khác nhau của server:

Khai thác XSS thông qua lỗi HTTP Parameter Pollution

Như chúng ta điều đã biết muốn khai thác được lỗi XSS thì bằng mọi cách chúng ta phải chèn được những ký tự đặc biệt như <, >, “,;, etc…. Nhưng đôi khi việc này không hề dễ dàng khi ứng dụng web có khả năng nhận diện và loại bỏ những ký tự này. Chúng ta hãy xem xét việc này thông qua ví dụ sau: biến category nhận giá trị truyền vào qua phương thức POST và giá trị này sẽ được in ra ở trên trình duyệt web. Woa! Ta nghĩ ngay ra cách khai thác bằng việc truyền vào giá trị như :<script>alert(1)</script> . Có thể dùng live header để làm điều này:


POST /search.htm HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 109 

category = <script>alert(1)</script>

Nhưng trên thực tế việc này không thể tiến hành đơn giản như vậy, bởi lẽ ứng dụng web đã lọc giá trị cả biến category bất kỳ khi nào biến này nhân được giá trị là thẻ dạng HTML ngay lập tức website sẽ chuyển hướng tới trang thông báo lỗi

HTTP/1.1 302 Moved Temporarily
Date: Tue, 03 Sep 2013 02:12:58 GMT
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.3.0.GA/Tomcat-5.5
Content-Length: 0
Location: https://www.somesite.com/error.html?code=OWASP
Connection: keep-alive
Content-Type: text/html; charset=UTF-8

Trên thực tế hệ thống phát hiện XSS còn có thể lọc nhiều hơn giá trị của biến:
  • "onclick
  • "ondblclick
  • "onmousedown
  • "onmousemove
  • "onmouseover
  • "onmouseout
  • "onmouseup
  • "onkeydown
  • "onkeypress
  • "onkeyup
  • "onabort
  • "onerror
  • "onload
  • "onresize
  • "onscroll
  • "onunload
  • "onsubmit
  • "onblur
  • "onchange
  • "onfocus
  • "onreset
  • "onselect
  • “><ScRiPt>
  • “><SCRIPT>
  • “><script//
  • “><script/**/
  • “><script+
  • “><script%20
  • “><script
  • “><%73%63%72%69%70%74>
  • “><<script>>
  • “><s/**/c/**/r/**/i/**/p/**/t>
  • “><s//c//r//i//p//t>
  • “><s+c+r+i+p+t>
  • “><s%20c%20r%20i%20p%20t>
  • “><%26%23x73%26%23x63%26%23x72%26%23x69%26%23x70%26%23x74>
  • <object
  • <div
  • <img
  • <a

Nhưng chúng ta có thể bypass qua hệ thống lọc này thông qua HTTP Prameter Polution bằng cách thêm hai biến category giống nhau vào bên trong request
search.htm?category=&category=”>
Hệ thống phát hiện XSS của webite sẽ khó phát hiện ra được mã khai thác chèn vào biến category

> Giải pháp bảo mật toàn diện dành cho website, đăng ký miễn phí 14-ngày tại đây <