ソース:
脆弱性:SQLi
訳:
プログラムのことを知ったのは Nokia セキュリティ特典 4 月中旬のことで。
人々が 1 台以上の携帯電話を手に入れたという報告に興味を持ち、バグを探し始め。
いつものように、XSS/CSRF は人々に本当の報酬をもたらさなかったので (殿堂入りのみ)、私は SQL インジェクション (そして SQL インジェクションのみ) を探し始め。
1 週間で、私は彼らのサイトで合計 4 つの SQL インジェクションを見つけましたが、4 つ目はこれら 3 つのうちの 1 つとかなり似ているため、そのうちの 3 つについて書き。
それで:
www4.nokia.de での SQL インジェクション
Googleを使ってこのサイトを見つけ。実際の脆弱なリンクは次のとおりで。
http://www4.nokia.de/storelocator/
脆弱な変数は User-Agentヘッダー で、ブランクまたはロード以外のページで応答がなかったため、 ブラインドSQLインジェクションで。
背後にあるクエリは INSERT INTO で、MySQL はデータベースで。
それで、次のようなものをどのように悪用しますか。
10 分間有効な PoC を作成しようとした後、何をすればよいのかわかりませんでした。 そこで、私は古い友人の一人、 ブライアン・デ・ハウワー に尋ねました。 数分後、彼は「 おい、複数の行に挿入しようとしたか? 」と言いました...
何らかの理由でそれを忘れていました 。
では通常の AND 3=23 を使用できません。 現在、 INSERT クエリ
は有効なクエリであり、通過します。つまり、データを取得できません。
true/falseのエラーをトリガーする何らかの方法が必要でした。
それで?
私のお気に入りのブラインド SQL インジェクション手法の 1 つは、データベースがサブクエリで複数の行を返すようにすることです。
例えば、
SELECT a,(select b from table) from table;
もちろん、複数の行がある場合は、「サブクエリは複数の行を返します」を返し。
ここで、UNION キーワードを使用してトリックを実行し。
SELECT 1 UNION SELECT 2;
-> "サブクエリは複数の行を返します";
ステートメントを使用すると CASE 、最終的なインジェクションは次のようになり。
User-Agent: ',1,1),(1,2,3,4,(select 1 union select case when(substr(version(),1,1)=5) then 1 else 2 end))-- -
ページが読み込まれます。
User-Agent: ',1,1),(1,2,3,4,(select 1 union select case when(substr(version(),1,1)=4) then 1 else 2 end))-- -
ほなほな。