Skip to content

Repository files navigation

🐞 LAB XSS — 4 Fitur, Payload XSS Bypass

Tugas Kuliah Keamanan Web · dibuat oleh kikikokok

PHP 8 + MariaDB · OWASP Top 10 — A03 Injection (XSS)

⚠️ Khusus praktikum lokal — jangan dijalankan di server publik/produksi.


Lab keenam seri LAB-RED Team (setelah lab-bac, lab-bac2, lab-bac3, lab-ssrf, lab-atox, lab-xssredir). Tema: KostHub (komunitas kos). Empat fitur disengaja rawan XSS, masing-masing dengan "WAF" mini yang bisa di-bypass memakai payload alternatif (CWE-79).

🧩 Latihan

# Fitur Jenis XSS WAF (yang bisa di-bypass)
1 cari.php?q= Reflected strip <script> (case-insensitive)
2 detail.php?id= — kolom komentar Stored strip <script> + onerror=
3 profil.php?u= — bio Stored strip <script> + onerror/onload/onclick
4 upload.php — avatar SVG Stored (file) hanya ekstensi .svg + larangan <script>

Di folder payloads/ setiap fitur menyimpan 6 varian payload bypass: pola yang dipakai antara lain <img onerror>, <svg/onload>, <a href=javascript:>, nested <scr<script>ipt>, <marquee onstart>, <iframe srcdoc>, dan untuk SVG: onload, onbegin, onclick, href=javascript:.

🚀 Menjalankan

./jalankan.sh          # DB + server :8098 (folder uploads/ dibuat)
./jalankan.sh stop     # matikan
# buka http://127.0.0.1:8098

🔑 Akun Demo

Username Password Role
admin admin123 admin
budi budi123 penghuni
sari sari123 penghuni
riko riko123 penghuni

⚡ Uji cepat (semua tipe)

./jalankan.sh
bash tools/uji_xss.sh      # 21 cek: payload LULUS/DITOLAK per fitur

Contoh manual — T1 (reflected) & T4 (SVG):

B=http://127.0.0.1:8098

# T1 — <script> diblokir, tapi <img onerror> / <svg onload> / nested lolos
Q=$(python3 -c "import urllib.parse;print(urllib.parse.quote(open('payloads/xss-cari/02-img-onerror.txt').read()))")
curl -s "$B/cari.php?q=$Q" | grep onerror        # dirender mentah -> XSS

# T4 — upload SVG onload, lalu buka langsung (same-origin -> script jalan)
J=$(mktemp)
curl -s -o /dev/null -c $J -b $J --data-urlencode 'username=budi' --data-urlencode 'password=budi123' $B/masuk.php
curl -s -b $J -F 'avatar=@payloads/xss-svg/02-onload.svg;type=image/svg+xml' $B/upload.php
curl -s -b $J $B/uploads/avatar_2.svg    # konten utuh -> XSS saat dieksekusi

📁 Struktur

lab-xss/
├── assets/             # style.css (watermark kikikokok)
├── database/lab_xss.sql
├── includes/           # koneksi.php (sesi + filter_cari/komentar/bio)
├── payloads/
│   ├── xss-cari/       # T1 · 6 varian reflected
│   ├── xss-komentar/   # T2 · 6 varian stored
│   ├── xss-bio/        # T3 · 6 varian stored
│   └── xss-svg/        # T4 · 5 file SVG (script/onload/foreignObject/href/onbegin)
├── tools/uji_xss.sh    # QA otomatis 4 tipe
├── cari.php            # T1
├── detail.php          # T2 (komentar)
├── profil.php          # T3 (bio) + tampilan avatar
├── upload.php          # T4 (upload SVG)
└── jalankan.sh

🩹 Mitigasi

  1. Escape output konteks-aware (HTML, atribut, JS) di cari/kata-komentar/bio.
  2. Upload: whitelist SVG? Jangan serve SVG mentah — tarik ulang & sanitize (SVG sanitizer), sajikan sebagai <img> + Content-Disposition: attachment bila perlu, dan nonaktifkan <script> via sandbox.
  3. CSP default-src 'self' + keluarkan unsafe-inline — blocker kuat untuk event-handler XSS.
  4. Pelajaran BBP: satu filter string hampir selalu bisa dilewati — jangan jadikan semua harapanmu di situ.

About

LAB-RED - 4 fitur payload XSS bypass (search, komentar, bio, upload SVG) - tugas kuliah keamanan web

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages