---
# System prepended metadata

title: 'Lab: Reflected DOM XSS'

---

### 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!

![Ảnh chụp màn hình 2023-11-03 202219.png](https://hackmd.io/_uploads/SJSAEuGQp.png)

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ủ:  

![Ảnh chụp màn hình 2023-11-03 202257.png](https://hackmd.io/_uploads/Hy-d8_zQT.png)

Hãy thử search ngẫu nhiên một chuỗi:
![Ảnh chụp màn hình 2023-11-03 204410.png](https://hackmd.io/_uploads/B13TF_fXT.png)

---
![Ảnh chụp màn hình 2023-11-03 204811.png](https://hackmd.io/_uploads/S14B5OfmT.png)

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

![Ảnh chụp màn hình 2023-11-03 210450.png](https://hackmd.io/_uploads/H1NwCdfmT.png)

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`: 

![Ảnh chụp màn hình 2023-11-03 205342.png](https://hackmd.io/_uploads/B1X9ouGQp.png)

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ả:  

![Ảnh chụp màn hình 2023-11-03 211119.png](https://hackmd.io/_uploads/Sy2JxYMX6.png)

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:   

![Ảnh chụp màn hình 2023-11-03 211624.png](https://hackmd.io/_uploads/Hy7kWtM76.png)

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 :<< )

![Ảnh chụp màn hình 2023-11-03 213213.png](https://hackmd.io/_uploads/Bkz9EKz7T.png) 

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










