Dalam mysql, suntikan ralat merujuk kepada membina pernyataan yang sesuai untuk mendapatkan data yang dikehendaki melalui maklumat ralat yang dilaporkan pada halaman jika sistem aplikasi tidak menutup fungsi ralat pangkalan data, anda boleh menggunakan fungsi extractvalue(). untuk mendapatkan data yang dikehendaki daripada sasaran Satu rentetan yang mengandungi nilai pertanyaan dikembalikan dalam XML.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi mysql8.0.22, komputer Dell G3.
Suntikan ralat juga boleh dikatakan sejenis suntikan buta------bina muatan supaya maklumat itu bergema melalui gesaan ralat. Anda boleh mempertimbangkan untuk menggunakan suntikan ralat apabila pertanyaan bersama tidak dapat mendedahkan kedudukan yang jelas.
Jadi bagaimanakah suntikan ralat terbentuk?
Pertama, sistem aplikasi tidak menutup fungsi pelaporan ralat pangkalan data Ralat dalam beberapa penyata SQL digemakan secara langsung pada halaman, malah ada yang membocorkan secara langsung nama pangkalan data dan nama jadual
Kedua, adalah penting bahawa fungsi pelaporan ralat MySQL yang sepadan tidak ditapis di latar belakang 2. Fungsi yang biasa digunakan untuk pelaporan ralat Di sini saya menggunakan extractvalue() fungsi, yang fungsinya adalah untuk mengekstrak nilai daripada sasaran Mengembalikan rentetan yang mengandungi nilai yang ditanya dalam XML EXTRACTVALUE (XML_document, XPath_string): Parameter pertama: XML_document adalah dalam format Rentetan dan merupakan nama XML document object; Parameter kedua: String) 3. Proses asas 1. Dapatkan maklumat versi Gunakan pernyataan 1' dan extractvalue(1,concat(0x7e, (pilih @@versi), 0x7e))-- . Antaranya, concat ialah parameter dalam penggabungan (), dan 0x7e ialah simbol ~ selepas penyahkodan. -- ialah watak komen Komen semua kenyataan berikutnya dalam kod sumber untuk mengelakkan ralat. Keputusan selepas ujian adalah seperti berikut: // 1 sebelum concat ialah parameter pertama bagi fungsi extractvalue(), yang boleh digantikan dengan sebarang nombor //0x7e kedua dalam pernyataan boleh ditinggalkan 2. Dapatkan nama pangkalan data Gunakan pernyataan1‘ and extractvalue(1,concat(0x7e,(select database()),0x7e))--+,
1’ and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e))--+. 其中group_concat将tale_name字段的所有行放在一行上显示出来,如下所示
1' and extractvalue(1,concat(0x7e,(select * from (select username from users limit 0,1) as a),0x7e))--+. 修改其中的limit参数即可获取users表中的不同行内容
Atas ialah kandungan terperinci Apakah suntikan ralat mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!