Bagaimana untuk mengesan suntikan SQL?
Jawapan saya ialah: mengenai keselamatan Parti A, pengesanan suntikan SQL agak mudah dilakukan.
1) Ralat pengesanan suntikan.
2) Jangan menyuntik laporan ralat bool, kerana positif palsu agak tinggi.
3) Lakukan suntikan masa berdasarkan masa, operasi hubungan dan penyelenggaraan untuk melakukan rakaman db log perlahan, memantau tidur, pemantauan kata kunci penanda aras, anda boleh menambah nombor ID tugas imbasan ke titik perpuluhan tidur masa, sesuai untuk kedudukan. (p.s. Kaedah ini boleh menemui 99% suntikan SQL)
Oleh itu, apabila melakukan suntikan masa berasaskan masa, saya mengehadkan ralat masa dengan sangat keras. Walau bagaimanapun, @chengable sedang melakukan kerja berkaitan keselamatan pada Parti B, dan suntikan masa berdasarkan masa biasanya tidak boleh dilakukan. Difahamkan bahawa dia menapis kewujudan titik suntikan terlebih dahulu, dan kemudian mengesan sqlmapapi.py. Saya juga menggunakan sqlmap untuk ujian sebelumnya. . Walau bagaimanapun, suntikan masa sqlmap agak tepat Bagaimana jika anda tidak mahu menggunakan sqlmapapi.py? Di sini saya akan memindahkan logik suntikan berasaskan masa sqlmap.
Aduan: kod sqlmap tidak piawai, hodoh dan besar. Seseorang mengesyorkan saya untuk membaca kod sumber sqlmap dan belajar banyak sekarang setelah saya memikirkannya, saya menyerah lebih awal.
Jadi, jika anda malas dan tidak mahu melihat kod sumber dan menambah --technique=T -v 3, mari kita lihat muatan pengesanan sqlmap terlebih dahulu.
Nampaknya saya malas dan mencari beberapa cara, seperti yang anda boleh lihat daripada tangkapan skrin :
Mula-mula, sqlmap menyumbat muatan suntikan tidur:
Tidur disumbat pertama(5), selepas mendapati ia telah dieksekusi tidur(0) sekali lagi, dan akhirnya disumbat ia sekali lagi tidur(5).
Kemudian buat tekaan Idea semak umum ialah tidur(5) dahulu, dan kemudian tidur(0) jika kelewatan kedua berjaya. Jika tiada kelewatan ditemui, teruskan tidur(5 Jika kelewatan berjaya sekali lagi, peringatan bahawa mungkin terdapat suntikan akan muncul:
Akhir sekali, Apa yang sangat bijak ialah untuk mengelakkan positif palsu, sqlmap menggunakan syarat penghakiman untuk menghapuskan positif palsu Daripada rajah di atas, anda boleh melihat bahawa sqlmap menguji dua kali untuk menjadikan persamaan itu benar dan menguji dua kali untuk menjadikan persamaan itu tidak benar. Mengikut kelewatan kedua untuk menentukan positif palsu berdasarkan keadaan semasa.
Kembali ke kod sumber untuk melihat: Berdasarkan beberapa kata kunci sebelumnya, mari pergi terus ke kod untuk melihat . Contohnya, *nampaknya* muncul sebelum mencari kod langkah pertama:
sqlmap/lib/controller/checks.py:
Nilainya ialah purata 30 kali ganda ditambah TIME_STDEV_COEFF*sisihan piawai (sisihan) Manakala untuk TIME_STDEV_COEFF, menetapkannya kepada 7 boleh menjadikan ketepatan penghakiman 99.999999997440%.
Akhir sekali, tentukan sama ada masa penggunaan semasa permintaan adalah lebih besar daripada lowerStdLimit Jika ia lebih besar daripada kelewatan, ia bermakna kelewatan berlaku, dan jika ia kurang daripada ia bermakna tiada kelewatan. (selain itu, apabila lowerStdLimit kurang daripada 0.5 saat, lowerStdLimit mengambil masa 0.5 saat).
Emosi memberitahu saya bahawa saya harus memilih kaedah satu, dan rasional memberitahu saya bahawa saya harus memilih kaedah dua. Saya masih memilih kaedah dua dan mengukur titik suntikan (butiran). Pengimbasan yang sangat stabil mendapati kelemahan suntikan.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan analisis suntikan berasaskan masa sqlmap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!