Dalam banyak kasus, ketika penyusup menggunakan alat injeksi, mereka menemukan bahwa alat tersebut tidak dapat menguraikan nama tabel dan nama bidang. Itu karena semua alat memiliki kamusnya sendiri, yang mencakup nama tabel dan nama bidang. Jika administrator nama tabel dan nama field diubah sehingga tidak ada dalam kamus ini, maka tool yang kita gunakan tidak akan bisa menebak nama field dan nama tabel. Pada artikel berikut, kita akan mulai dari menganalisis injeksi manual untuk membangun garis pertahanan terhadap injeksi SQL.
Penyusup akan membuat kondisi penilaian sederhana untuk menentukan apakah halaman tersebut memiliki kerentanan injeksi. Langkah umumnya adalah sebagai berikut:
Halaman yang akan dideteksi di sini adalah http://127.0.0.1/111/view.asp?id=198
1 . Penyusup Jika Anda ingin menginjeksi situs secara manual, Anda harus mengatur browser untuk memastikan bahwa pesan kesalahan dapat dikembalikan selama injeksi manual. Langkah-langkahnya adalah sebagai berikut:
klik kanan pada browser dan pilih "Properti", lalu pilih " Lanjutan" di kotak dialog pop-up. tab. Seperti yang ditunjukkan di bawah ini:
Gambar 1
Kemudian lepaskan pengait di depan "Tampilkan pesan kesalahan HTTP ramah" dan terakhir klik tombol "Terapkan".
2. Penyusup mengirimkan URL berikut ke browser:
http://127.0.0.1/111/view.asp?id=198 dan 1=1.
Jika ada kerentanan injeksi SQL, database dapat ditanyakan 1 adalah identitas. Abaikan, jadi halaman normal akan dikembalikan. Halaman ini sama dengan http://127.0.0.1/111/view.asp?id=198 diperkirakan akan disuntik. Jika beberapa pesan kesalahan dikembalikan, beberapa penyusup dasar mungkin meninggalkan situs tersebut.
3. Penyusup selanjutnya mengirimkan URL berikut ke browser:
http://127.0.0.1/111/view.asp?id=198 dan 1=2
1=2 adalah ketidaksetaraan identitas. Jika situs mendukung kueri basis data, situs tersebut mungkin akan mengembalikan informasi seperti yang ditunjukkan pada gambar di bawah ini:
Gambar 2
Secara umum, jika muncul penyusup seperti gambar di atas, pada dasarnya dapat dipastikan situs tersebut dapat melakukan serangan SQL injection.
Namun, dalam banyak kasus, penyusup dapat dengan cepat menentukan apakah situs target memiliki kerentanan injeksi SQL hanya dengan menggunakan satu kutipan, dan mengirimkan URL berikut ke browser:
http://127.0.0.1/111/view.asp? id=198'if Mengembalikan informasi berikut menunjukkan bahwa ada lebih dari setengah kemungkinan adanya kerentanan injeksi:
Penyedia Microsoft OLE DB untuk Driver ODBC kesalahan '80040e14'
[Microsoft] [ODBC Microsoft Access Driver] Kesalahan sintaksis string ada dalam ekspresi kueri 'id =1'. /list.asp, baris 50
4. Saat ini, penyusup mulai membuat pernyataan kueri SQL khusus untuk menanyakan nama tabel database situs, dan mengirimkan pernyataan berikut ke URL:
http://127.0.0.1/ 111/view.asp?id= 198 dan ada(pilih * dari admin)
Pernyataan ini menanyakan database untuk melihat apakah tabel admin ada, halaman normal akan dikembalikan halaman akan dikembalikan. Umumnya penyusup akan terlebih dahulu menguji nama tabel yang umum digunakan, yang juga merupakan nama tabel dan nama field yang ada dalam kamus kata sandi alat injeksi umum. Jika nama tabel bukan salah satu nama tabel yang umum digunakan, penyusup akan menggunakan rekayasa sosial untuk menebak nama tabel. Dalam hal ini, kecil kemungkinan penyusup dapat menebak nama tabel.
5. Setelah mendapatkan nama tabel, penyusup mulai membuat pernyataan kueri untuk menanyakan nama field database, dan mengirimkan pernyataan berikut ke URL:
http://127.0.0.1/111/view.asp?id=198 dan ada (pilih pengguna dari admin)
ini Pernyataan ini untuk menanyakan tabel admin di database apakah bidang pengguna ada. Jika ada, halaman normal akan dikembalikan. Jika tidak ada, halaman kesalahan akan dikembalikan.
7. Selanjutnya, penyusup mulai menentukan nilai bidang id, dan membuat pernyataan berikut untuk menanyakan nilai id: http://127.0.0.1/111/view.asp?id=198 dan ada (pilih id dari admin di mana id=1 )
mengembalikan halaman yang benar jika benar, dan mengembalikan halaman kesalahan jika salah.
6. Setelah menebak nama tabel dan nama field, penyusup mulai membuat pernyataan query untuk menebak panjang akun administrator, dan mengirimkan pernyataan berikut ke URL:
http://127.0.0.1/111/view.asp?id =198 dan ada(pilih id dari admin di mana len(pengguna)<6 dan id=1)
Pernyataan ini untuk menanyakan rentang panjang nama pengguna di bidang pengguna, yang berarti panjangnya kurang dari 6. Jika ya benar maka akan kembali ke halaman normal, jika salah akan kembali ke halaman error.
Persempit cakupannya, lalu buat pernyataan berikut untuk menentukan panjang spesifik nama pengguna:
http://127.0.0.1/111/view.asp?id=198 dan ada(pilih id dari admin di mana len(pengguna)= 5 dan id=1)
Benar Jika terjadi kesalahan, halaman normal akan dikembalikan.
8. Selanjutnya, penyusup memasuki langkah terakhir untuk membuat pernyataan untuk menanyakan nama pengguna administrator, dan mengirimkan pernyataan berikut ke URL: http://127.0.0.1/111/view.asp?id=198 dan ada( pilih count(*) dari admin dimana left(user,1)='a')
Pernyataan ini untuk menebak nama pengguna dari sisi kiri nama pengguna ke a .Jika salah maka akan kembali ke halaman error.Tebak satu persatu.Tebak Pada posisi kedua, pernyataan yang diubah adalah (user,2)='ad', dan seterusnya.
Setelah penyusup mendapatkan nama pengguna dan kata sandi, injeksi hampir selesai.
Adapun cara pencegahannya sangat sederhana. Dari proses di atas kita dapat melihat bahwa jika nama tabel dan nama field bukan termasuk nama tabel dan nama field yang umum digunakan, maka penyusup akan menggunakan rekayasa sosial untuk menebaknya nama tabel dan nama field yang dimodifikasi oleh administrator cukup rumit, penyusup akan menyerang. Jika penyerang masih tidak dapat mencapai tujuannya, ada metode pertahanan sederhana lainnya yaitu mengunduh beberapa patch anti-injeksi dari Internet dan menerapkannya Metodenya adalah dengan memodifikasi file situs dan menambahkan pernyataan pemfilteran untuk memfilter pernyataan yang dikirimkan oleh penyusup untuk mencegah suntikan. Ya, saya tidak akan menjelaskan prinsipnya kepada Anda di sini.