1. Pengertian

Jenis serangan keamanan yang memungkinkan penyerang untuk menyisipkan skrip berbahaya ke dalam halaman web yang kemudian dijalankan oleh pengguna yang mengakses halaman tersebut. Serangan XSS biasanya terjadi karena kurangnya validasi atau sanitasi input pengguna di sisi server.

Cara kerja serangan XSS yaitu, menyisipkan kode berbahaya ( biasanya JavaScript ) kedalam halaman web yang rentan. Saat pengguna lain mengakses halaman tersebut, script tersebut akan di eksekusi oleh browser pengguna, bukan oleh server.

2. Jenis jenis Cross-Site Scripting

a. Reflected XSS

Script yang disisipkan dalam respons server terhadap permintaan HTTP dari pengguna.

b. Stored XSS

Script disimpan di server dan dijalankan saat pengguna lain mengakses halaman.

c. DOM-Based XSS

Script di eksekusi di sisi klien melalui manipulasi Document Object Model (DOM).

3. Bahaya kerentanan Cross-Site Scripting

  • Pencurian data pribadi, seperti cookie, token session, dan informasi sensitif lain.
  • Penyusupan akun user.
  • Pengalihan pengguna ke situs web palsu.
  • Manipulasi tampilan halaman web.
  • Teknis dalam melakukan serangan Cross-Site Scripting Reflected security low

4. Teknis dalam melakukan serangan Cross-Site Scripting Reflected security low

a. Tahap awal

pada tahap ini kita melakukan analisis script Reflected XSS tingkat security low. Apa yang dilakukan pada script tersebut?. Yaitu mengecek apakah $_Get['name'] tersedia dan tidak kosong. jika ada akan menampilkan Hello [isi name] dalam tag <pre>…<pre>.

Kenapa dikatakan rentan?. Karena pada input $_Get['name'] langsung ditampikan ke browser tanpa proses sanitasi. Ini membuka celah untuk menyuntikan script HTML/JavaScript.

b. Tahap Exploitasi

Uji Apakah input ditampilkan di halaman(reflected)

http://ipmetasploitable2/dvwa/vulnerabilities/xss_r/?name=test123

None

kalau "test123" muncul dihalaman, berarti inputan dari url ditampilkan kembali ke output. => Reflected input => berpotensi XSS.

langkah slanjutnya, uji karakter spesial HTML sederhana. input dengan karakter seperti <,>,",' dan lihat apakah ditampilkan apa adanya atau diubah. Kalau hasilnya menampilkan apa adanya, berarti tag HTML tidak di filter, input tidak disanitasi.

selanjutnya deteksi apakah atribut HTML bisa dipecah, dengan menginputkan karakter kutip. misal : http://ipmetasploitable2/dvwa/vulnerabilities/xss_r/?name='test123'

dilanjutkan dimana posisi form input. misalnya, antara tag HTML biasa, dalam atribut seperti <img src=".."> , dalam JavaScript inline. Dalam kasus ini,

echo 'Hello ' . $_GET['name'];

yang berarti inputan muncul di dalam tag <pre>…<pre> , jadi payload xss perl ditutup dari sana atau dijlankan langsung

Mulai mencoba memasukan payload ringan, Contoh payload untuk kali ini,

Script tag sederhana : <script>alert(1)</script>

inputan dalam form langsung. Payload HTML :

<img src=x onerror=alert(1)>

cocok dipakai kalau tag <script> terblokir(difilter WAF misalnya)

Payload evasif(bypass filter

<svg onload=alert(1)>

c. Report

Jika muncul pop up, berarti serangan ini terbukti XSS reflected. website

rentan terhadap serangan real.

5. Teknis dalam melakukan serangan Cross-Site Scripting Reflected security medium

a. Tahap awal

pada tahap ini kita melakukan analisis script Reflected XSS tingkat sekuriti Medium. Apa yang dilakukan pada script tersebut?. Yaitu script dengan proteksi. str_replace('<script>', '', $_Get['name'])

langkah selanjutnya seperti yang awal mencoba hasil inputan apakah dikembalikan ke output. Jika iya, input ditampilkan langsung ke output mengindikasi awal bahwa terdapat kerentanan reflected terjadi.

Langkah selanjutnya, mencoba input karakter HTML spesial. Lihat apakah ditampilkan apa adanya atau diubah. Kalau hasilnya menampilkan apa adanya, berarti tag HTML tidak di filter, input tidak disanitasi.

b. Tahap Exploit

Uji behavior filter proteksi dengan menggunakan payload sederhana.

http://ipmetasploitable2/dvwa/vulnerabilities/xss_r/?name=<script>alert('X')</script>

lihat hasil output HTML-nya melalui inspect. Apakah tag <script> dihapus?, apakah </script> masih ada?. Misal hasilnya Hello alert('X')</script>

Terlihat bahwa <script> yang dihapus, filter tidak lengkap mengindikasikan celah masih terbuka.

Selanjutnya mencoba dengan case-sensitivity

http://ipmetasploitable2/dvwa/vulnerabilities/xss_r/?name=<ScRiPt>alert(1)</ScRiPt>

lihat hasilnya, jika muncul pop up berarti dengan case-sensitivit berhasil.

Selanjutnya menggunakan tag HTML lain.

http://ipmetasploitable2/dvwa/vulnerabilities/xss_r/?name=<img src=x onerror=alert('XSS')>

kalau muncul pop up, berarti meskipun <script> difilter, serangan tetap bisa via tag lain.

c. Report

Jika muncul pop up, berarti serangan ini terbukti XSS reflected. website

rentan terhadap serangan real.

6. Teknis dalam melakukan serangan Cross-Site Scripting Stored security low

a. Tahap Awal

pada tahap ini kita melakukan analisis scrip XSS Stored tingkat security low. Apa yang dilakukan script tersebut? . pada script ini sudah memakai

mysql_real_escape_string(), yang mengurangi resiko serangan SQL Injection. Tapi tidak ada proteksi untuk xss, hanya input dimasukkan ke DB, tidak dilakukan sanitasi saat ditampilkan kembali. Data apapun yang lolos dari input akan masuk ke DB dan jika pada halaman tampilan tidak digunakan filter, maka celah kerentanan xss tetap terbuka.

Coba isi form terlebih dahulu dengan inputan biasa, untuk mengecek apakah komentar muncul di guestbook.

b. Tahap Exploit

Coba isi form menggunakan tag HTML sederhana.

<b>blabla</b>

jika hasil teksnya jadi tebal, berarti output ditampilkanlangsung tanpa di escape. Mengindikasikan ada kerentanan.

Coba isi form menggunakan JavaScript sederhana.

<script>alert('stored')</script>

Tag lain yang di modifikasi jika <script> difilter, kalian bisa uji dengan tag lain.

<img src=x onerror=alert('stored')> atau <body onload=alert('stored')>

jika muncul pop up, filtering lemah atau tidak ada sama sekali.

c. Report

Terdapat kerentanan XSS Stored, dimana tidak ada filtering untuk Output.

tidak ada validasi tag HTML .

7. Teknis dalam melakukan serangan Cross-Site Scripting Stored security medium

a. Tahap Awal

pada tahap ini kita melakukan analisis script XSS Stored tingkat secuirty medium. Apa yang dilakukan script tersebut? . Terdapat proteksi strip_tags() yang berfungsi filtering tag HTML untuk penghapusan semua tagHTML. Proteksi htmlspecialchars() yang berfungsi mengencode karakter HTML spesial. Proteksi str_replace('<script>'), ' ' , $name) yang berfungsi untuk filter terhadap teks JavaScript . Proteksi mysql_real_escape_strings() yang berfungsi untuk mencegah serangan SQL Injection.

Coba isi form terlebih dahulu dengan inputan biasa, untuk mengecek apakah komentar muncul di guestbook.

b. Tahap Exploit

Coba isi form menggunakan tag HTML sederhana.

<b>blabla</b>

Jika hasilnya muncul sebagai teks biasa(tidak tebal), berarti strip_tags() bekerja.

Masukan Payload Bypass

<img src=x onerror=alert('XSS')> atau <img src=x onerror=alert(document.cookie)>

Jika muncul pop up saat di refresh, berarti XSS Stored masih berhasil.

untuk membypas str_replace('<script>', ' ', $name)

coba dengan : <scr<script>ipt>alert('XSS')</scr</script>ipt>

c. Report

Jika di refresh muncul pop up maka kerentanan XSS Stored berhasil. lakukan uji tag HTML sederhana maupun modifikasi, uji bypas filtering,,