BUG-BOUNTY SERIES 10: SQL Injection (SQLi). Teknik Eksploitasi Database yang Masih Relevan dan Berbahaya
Setelah memahami bagaimana HTTP bekerja pada Series 9, kita mulai masuk ke tahap eksploitasi vulnerability yang paling fundamental dalam dunia web security, yaitu SQL Injection (SQLi).
Meskipun termasuk vulnerability klasik, SQL Injection masih sering ditemukan dalam berbagai aplikasi modern, terutama pada sistem yang tidak menerapkan validasi input dengan baik.
Dalam konteks Bug Bounty, SQL Injection termasuk kategori high impact vulnerability karena dapat memberikan akses langsung ke database.
Apa Itu SQL Injection?
SQL Injection adalah celah keamanan yang terjadi ketika aplikasi memasukkan input pengguna secara langsung ke dalam query database tanpa proses validasi atau sanitasi yang memadai.
Akibatnya, attacker dapat:
- Menyisipkan query berbahaya
- Mengubah logika query
- Mengakses data yang seharusnya tidak diizinkan
Dampak SQL Injection
SQL Injection dapat menyebabkan:
- Akses tidak sah ke database
- Pencurian data sensitif (username, password, email)
- Manipulasi atau penghapusan data
- Bypass authentication (login tanpa kredensial valid)
- Dalam beberapa kasus: Remote Code Execution (RCE)
Cara Kerja SQL Injection
Sebagai ilustrasi sederhana:
Aplikasi memiliki query:
SELECT * FROM users WHERE username = '$user' AND password = '$pass';Jika input tidak divalidasi, attacker dapat memasukkan payload seperti:
' OR '1'='1Sehingga query berubah menjadi:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';Hasilnya:
- Kondisi selalu bernilai TRUE
- Authentication berhasil dibypass
Cara Menemukan SQL Injection
1. Identifikasi Input yang Rentan
Fokus pada:
- Form login
- Search field
- Parameter URL (
?id=1) - API request
2. Uji Payload Dasar
Gunakan karakter sederhana untuk mendeteksi error:
'
"Jika muncul:
- SQL error
- Database error message
Indikasi kuat adanya SQL Injection
3. Analisis Response
Perhatikan:
- Perubahan struktur halaman
- Error message
- Delay response (untuk blind SQLi)
Jenis-Jenis SQL Injection
1. Error-Based SQLi
- Mengandalkan error message dari database
- Mudah diidentifikasi
2. Union-Based SQLi
- Menggabungkan query untuk menampilkan data lain
Contoh:
' UNION SELECT username, password FROM users -3. Blind SQL Injection
- Tidak menampilkan error
- Menggunakan:
- Boolean-based (true/false)
- Time-based (delay)
Contoh:
' AND SLEEP(5) --Tools untuk SQL Injection
1. Burp Suite
- Intercept dan modifikasi request
- Testing manual yang presisi
2. SQLMap
Tool otomatis untuk eksploitasi SQL Injection.
Contoh penggunaan:
sqlmap -u "http://target.com/page.php?id=1" --dbsFitur:
- Enumerasi database
- Dump data
- Eksploitasi otomatis
Teknik Lanjutan
1. Bypass Filter
Gunakan:
- Encoding
- Case manipulation
- Comment injection (
--,#)
2. Identifikasi Database
Setiap DB memiliki karakteristik berbeda:
- MySQL
- PostgreSQL
- MSSQL
3. Extract Data Bertahap
- Database → Table → Column → Data
Best Practice saat Testing
- Jangan melakukan dump data berlebihan
- Fokus pada proof of concept (PoC)
- Hindari merusak data produksi
- Ikuti scope program Bug Bounty
Cara Mencegah SQL Injection
Dari sisi developer, mitigasi meliputi:
1. Prepared Statements (Parameterized Query)
Memisahkan query dan input user.
2. Input Validation
- Filter karakter berbahaya
- Gunakan whitelist
3. ORM (Object Relational Mapping)
Mengurangi penggunaan query manual
4. Error Handling
- Jangan expose error database ke user
Kesimpulan Series 10
SQL Injection adalah vulnerability klasik yang tetap relevan dan berbahaya hingga saat ini. Dengan teknik yang tepat, bug hunter dapat mengeksploitasi celah ini untuk mendapatkan akses ke data sensitif.
Namun, eksploitasi harus dilakukan secara etis dan sesuai dengan scope yang ditentukan.
🔐 "Satu input yang tidak divalidasi dapat membuka seluruh database."
Pada Series 11, kita akan membahas vulnerability yang sangat umum namun sering diremehkan, yaitu Cross-Site Scripting (XSS), serta bagaimana teknik eksploitasinya dapat digunakan untuk mengambil alih sesi pengguna.