2017-10-25 5 views
-1

私はいくつかのSQLインジェクションの基礎を学んでいます。私は脆弱なアプリケーション(SQLi Labs)を持っているので、ソースコードを見て、mysqlインターフェイスと同じ結果を返すためにURLをどのようにパラメータ化するべきかを理解しようとしています。しかし、私は解決できない違いがあるので、私を助けてください。SQLインジェクション - ウェブuiとmysqlの出力の結果

これは、PHPコードです:

$sql="SELECT * FROM users WHERE id='$id'"; 
$result=mysql_query($sql); 
$row = mysql_fetch_array($result); 

これは、MySQLのクエリです:

mysql> select * from users where id=3--'' OR 1=1; 
+----+----------+------------+ 
| id | username | password | 
+----+----------+------------+ 
| 1 | Dumb  | Dumb  | 
| 2 | Angelina | I-kill-you | 
| 3 | Dummy | [email protected] | 
| 4 | secure | crappy  | 
| 5 | stupid | stupidity | 
| 6 | superman | genious | 
| 7 | batman | mob!le  | 
| 8 | admin | admin  | 
| 9 | admin1 | admin1  | 
| 10 | admin2 | admin2  | 
| 11 | admin3 | admin3  | 
| 12 | dhakkan | dumbo  | 
| 14 | admin4 | admin4  | 
+----+----------+------------+ 

これはURLです:

http://192.168.19.155/sqli-labs/Less-1/?id=2--%20%27%27%20OR%201=1 

URLが私に一つだけの行をバック与えます( "?id = 2"オプションで定義された)残りのクエリ( - %20%27%27%20 OR%201 = 1)は無視されるようです。

URLクエリは、mysqlインターフェイスのようにユーザー全体のテーブルを返す必要があります。入力フィルタリングはないので、なぜURLの結果がmysqlインタフェースの出力と等しくないのか理解できません。私を助けてください!

ありがとうございました! Erik

+0

:あなたが予想される応答に、このような方法を取得するスクリプトを修正することができますか? 'ID = 2%27%20OR%20%271パーセント271'はトリックを行う必要があります27 =%、およびかなりシンプルです。私は、あなたがコメントで達成しようとしていることをよく分かりません。あなたが[ここ](https://dev.mysql.com/doc/refman/5.7/en/ansi-diff-comments.html)を見ることができるように、 ' - 'は少しトリッキーです。コメント構文を使用するためのその他のオプションについては、セクション9.6までをクリックしてください。 – jh1711

答えて

0

実際には、mysql_fetch_arrayは1行だけの情報を返します。以下のような基本噴射何かについて

while ($row = mysql_fetch_array($result)) { 
    print_r($row); 
} 
関連する問題