Mengenal Lebih Dekat, DOM Based XSS

Sebelum menuju bahasan DOM XSS, kita kenalan dulu yuk sama DOM, apasih DOM itu?, jarum?

DOM adalah singkatan dari Document Object Model, yang maksudnya adalah struktur hirarki pada document html, jadi dalam kode html ada sebuah silsilah keluarga

untuk XSS bisa dibaca di sini

Nah pada kasus DOM Based XSS ini, payload XSS akan merubah isi html melalui DOM ini????

Contoh: DVWA, DOM XSS, Level:Low

Ada fitur pilih bahasa, kita cek scriptnya yuk

if (document.location.href.indexOf("default=") >= 0) {
	var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
	document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>");
	document.write("<option value='' disabled='disabled'>----</option>");
}
    
document.write("<option value='English'>English</option>");
document.write("<option value='French'>French</option>");
document.write("<option value='Spanish'>Spanish</option>");
document.write("<option value='German'>German</option>");

Form untuk memilih bahasa dalam fitur pilih bahasa adalah inputan dari javascript di atas,
line pertama pengecekan apakah index/parameter dari default= itu bernilai 0 atau lebih jika demikian maka membuat variable bernama lang dimana isinya adalah value dari index/parameter default= tadi lalu menuliskannya kedalam document html pada tag option, dan menuliskan tag option lagi namun dengan value kosong dan disabled,

di line no 7 dan seterusnya menuliskan beberapa tag options lagi dengan value English, French, Spanish, dan German

ketika kita memilih salah satu bahasa maka pada url akan tertulis demikian

/dvwa/vulnerabilities/xss_d/?default=English

Nah terlihat value dari default adalah English, dan value ini dituliskan pada document yang ditampilkan, terlihat ada tulisan English kan difitur ganti bahasa ini,

kita coba merubah valuenya menjadi Indonesia

/dvwa/vulnerabilities/xss_d/?default=Indonesia

tulisan English tadi berubah menjadi Indonesia, nah karena value ini dituliskan pada document html yang ditampilkan maka kita bisa menggunakan tag <script> untuk mengecek apakah kita bisa melakukan XSS atau tidak

/dvwa/vulnerabilities/xss_d/?default=<script>alert('XSS')</script>

dan pop-up bertuliskan XSS pun muncul

hal ini terjadi karena pada value index/parameter default dituliskan langsung ke dalam document html yang ditampilkan menggunakan document.write(), untuk kasus ini bisa dilakukan pencegahan dengan merubah decodeURI(lang) menjadi encodeURI(lang) ini digunakan untuk melakukan urlencoding pada variable lang yang dimana isinya adalah value dari index/parameter default

untuk pencegahan lebih lengkap tentang DOM Based XSS ini bisa dicek di sini