What is Reflected Cross-site Scripting?

Xảy ra khi ứng dụng nhận dữ liệu trong HTTP request và chèn dữ liệu đó vào response ngay lập tức.

Giả sử trang web có tính năng tìm kiếm nhận vào từ khóa của người dùng thông qua một query param như sau:

https://insecure-website.com/search?term=gift

Ứng dụng chèn dữ liệu của người dùng vào response như sau:

<p>You searched for: gift</p>

Nếu ứng dụng không kiểm tra dữ liệu đầu vào thì attacker có thể truyền mã độc vào query param như sau:

https://insecure-website.com/search?term=<script>/*+Bad+stuff+here...+*/</script>

Khi đó, response trả về cho người dùng sẽ dính mã độc:

<p>You searched for: <script>/* Bad stuff here... */</script></p>

Nếu nạn nhân click vào link có chứa mã độc mà attacker gửi thì mã độc đó sẽ được thực thi trong trình duyệt và session của nạn nhân.

Lab: Reflected XSS into HTML Context with Nothing Encoded

Request tìm kiếm:

GET /?search=hello HTTP/2
Host: 0a7200a50360b837833947d000de004c.web-security-academy.net

Response có chứa input data:

<h1>0 search results for 'hello'</h1>

Payload sử dụng là <script>alert(1)</script>. Request có dạng như sau:

GET /?search=%3Cscript%3Ealert%281%29%3C%2Fscript%3E HTTP/1.1
Host: 0a7200a50360b837833947d000de004c.web-security-academy.net

Response có chứa mã độc có thể thực thi:

<h1>0 search results for '<script>alert(1)</script>'</h1>

Lab: Reflected XSS with AngularJS Sandbox Escape without Strings

later

Impact of Reflected XSS Attacks

Khi attacker chèn được mã độc vào trình duyệt của nạn nhân thì hắn có thể:

  • Thực hiện những hành động mà người dùng có thể thực hiện.
  • Xem bất kỳ thông tin nào mà người dùng có thể xem.
  • Chỉnh sửa bất kỳ thông tin nào mà người dùng có thể chỉnh sửa.
  • Tương tác với các người dùng khác trong ứng dụng, bao gồm cả việc lây lan mã độc.

Có nhiều cách để attacker có thể xúi giục nạn nhân thực hiện request có chứa mã độc reflected XSS:

  • Đặt các liên kết vào một website mà attacker kiểm soát.
  • Gửi link thông qua mail, tweet hoặc các loại tin nhắn.

Đối tượng tấn công có thể là nhắm trực tiếp vào một người dùng hoặc tất cả các người dùng trong ứng dụng.

Tuy nhiên, do cần phải gửi đường link có chứa mã độc đến cho user nên độ ảnh hưởng của reflected XSS thường ít nghiêm trọng hơn stored XSS.

How to Find and Test for Reflected XSS Vulnerabilities

Chúng ta có thể kiểm tra lỗ hổng XSS một cách thủ công theo các bước sau:

  • Kiểm tra tất cả các entry point: query param, request body, file path và HTTP header.
  • Truyền vào các giá trị chữ và số để xem chúng có được reflect ở trong response hay không.
  • Xác định xem payload được chèn vào đâu trong response: có thể là trong cặp thẻ HTML, trong tag attribute, trong một chuỗi JavaScript, etc.
  • Truyền vào payload ứng cử viên: có thể đặt trước hoặc sau giá trị chữ và số ngẫu nhiên ở trên.
  • Sử dụng các payload thay thế nếu payload ứng cử viên không sử dụng được.
list
from outgoing([[Port Swigger - Reflected XSS]])
sort file.ctime asc

Resources