2017-12-10 15 views
-1

のない我々は、このクエリを持っていると仮定してみましょう:LIMIT句のSQLインジェクションエラー出力

SELECT title FROM articles LIMIT 15 

とき、私たちは、LIMIT句に任意の文字列を渡すことができますが、サイトには、他の言葉ではなく、出力エラーを行いますサイトに空白のページが表示されるエラーが発生します。

私の質問は、攻撃者はまだどんな種類のSQL注入を進めることができますか?たぶんprocedure_analyseでの時間ベースの注入?

ありがとうございます。

+1

http://www.edwardl.xyz/2015/02/06/SQL%20Injections%20in%20MySQL%20LIMIT%20clause/ – Hadi

+0

メソッドが呼び出されましたが、すぐにロードされたため、おそらくエラーがすぐにスローされました。 –

+0

制限句を消毒するためにソースを変更できませんか?どのようなスタックを使用していますか?もしPHP/mysqlが読んだら価値があるかもしれないならhttps://stackoverflow.com/questions/10014147/limit-keyword-on-mysql-with-prepared-statement –

答えて

0

このようなSQLインジェクションの脆弱性が存在する場合:

$UnsafeVariable = $_GET['param']; 
$sql = "SELECT title FROM articles LIMIT $UnsafeVariable"; 

は、次にSQLインジェクションの例は次のように::

http://mysite.example.com/page.php?param=0 UNION SELECT anything FROM anytable 

これは、SQLインジェクションを犯すためにUNIONを使用するのが一般的だ可能性があります。私はここにあなたがhttps://owasp.orgのようなサイトで読むことができない何かを明らかにするわけではありません。読書をしてみるべきです。


デモ:私はベンチマークを試してみた

mysql> create table MyTable (id int primary key); 

mysql> create table SecureTable (secret varchar(50)); 

mysql> insert into MyTable values (1), (2), (3); 

mysql> insert into SecureTable values ('Alohomora'); 

mysql> select id from MyTable limit 
     /* now the part that is SQL injected */ 
     1 union select secret from SecureTable; 
+-----------+ 
| id  | 
+-----------+ 
| 1   | 
| Alohomora | 
+-----------+ 
+0

最初にいくつかのリサーチを行うようにしてください。LIMITY句の後に/を使用することはできません.SQLクエリ構造を見てください。 –

+0

@TadeášJílek(上記のデモを参照)は、MySQL 5.6.31でテストされています。 –

+0

@TadeášJílekあなたは自分でSQLクエリ構造を学ぶ必要があります。 –