## https://sploitus.com/exploit?id=2189D737-674C-5E14-83AF-79FE9BDEEB42
# XSS Vulnerability Lab
Aplikasi web statis untuk simulasi dan pembelajaran kerentanan Cross-Site Scripting (XSS) pada aplikasi web. Lab ini dibuat sebagai media penelitian Tugas Akhir bidang cybersecurity dan web penetration testing dengan pendekatan Research and Development (R&D) serta evaluasi keamanan.
## Cara Menjalankan
1. Buka file `index.html` langsung di browser modern.
2. Pilih modul XSS dari sidebar.
3. Jalankan payload pada `Mode Rentan`.
4. Jalankan payload yang sama pada `Mode Aman`.
5. Bandingkan source code rentan dan aman.
6. Isi checklist dan ekspor laporan JSON bila diperlukan.
Lab ini sengaja memiliki simulasi XSS pada mode rentan. Gunakan hanya di lingkungan lokal/lab.
## Fitur Utama
- Dashboard utama.
- Daftar modul XSS dengan level `beginner`, `intermediate`, dan `advanced`.
- Mode Rentan / Vulnerable Mode.
- Mode Aman / Secure Mode.
- Penjelasan teori pada setiap modul.
- Form input payload dan area hasil eksekusi.
- Bank payload per modul, sehingga pengujian tidak hanya memakai satu payload.
- Tombol uji semua payload untuk mencatat variasi payload yang diuji.
- Tombol melihat source code rentan dan aman.
- Checklist pembelajaran.
- Dokumentasi mitigasi.
- Halaman laporan hasil pengujian.
- Ekspor laporan hasil uji dalam JSON.
## Modul XSS
| No | Modul | Studi Kasus | Level |
|---:|---|---|---|
| 1 | Reflected XSS | Halaman pencarian data mahasiswa | Beginner |
| 2 | Stored XSS | Sistem komentar mahasiswa | Beginner |
| 3 | DOM-Based XSS | Profil pengguna berbasis hash URL | Intermediate |
| 4 | Blind XSS | Form feedback yang dibaca admin | Advanced |
| 5 | Self-XSS | Dashboard admin sederhana | Beginner |
| 6 | XSS pada atribut HTML | Profil pengguna | Intermediate |
| 7 | XSS pada event handler | Tombol notifikasi | Intermediate |
| 8 | XSS pada URL parameter | Halaman notifikasi redirect | Intermediate |
| 9 | XSS pada input form | Form pendaftaran mahasiswa | Beginner |
| 10 | XSS pada komentar atau postingan | Forum diskusi kelas | Beginner |
| 11 | XSS pada search box | Pencarian inventaris lab | Beginner |
| 12 | XSS pada file upload atau preview nama file | Halaman upload berkas tugas | Advanced |
| 13 | XSS bypass sederhana terhadap filter input | Filter komentar sederhana | Advanced |
## Struktur Modul
Setiap modul berisi:
- Nama kerentanan.
- Deskripsi kerentanan.
- Tujuan pembelajaran.
- Skenario simulasi.
- Input yang rentan.
- Contoh payload untuk lingkungan lab.
- Penjelasan mengapa payload dapat berjalan.
- Dampak jika terjadi pada sistem nyata.
- Cara mitigasi.
- Contoh kode rentan.
- Contoh kode aman.
- Hasil pengujian sebelum mitigasi.
- Hasil pengujian setelah mitigasi.
## Mode Rentan dan Mode Aman
Mode Rentan memperlihatkan pola implementasi yang sengaja salah, seperti:
- Menulis input pengguna dengan `innerHTML`.
- Merangkai atribut HTML dari string mentah.
- Memasang input ke event handler inline.
- Memasang URL tanpa validasi skema.
- Menggunakan filter blacklist sederhana.
Mode Aman memperlihatkan pola mitigasi, seperti:
- `textContent` untuk output teks.
- Escaping karakter HTML dan atribut.
- Sanitization allowlist untuk HTML terbatas.
- Validasi URL dengan protokol `http` dan `https`.
- Pemisahan data dan kode dengan `addEventListener`.
- Rekomendasi CSP, HttpOnly cookie, Secure cookie, dan SameSite.
## Metode Pengujian
### Black Box Testing
Pengujian dilakukan dari sisi pengguna tanpa melihat source code:
1. Pilih modul.
2. Pilih payload dari bank payload atau gunakan tombol uji semua payload.
3. Jalankan pada mode rentan.
4. Amati apakah payload aktif, dialog muncul, link berbahaya berjalan, atau markup berubah.
5. Ulangi payload yang sama pada mode aman.
6. Catat apakah payload dicegah.
### Grey Box Testing
Pengujian dilakukan dengan memahami alur input-output dan membandingkan kode:
1. Buka source code rentan.
2. Identifikasi source input tidak tepercaya.
3. Identifikasi sink berbahaya seperti `innerHTML`, atribut event, atau `href`.
4. Buka source code aman.
5. Bandingkan teknik mitigasi.
6. Verifikasi bahwa payload yang sama tidak lagi dieksekusi.
## Tabel Hasil Pengujian Awal
| Modul | Mode Rentan | Mode Aman | Kriteria Berhasil |
|---|---|---|---|
| Reflected XSS | Payload aktif saat input dipantulkan | Payload tampil sebagai teks | Tidak ada eksekusi JavaScript |
| Stored XSS | Payload aktif saat data tersimpan ditampilkan | Komentar di-encode | Komentar tidak menambah markup aktif |
| DOM-Based XSS | Payload aktif di DOM client-side | Fragment divalidasi/di-encode | Sink DOM aman |
| Blind XSS | Payload aktif di admin viewer | Admin viewer meng-encode output | Payload tidak berjalan di konteks admin |
| Self-XSS | Kode dapat dijalankan jika ditempel manual | Token sensitif tidak tersedia bagi JS | Dampak social engineering ditekan |
| Atribut HTML | Payload keluar dari atribut | Nilai dipasang via DOM property | Atribut baru tidak terbentuk |
| Event Handler | Input menjadi kode onclick | Handler statis | Data tidak menjadi kode |
| URL Parameter | `javascript:` berjalan saat link diklik | Skema URL ditolak | Link berbahaya diblokir |
| Input Form | Ringkasan form mengeksekusi payload | Ringkasan memakai teks | Payload tidak dieksekusi |
| Komentar/Post | Postingan menjadi HTML aktif | Postingan jadi teks/sanitized | Event handler hilang |
| Search Box | Headline hasil menjalankan payload | Headline memakai teks | Markup tidak aktif |
| File Preview | Nama file menjadi HTML aktif | Nama file ditampilkan literal | Metadata aman |
| Filter Bypass | Payload non-script lolos blacklist | Sanitizer/encoding mencegah event | Bypass gagal |
## Contoh Variasi Payload
Payload disediakan berbeda sesuai konteks modul. Contoh variasi yang digunakan:
| Konteks | Contoh payload |
|---|---|
| HTML body | `` |
| SVG | `` |
| Atribut HTML | `" autofocus onfocus="alert('XSS')" x="` |
| Event handler | `alert(document.domain)` |
| URL parameter | `javascript:alert('XSS')` |
| Filter bypass | `alert('blocked')` |
Pada mode rentan, payload digunakan untuk menunjukkan bagaimana browser mengeksekusi input yang dirender sebagai HTML atau JavaScript. Pada mode aman, payload yang sama dipakai untuk membuktikan bahwa mitigasi bekerja.
## Rekomendasi Secure Coding
- Terapkan output encoding sesuai konteks, bukan satu encoder untuk semua tempat.
- Hindari `innerHTML`, `outerHTML`, dan `insertAdjacentHTML` untuk data pengguna.
- Jika HTML pengguna memang diperlukan, gunakan sanitizer allowlist yang matang.
- Jangan pernah memasukkan input pengguna ke inline event handler.
- Validasi URL memakai parser dan allowlist protokol.
- Gunakan CSP ketat sebagai lapisan pertahanan tambahan.
- Gunakan cookie `HttpOnly`, `Secure`, dan `SameSite`.
- Simpan token sensitif di sisi server atau cookie HttpOnly, bukan `localStorage`.
- Lakukan pengujian black box dan grey box setiap kali fitur input-output ditambahkan.
- Dokumentasikan payload, hasil sebelum mitigasi, dan hasil setelah mitigasi.
## Struktur File
```text
xss-lab/
index.html
styles.css
app.js
README.md
```