2013-12-16 7 views
5

私はウェブアプリケーションのセキュリティと脆弱性に関する学校プロジェクトを行っています。そのために私は自分自身で作成しました非常に簡単なウェブサイトにはログインと検索バーがあります。完全にブラインドSQLインジェクション列の列挙ですか?

ここでは、ログインをサイレントにしていますが、検索バーにはSQLインジェクションの出力が表示されます。だからデモンストレーションの目的のために、私はタイムベースの完全なブラインドSQLインジェクション攻撃をログインにしたいと思っています...しかし、私はちょっと立ち往生しています。

私は、時間ベースの状況で、ログインクエリのテーブルにある列の数を列挙することができますどのようには考えていません:

SELECT * FROM customer WHERE cMAIL='' AND cPWD='';

I nは、ORDER BYを行うことはできません;#、以降の私は何かがうまくいかないときはエラー出力を全く得ません。私が兆候を得ることができる唯一の方法は、SLEEP()またはBENCHMARK()です。

しかし、私はORDER BYをSELECT IF()ステートメントに入れることはできません。だから、どのように多くの列が存在するかを知るには(それは私にとって組合を不可能にする)。

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

EDIT:サイトは非常に安全です(mysqliを使用せず、mysqlのみ)。多くの列が存在していたか、私が見てSELECTを使用して自分の道をbruteforced ORDER BYを使用して

の代わりに:それはただのデモンストレーションのために

+0

データベースは、ユーザーごとに異なるビューに制限されていますか?私が試してみようとしているのは、 'SHOW TABLES;'と 'DESCRIBE ;'です。アクセスできるもの(そして、もし私が運が良ければ、テーブル構造)を見るだけです。 –

+0

@AlejandroIvánそれは動作しません。これは**完全に**ブラインドSQLインジェクションです。何かを見るための唯一の方法は、クエリの完了までの時間を確認することです。ページはエラーが発生しても変更されません。 – Volatile

答えて

3

オーケーなので、私は自分の質問への答えを見つけた

SELECT * FROM customer WHERE cMAIL='' AND cPWD='';

を行うことにより、暗闇の中で列挙することができます:

SELECT * FROM customer WHERE cMAIL='' UNION SELECT null,null,null AND SLEEP(5);# AND cPWD=''

データベースが5秒間スリープするまで、selectにさらに多くのnullを追加し続けるだけです。次に、与えられたテーブルにいくつの列があるかを知っています。

これは他の人に役立つことを期待しています。

関連する問題