Pengertian SQL Injection
SQL Injection merupakan sebuah teknik yang membobol celah keamanan yang ada pada lapisan basis data sebuah aplikasi. Celah ini terjadi ketika input dari pengguna tidak difilter secara baik dan benar, contohnya adalah ketika kolom username yang seharusnya hanya diisi dengan huruf atau angka tapi malah diisi dengan karakter lain (seperti: – =’) sehingga penyerang menggunakan celah tersebut dengan cara memasukan query dari SQL.Jenis-Jenis Cara SQL Injection
1. Teknik UNION
Ketika aplikasi rentan terhadap injeksi SQL dan hasil kueri dikembalikan dalam respons aplikasi, kata kunci UNION dapat digunakan untuk mengambil data dari tabel lain dalam database. Ini menghasilkan serangan UNION injeksi SQL.
Kata kunci UNION memungkinkan Anda mengeksekusi satu atau lebih query SELECT tambahan dan menambahkan hasilnya ke permintaan asli. Sebagai contoh:
SELECT a, b FROM tabel1 UNION SELECT c, d FROM tabel2
Kueri SQL ini akan mengembalikan hasil tunggal yang ditetapkan dengan dua kolom, yang berisi nilai dari kolom a dan b di table1 dan kolom c dan d di table2 .
Agar queri UNION berfungsi, dua persyaratan utama harus dipenuhi:
- Kueri individual harus mengembalikan jumlah kolom yang sama.
- Tipe data di setiap kolom harus kompatibel antara kueri individual.
2. Blind Injection
Blind Injection SQL muncul ketika aplikasi rentan terhadap injeksi SQL, tetapi respons HTTP-nya tidak berisi hasil queri SQL yang relevan atau rincian kesalahan database apa pun. Dengan kerentanan Blind Injection SQL, banyak teknik seperti serangan UNION tidak efektif, karena mereka mengandalkan kemampuan untuk melihat hasil dari permintaan yang disuntikkan dalam tanggapan aplikasi. Masih dimungkinkan untuk mengeksploitasi injeksi SQL buta untuk mengakses data yang tidak sah, tetapi teknik yang berbeda harus digunakan.
Pertimbangkan aplikasi yang menggunakan cookie pelacak untuk mengumpulkan analitik tentang penggunaan. Permintaan ke aplikasi menyertakan header cookie seperti ini:
Cookie: TrackingId = u5YD3PapBcR4lN3e7Tj4
Ketika permintaan yang mengandung cookie TrackingId diproses, aplikasi menentukan apakah ini adalah pengguna yang dikenal menggunakan query SQL seperti ini:
SELECT TrackingId FROM pengguna yang dilacak WHERE TrackingId = 'u5YD3PapBcR4lN3e7Tj4'
Kueri ini rentan terhadap injeksi SQL, tetapi hasil dari kueri tidak dikembalikan ke pengguna. Namun, aplikasi tersebut berperilaku berbeda tergantung pada apakah permintaan mengembalikan data. Jika itu mengembalikan data (karena TrackingId yang dikenali telah dikirimkan), maka pesan "Selamat datang kembali" ditampilkan di dalam halaman.
Perilaku ini cukup untuk dapat mengeksploitasi kerentanan injeksi SQL buta dan mengambil informasi, dengan memicu respons yang berbeda secara kondisional, tergantung pada kondisi yang disuntikkan. Untuk melihat cara kerjanya, misalkan dua permintaan dikirim yang berisi nilai cookie TrackingId berikut :
xyz 'UNION SELECT' a 'WHERE 1 = 1--
xyz' UNION SELECT 'a' WHERE 1 = 2--
xyz' UNION SELECT 'a' WHERE 1 = 2--
Nilai pertama ini akan menyebabkan kueri mengembalikan hasil, karena kondisi yang diinjeksi atau 1 = 1 benar, sehingga pesan "Selamat datang kembali" akan ditampilkan. Sedangkan nilai kedua akan menyebabkan kueri tidak mengembalikan hasil apa pun, karena kondisi yang disuntikkan salah, sehingga pesan "Selamat datang kembali" tidak akan ditampilkan. Ini menentukan jawaban untuk setiap kondisi yang disuntikkan tunggal, dan karenanya mengekstrak data satu per satu.
Misalnya, ada tabel yang disebut Pengguna dengan nama kolom Nama Pengguna dan Kata Sandi , dan pengguna yang disebut Administrator . Kami dapat secara sistematis menentukan kata sandi untuk pengguna ini dengan mengirimkan serangkaian input untuk menguji kata sandi satu karakter sekaligus.
Untuk melakukan ini, kita mulai dengan input berikut:
xyz 'UNION SELECT' a 'FROM Users WHERE Username =' Administrator 'dan SUBSTRING (Kata Sandi, 1, 1)>' m '-
Ini mengembalikan pesan "Selamat datang kembali", yang menunjukkan bahwa kondisi yang disuntikkan adalah benar, sehingga karakter pertama kata sandi lebih besar dari m .
Selanjutnya, kami mengirim input berikut:
xyz 'UNION SELECT' a 'FROM Users WHERE Username =' Administrator 'dan SUBSTRING (Kata Sandi, 1, 1)>' t '-
Ini tidak mengembalikan pesan "Selamat datang kembali", menunjukkan bahwa kondisi yang disuntikkan salah, dan karakter kata sandi pertama tidak lebih besar dari t .
No comments:
Post a Comment