CyberDef Dokumentasi | Time-Based Blind SQLI
Apa itu Time-Based SQLI ?
Pada Time-Based SQL Injection, perbedaan utamanya dari beberapa tipe tipe SQLI adalah bahwa kerentanan ini tidak memberikan feedback berupa informasi yang langsung terlihat seperti pesan error atau data yang bocor langsung ke pengguna. Sebaliknya, Time-Based SQL Injection menggunakan time delay (penundaan waktu) sebagai indikator apakah query SQL yang berbahaya berhasil dijalankan atau tidak. time delay ini bisa di lakukan menggunakan command SLEEP(x) bersamaan dengan UNION, misal saya menggunakan payload :
admin123' UNION SELECT 1,SLEEP(5);- -
ini contoh sederhana dari serangan Time-Based SQL Injection yang mencoba memanfaatkan penundaan waktu untuk memverifikasi apakah query SQL yang dieksekusi rentan terhadap injeksi, bisa dilihat saya memasukkan SLEEP(5) yang artinya websites akan merespon query saya setelah 5 detik, di payload ini saya akan mengenumerasi jumlah column yang ada pada suatu table, jika websites merespons setelah 5 detik maka jumlah column ada 2 jika tidak akan merespons sebelum 5 detik
Terus kegunaan Time-Based SQLI apa sih ? jika kita tidak menerima informasi apapun mengapa Time-Based SQLI merupakan kerentanan yang berbahaya ? peretas menggunakan kerentanan ini untuk mengenumerasi dan mengakses informasi sensitif secara tersembunyi, Dengan memanfaatkan time delay sebagai respons, peretas dapat perlahan mengungkap isi database, misal saya ingin mengenumerasi database, saya akan menebak nama dari database tersebut hingga time delaynya merespons berarti saya mendapatkan nama database yang benar, lalu setelah mendapat nama database, saya ingin mengenumerasi tabel tabel yang ada di dalam database tersebut, nah saya menebak lagi nama namanya sampai time delaynya merespons, hingga seterusnya sampai mendapatkan informasi sensitif, memang terlihat melelahkan, tapi jika kalian tau cara melakukannya akan terlihat mudah loh ! di bawah ini saya akan menyimulasikan serangan Time Based SQLI
Selain itu, time-based SQLI sulit terdeteksi karena tidak menampilkan pesan error atau data yang terlihat, sehingga teknik ini lebih terselubung dan sering lolos dari mekanisme deteksi
Simulasi Serangan Time Based SQLI
Disini saya akan menggunakan lab TryHackMe untuk menyimulasikan serangan ini, sekarang mari kita ke step by step untuk menemukan dan mengeksploitasi serangan Time Based SQLI
Step 1 | Mengidentifikasi apakah website Rentan
Bisa kalian lihat websites ini rentan terhadap sql injection, karena jika saya memasukkan tanda ‘ di akhir referer, maka yang muncul di sql result akan berupa command error yang menandakan bahwa websites ini memiliki kerentanan SQLI, sekarang kita akan mengenumerasi columnya ada berapa menggunakan payload :
x’ union select 1,2; —
Setelah mengidentifikasi si websites ini mempunyai berapa column, di case saya websitesnya mempunyai 2 columns, sekarang kita akan mengidentifikasi apakah websites ini mempunyai kerentanan Time-Based SQLI atau tidak menggunakan payload berikut ini :
x’ union select 1,SLEEP(5); —
Seperti yang kalian liat, request timenya adalah 5 detik, dan websites merespons sesuai waktu yang kita mau, ini menjelaskan bahwa websites ini memiliki kerentanan Time Based Blind SQLI
Step 2 | Mengenumerasi Database
Setelah mengedentifikasi bahwa websites ini memiliki kerentanan Time Based SQLI dan memiliki 2 columns, kita akan menebak nama dari database yang ada di websites ini, menggunakan payload :
x’ union select 1, SLEEP(5) where database() like ‘s%’; —
payload ini akan memeriksa apakah nama database dimulai dengan huruf “s”. Tanda persen (%
) adalah wildcard yang berarti "karakter apa pun setelah 's'." jika nama database dimulai dengan huruf u maka waktu dari websites ini merespon adalah 5 detik, jika tidak maka websites akan langsung merespons
nah disini request timenya adalah 5 detik, berarti nama databse di awali dengan s sekarang menebak kata keduanya, dan seterusnya sampai mendapatkan nama yang penuh, disini saya sudah menemukan nama full dari databasenya yaitu sqli_four
Step 3 | Mengenumerasi Table
Kita sudah mengidentifikasi database dari websites ini, yaitu sqli_four, sekarang waktunya mengenumerasi table yang ada, nah saya akan menebak kemungkinan adanya tables users, disini saya akan menggunakan payload :
x’ union select 1, SLEEP(5) from informastion_schema.tables where table_schema=’sqli_four’ and table_name like ‘users%’; —
Seperti yang kalian lihat websites ini mempunyai tables yang bernama users ! sekarang mari kita menebak apa saja yang ada di dalam users ini
Step 3 | Mengenumerasi Columns
Setelah mendapatkan informasi tables yaitu users, sekarang kita akan mengenumerasi data data yang ada di dalam tables ini, dan mungkin mendapatkan kredensial login pertama tama saya akan mencoba column bernama username, saya akan mengenumerasi column menggunakan payload ini:
x’ union select 1, SLEEP(5) from information_schema.columns where table_name=’users’ and column_name like ‘username%’; —
seperti yang kalian liat column yang bernama username ada !, sekarang apakah ada column bernama password ? jika ada maka kita bisa mendapatkan kredensial dari 2 column ini dan login ke halaman admin
seperti yang kalian liat, request timenya adalah 5 detik, dan column bernama password dan username ada, sekarang mari kita menebak apa yang ada di 2 columns ini dan mendapatkan kredensial
Step 4 | Mendapatkan Kredensial dengan Menebak isi Column
Setelah mendapatkan 2 column yang mungkin berisi kredensial yaitu username dan admin, sekarang mari kita menebak isi dari column ini, pertama saya akan menebak isi dari column username, yaitu admin, mari lihat jika username admin ada menggunakan payload berikut ini :
Oke, username admin ada sekarang mari menebak isi dari column password, menggunakan payload berikut ini :
x’ union select 1, SLEEP(5) from users where username=’admin’ and password like ‘%’; —
oke, password nya ada 4 digit ya, sekarang mari kita tes satu persatu digit, setelah beberapa waktu, saya menemukan password yang cocok yaitu ‘4961’
Sekarang kita sudah mendapatkan kredensial dari admin melalui Time Based SQLI !!!, mari login di login form dan mendapatkan flagnya
Kesimpulan
Sekarang kalian sudah tau kan apa itu Time-Based Blind SQLI, jadi ini seperti kita melakukan bruteforce pada setiap digit/angka, dan sangat melelahkan tanpa automasi seperti sqlmap, saya lebih menyukai mengautomasi proses ini menggunakan sqlmap, segini dulu dari apa yang saya pelajari di Ekstrakurikuler saya yaitu CyberDef