# PortSwigger Lab: Reflected DOM XSS ## Description - 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. ## Recon - ![image](https://hackmd.io/_uploads/BJ5e_26na.png) - Đầu tiên, `F12` để check xem có điểm nào đáng nghi có thể khai thác `XSS` được không - ![image](https://hackmd.io/_uploads/r1grKn6na.png) - ![image](https://hackmd.io/_uploads/ryRIF2Tnp.png) - Do không nhận thấy bất kì điểm bất thường nào, ta sẽ sử dụng `search bar` và nhập 1 input bất kì vào để test - Tiếp tục check bằng `F12`, phát hiện sau khi search có xuất hiện của 1 file mới là `searchResult.js`![image](https://hackmd.io/_uploads/HJC5x6ana.png) - Đọc thấy biến `searchResultsObj` thay vì được khai báo như thông thường là: ```javascript! var searchResultsObj = this.responseText; ``` - Thì ở đây lại sử dụng `eval()` để thực thi code JavaScript dưới dạng 1 string được truyền vào, vì vậy có thể xác định rằng có thể khai thác ==XSS== thông qua chức năng `search` của trang web ```javascript! eval('var searchResultsObj =' + this.responseText); ``` ## Exploit - Bật ==BurpSuite== để intercept request khi search và gửi đến `Burp Repeater`![image](https://hackmd.io/_uploads/ByOEUppn6.png) - Thử nhập `"alert(1)`, response trả về cho thấy dấu `"` đã bị escape bởi `backslash(\)`![image](https://hackmd.io/_uploads/BJoELapn6.png) - Thêm `backslash(\)` vào đằng trước của payload cũ, response trả về đã escape đc `backslash(\)` của hệ thống và inject được `"` vào trong payload![image](https://hackmd.io/_uploads/S1DD8aT2a.png) - Sau đó chỉnh sửa lại payload cho hoàn chỉnh và sử dụng `//` để comment out phần còn lại của query, ta có được payload hoàn chỉnh như sau: `\"-alert(1)}//` - Nhập vào trong `search bar` và chúng ta thành công khai thác lỗ hổng ==XSS== để thực thi `alert()`![image](https://hackmd.io/_uploads/HJdHPaa2p.png)