Overview Course & Reference Manual

Selamat datang di panduan pembelajaran SQL Injection dan pengujian menggunakan tool sqlmap. Panduan ini dirancang untuk memberikan pemahaman menyeluruh mulai dari konsep dasar hingga cara perbaikan query secara aman.

1. Apa itu SQL Injection (SQLi)?

SQL Injection (SQLi) adalah kerentanan keamanan web yang terjadi ketika kode pengembang secara tidak sengaja mengizinkan input dari pengguna untuk digabungkan langsung ke dalam perintah/query SQL tanpa sanitasi atau parameter binding.

Akibatnya, penyerang dapat menyisipkan karakter atau perintah SQL buatan (seperti ' OR '1'='1 atau UNION SELECT) yang akan diinterpretasikan oleh server database sebagai perintah resmi, bukan lagi sekadar data.

2. Parameter GET vs Parameter POST

GET Parameter

Nilai dikirim melalui URL baris browser (contoh: sqli.php?id=1). Sangat mudah diamati dan diuji langsung. Di sqlmap diuji menggunakan opsi -u "http://localhost/...".

POST Parameter

Nilai dikirim di dalam HTTP Request Body (contoh: formulir login login.php). Di sqlmap diuji dengan menyertakan flag --data="username=admin&password=123".

3. Cara Kerja Prepared Statement

Prepared statement (pernyataan siap pakai) bekerja dalam 2 tahap terpisah di database engine:

  1. Prepare Stage: Template query SQL dikirim dan dikompilasi oleh server MySQL terlebih dahulu (misal: SELECT * FROM users WHERE id = ?). Struktur query dikunci.
  2. Execute Stage: Nilai variabel dikirim secara terpisah dan diikat (bound) murni sebagai nilai data literal, tanpa mengubah struktur perintah yang telah dikunci.

4. Cara Membaca Output & Parameter SQLMap

sqlmap adalah alat pengujian penetrasi otomatis yang mendeteksi dan mengeksploitasi kerentanan SQL injection. Berikut adalah penjelasan parameter penting:

Option / Flag Fungsi Utama Contoh Penggunaan
-u <url> Menentukan target URL yang akan diaudit. -u "http://localhost/sqlmap-lab/sqli.php?id=1"
-p <param> Menentukan nama parameter spesifik yang ingin diuji. -p id atau -p q
--level=1-5 Tingkat ketelitian/kedalaman tes (default: 1). Level tinggi menguji Headers/Cookies. --level=3
--risk=1-3 Tingkat risiko payload yang digunakan (default: 1). Risk 3 mencoba payload heavy. --risk=2
--technique Fokus ke teknik SQLi spesifik: B (Boolean), E (Error), U (Union), S (Stacked), T (Time). --technique=BEU
--text-only Hanya membandingkan konten teks HTTP response (mengabaikan HTML tag). --text-only
--dbs Mengekstrak daftar nama database yang tersedia. sqlmap -u "..." --dbs
--tables Mengekstrak daftar nama tabel di database target. sqlmap -u "..." -D sqlmap_lab --tables
--columns Mengekstrak nama kolom dari tabel tertentu. sqlmap -u "..." -D sqlmap_lab -T users --columns
--dump Mendownload / dump data dari isi tabel database. sqlmap -u "..." -D sqlmap_lab -T users --dump

5. Arti Response HTTP 403 & WAF Bypass

Response HTTP 403 Forbidden terjadi saat Web Application Firewall (WAF) atau sistem pengaman web memblokir request karena mendeteksi pola payload mencurigakan (seperti kata kunci UNION, SELECT, atau kutip satu ').

Dalam lingkungan pengujian profesional, penguji menggunakan tamper script atau penyesuaian header HTTP untuk mengevaluasi efektivitas aturan WAF.

6. Cara Memperbaiki SQL Injection

Satu-satunya cara yang paling efektif dan direkomendasikan secara standar industri (OWASP) untuk mencegah SQL Injection adalah dengan menggunakan Prepared Statements dengan Parameterized Queries.

Secure Remediation Pattern (PDO)
// Selalu gunakan placeholder (?) atau named parameter (:param)
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email AND status = :status');
$stmt->execute([
    'email' => $user_email,
    'status' => 'active'
]);
$user = $stmt->fetch();