### Web Academy PortSwigger
* Lab: [DOM XSS using web messages](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source/lab-dom-xss-using-web-messages)
* Descript: This lab demonstrates a simple web message vulnerability.
* To solve this lab, use the exploit server to post a message to the target site that causes the print() function to be called.
* Solved and Writeup by Me ^^!

Đọc qua mô tả đề bài ,nhiệm vụ là ta cần gọi hàm print() trên trang web.
Access the lab, ta có giao diện gian hàng như dưới:

---
Xem qua một sản phẩm :

---

Ta có thể thấy trang web ở dạng chỉ đọc , ta không thấy đầu vào (input) có thể có trên web để có thể inject script.
Xem qua source trang , ta phát hiện đoạn script sau:

Đoạn script sử dụng hàm addEventListener() để thêm một hàm thực thi function() khi có sự kiện message xảy ra.
*Note: Sự kiện 'message' là một sự kiện trong JavaScript được kích hoạt khi một trang web nhận được một thông điệp từ một cửa sổ khác thông qua phương thức postMessage. Đây là cách trang web có thể gửi và nhận dữ liệu giữa các cửa sổ hoặc iframe mà không cần làm mới trang.*
Giá trị của tin nhắn message (e) sẽ được xử lý và gán vào thẻ div có id='ads'. Do sử dụng innerHTML (dễ bị tấn công XSS), ta lên ý tưởng chèn script vào message được gửi đến!
Ta xây dựng mã khai thác sử dụng iframe để gửi thông điệp đến cửa sổ của trang web :

Giải thích sơ qua , ta xây dựng trang html , sử dụng iframe để nhúng trang web mục tiêu. Sử dụng this.contentWindow (tham chiếu đến iframe được nhúng) và phương thức postMessage() để gửi message (đã chèn script ) đến mục tiêu.
**
Hit Enter Deliver exploit to victim.... End.....

Lab được giải quyết , cửa sổ in xuất hiện !
