it-swarm-id.com

Bagaimana cara menguji kerentanan injeksi SQL di situs dengan bidang input?

Metode apa yang tersedia untuk menguji kerentanan injeksi SQL?

48
John S

Ada beberapa cara menguji aplikasi untuk kerentanan seperti SQL Injection. Tes dibagi menjadi tiga metodologi berbeda:

Injeksi Buta:

Contoh MySQL:

http://localhost/test.php?id=sleep(30)

Jika pernyataan SQL ini diinterpretasikan oleh database maka akan butuh waktu 30 detik untuk memuat halaman.

Pesan Kesalahan:

http://localhost/test.php?id='"

Jika pelaporan kesalahan diaktifkan dan permintaan ini rentan terhadap injeksi sql maka kesalahan berikut akan dihasilkan:

Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat '"' pada baris 5

Injeksi Berbasis Tautologi :

http://localhost/test.php?username=' or 1=1 /*&password=1

Dalam hal ini menyediakan Tautologi , atau pernyataan yang selalu benar memberikan hasil yang dapat diprediksi. Dalam hal ini hasil yang dapat diprediksi akan masuk penyerang dengan pengguna pertama di database, yang biasanya administrator.

Ada alat yang mengotomatiskan penggunaan metode di atas untuk mendeteksi SQL Injection dalam aplikasi web. Ada alat gratis dan sumber terbuka seperti Wapiti dan Skipfish yang melakukan ini. Sitewatch menyediakan layanan gratis yang jauh lebih baik daripada alat sumber terbuka ini. Saya dapat mengatakan itu karena saya adalah pengembang untuk Sitewatch.

52
rook

Yang terbaik untuk tidak menguji situs Anda untuk injeksi SQL. Yang terbaik untuk menghindari potensi injeksi SQL. Jangan pernah membuat kueri SQL dengan melakukan sendiri pemrosesan string saat ada input pengguna. Gunakan parameter terikat di semua kueri (juga bersihkan semua data pengguna jika itu dapat digunakan dengan cara yang berbahaya dan berikan batasan yang masuk akal pada kueri). Itu adalah query sql_execute("select user from user_db where id="+input_id) tidak aman (bayangkan jika input_id = "1 OR 1==1 --")), Tetapi stored_procedure = "select user from user_db where id = ? LIMIT 1;", sql_execute_with_param(stored_procedure, input_id); aman.

Jelas, ini hanya jika Anda mencoba membuat situs Anda sendiri aman. Jika Anda mencoba menemukan kekurangan pada aplikasi lain, ini cerita lain, dan berpotensi melawan FAQ yang menyatakan situs ini bukan untuk topi hitam. Tapi OWASP memiliki artikel yang sangat bagus tentang pengujian untuk - injeksi SQL .

13
dr jimbob

Jika Anda mulai dari nol, saya akan menyarankan salah satu dari yang berikut:

  1. Pekerjakan seseorang yang tahu apa yang mereka lakukan
  2. Gunakan alat otomatis sebagai penghenti celah awal. Beberapa opsi termasuk Burp Pro, ZAP, dan SQL Map.

Perlu diingat, bahwa ketika Anda mengirim input yang aneh dan berpotensi berbahaya ke aplikasi web, Anda memiliki peluang besar untuk merusak integritas aplikasi Anda.

Anda dapat langsung menghancurkan aplikasi web Anda, atau Anda dapat menyimpan input aneh dalam database aplikasi yang kemudian ditarik dan diuraikan kemudian - dan mungkin bahkan tidak oleh aplikasi Anda.

Aturan umum untuk jenis pengujian ini sederhana: Anda tidak selesai menguji sampai Anda memulihkan dari cadangan yang dikenal baik. Anda seharusnya tidak mempertimbangkan aplikasi Anda dalam kondisi operasi normal setelah pengujian injeksi otomatis sampai setelah Anda melakukannya.

5
Daniel Miessler