### Web Academy PortSwigger
* Lab: [Lab: Reflected DOM XSS](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-dom-xss-reflected)
* Descript: This lab demonstrates a reflected DOM vulnerability. Reflected DOM vulnerabilities occur when the server-side application processes data from a request and echoes the data in the response. A script on the page then processes the reflected data in an unsafe way, ultimately writing it to a dangerous sink.
* To solve this lab, create an injection that calls the alert() function.
* Solved and Writeup by Tung!

Truy cập trang Lab ,ta thấy xuất hiện trang giao diện web như trên. Dựa trên mô tả Lab , trang web có lỗ hổng Reflected-XSS dựa trên DOM ,request được xử lý bên phía máy chủ và phản hồi lại cho người dùng.
Xem qua source code , ta thấy không có đoạn script nào trên trang nên có lẽ request được xứ lý phía máy chủ:

Hãy thử search ngẫu nhiên một chuỗi:

---

Inspect trang , ta thấy có vẻ như kết quả trả về được xử lý ở một nơi khác - `searchResults.js`.

Có vẻ như đây là file xử lý phản hồi được trả về từ phía máy chủ
Mở Burpsite, search bất kỳ : `aabc1233` (nghĩ bừa :>>) ,chặn request ta thấy `aabc1233` được đưa đến xử lý ở trang `/search-result?search=aabc1233`, không phải trang search request ban đầu `/?search=aabc1233`:

Response được trả về ở dạng `json`, gồm kết quả `results` và chuỗi tìm kiếm `searchTerm` . Theo mô tả gợi ý , script trên trang xử lý dữ liệu trả về và đưa vào phản hồi một cách không an toàn , ta nảy sinh ý tưởng break-out chuỗi trong `searchTerm` để chèn lệnh `alert()` , thử thêm chuỗi đóng `"` vào chuỗi và xem kết quả:

Có vẻ như `"` đã được thoát , ta không thấy chuỗi đóng xuất hiện trong chuỗi kết quả ,thử thêm ký tự thoát `\` (mục đích hủy bỏ việc thoát ký tự) và xem phản hồi:

Ta thấy không có phản hồi trên trang web , tiếp tục chèn, ta nối thêm `alert()` sau khi break-out khỏi chuỗi search, không quên ghi chú `//` dấu đóng `"` đằng sau nó : `aabc1233\"+alert()//` (thử <script>alert()</script> lại k được :<< )

Và Lab đã được giải quyết :>>