Kami telah menyebut dua jenis eksploitasi XSS : dicerminkan dan disimpan. Kesemuanya mempunyai ciri umum bahawa kod berbahaya, selepas dimasukkan, akan dilaksanakan selepas respons pelayan, yang bermaksud ralat terletak pada bahagian pelayan. pelayan. pelayan. Terdapat satu lagi jenis eksploitasi XSS yang bertentangan dengan ciri ini, kod berniat jahat dilaksanakan serta-merta pada sisi klien tanpa melalui pelayan, dikenali sebagai DOM Based XSS atau juga dikenali sebagai jenis 0 XSS.
Pertama sekali kita perlu tahu apa itu DOM?
DOM, singkatan kepada Document Object Model, ialah bentuk standard W3C (http://www.w3.org/DOM/) yang dicadangkan untuk mendapatkan dan memanipulasi data dokumen berstruktur seperti HTML dan XML. Model ini mewakili dokumen sebagai struktur pokok hierarki. Semua elemen dalam HTML dan XML dianggap sebagai nod.
DOM Based XSS ialah teknik eksploitasi XSS berdasarkan perubahan struktur DOM dokumen, khususnya HTML.
Mari lihat contoh khusus di bawah:
Tapak web mempunyai URL berikut ke halaman pendaftaran:
example.com/register.php?message=Please fill in the form
Apabila kami mengaksesnya, kami melihat Borang yang sangat biasa:

Anda boleh menyimpulkan dengan mudah parameter mesej yang dihantar ke dalam kandungan pemberitahuan pada borang, lihat dengan teliti kod sumber pemberitahuan ini:
![Web9: Jenis eksploitasi XSS - Bahagian 3: XSS Berasaskan Dom Web9: Jenis eksploitasi XSS - Bahagian 3: XSS Berasaskan Dom]()
Segmen JavaScript bertanggungjawab untuk mendapatkan nilai daripada parameter mesej dan mencetaknya. Daripada semakan input yang lemah ini, adalah mungkin untuk menipu pengguna supaya mengakses URL berbahaya.
Daripada menghantar:
message=Please fill in the form
kemudian hantar:
message=GenderMaleFemale
function show(){alert();}
Kemudian borang pendaftaran akan kelihatan seperti ini:
![Web9: Jenis eksploitasi XSS - Bahagian 3: XSS Berasaskan Dom Web9: Jenis eksploitasi XSS - Bahagian 3: XSS Berasaskan Dom]()
Pengguna tidak akan curiga dengan borang "biasa" seperti ini dan apabila memilih jantina, Skrip akan dilaksanakan:
![Web9: Jenis eksploitasi XSS - Bahagian 3: XSS Berasaskan Dom Web9: Jenis eksploitasi XSS - Bahagian 3: XSS Berasaskan Dom]()
Saya akan menerangkan lebih lanjut tentang nilai yang diluluskan dalam parameter mesej:
GenderMaleFemale
function show(){alert();}
Tujuan utamanya ialah untuk melaksanakan fungsi show() setiap kali terdapat acara onchage pada tag pilih. Fungsi show() di sini hanya muncul untuk menunjukkan bahawa skrip telah dilaksanakan. Walau bagaimanapun, pada hakikatnya, penggodam selalunya akan menggunakan fungsi show() ini untuk melaksanakan skrip yang menghantar nilai kuki pengguna ke pelayan yang telah ditetapkan. Pembaca boleh menyemak artikel Reflected XSS yang menyebut cara penggodam mencipta Apakah rupa permintaan ini?
Contoh ini memberi kita dua kesimpulan penting. Mula-mula, kod berniat jahat telah dilaksanakan serta-merta selepas mengklik pada nilai dalam teg pilih, bermakna ia telah dilaksanakan tepat pada sisi klien tanpa melalui respons pelayan. Kedua, struktur HTML telah diubah dengan skrip yang diluluskan. Dan kita juga boleh melihat senario eksploitasi sebenar, DOM Based agak serupa dengan Reflected daripada Stored XSS apabila ia datang untuk menipu pengguna untuk mengakses URL yang dibenamkan dengan kod hasad.
Rajah berikut menerangkan setiap langkah dalam melaksanakan teknik serangan XSS Berdasarkan DOM:
![Web9: Jenis eksploitasi XSS - Bahagian 3: XSS Berasaskan Dom Web9: Jenis eksploitasi XSS - Bahagian 3: XSS Berasaskan Dom]()
Di bawah ialah video ahli forum WhiteHat.vn melakukan eksploitasi melalui XSS Berasaskan DOM:
Semoga berjaya!