Tricky Oracle SQL Injection Situation から学ぶ

ソース:

blog.yappare.com

脆弱性SQLインジェクション
 
訳:
最近、侵入テスト中に見つかった SQL インジェクションを解決するときに、いくつかの新しいこととバグバウンティを学び。
私にとって新しいと思われる新しいテクニックの 1 つは、師匠の pokleyzz から学んだもので。
この挿入は最近のバグ報奨プログラムで発見され、実際のパス/パラメータが置き換えられ。

インジェクションは次のエンドポイントの「idNumber」パラメータで見つかりました
/foo/?theName=YAP&idNumber=248001[ここ]

 

このターゲットでは一般的なペイロードが実行され、最初は次のペイロードTRUE / FALSE 条件を識別するために機能していることがわかり。

 

/foo/?theName=YAP&idNumber=248001'+AND+'1'='1 TRUE
/foo/?theName=YAP&idNumber=248001'+AND+'2'='1 FALSE  


パイプ演算子も使用できて。

/foo/?theName=YAP&idNumber=248'||'001 TRUE
/foo/?theName=YAP&idNumber=24'||'8'||'001 TRUE
/foo/?theName=YAP&idNumber=24'||'X'||'001 FALSE


に絞り込むことができました これらの条件により、このアプリケーションで使用するデータベースをOracle PosgreSQL IBM DB2 、または Informix 。 

 

最初は、私が知っているのと同じテクニックを使用してこれを実行できると思い。

参照: https://blog.yappare.com/2012/04/advance-oracle-blind-sql-injection.html

ただし、 CASE() は 機能しませんでした。
使い方を理解するのをやめました 何度か試した後、 CASE() の 。 次に、このテクニックを試し。

参照: https://blog.yappare.com/2017/03/blind-sql-injection-in-erim-not-sure.html

喜びはありません。 デッドエンド。
ほぼ2日間試した後、私は自分でやるのを諦め、数人の友人に助けを求め。
運がなかった。 私は最後のオプションである pokleyzz を試しました。
わずか1時間弱で使えるテクニックを教えてくれました。 

 

/foo/?theName=YAP&idNumber=248'||<既知の SQL 関数をここにブルートフォース>||'001


その結果、「 rownum 」が受け入れられたことがわかり、これは DBMSOracle であることを示しています。 再確認のため、次のことを質問しました。

/foo/?theName=YAP&idNumber=24800'||行番号||'


上記のペイロードにより、Web サイトには 「 theName 」製品のリストが表示されます。 で始まる 「 idNumber 」 24800 

 

 

面白い! さて、この注入から少なくともデータを抽出するにはどうすればよいでしょうか? 別のブロッカーが特定されました。 アプリケーションが次の文字をフィルタリング/置換したようです
_ ( ) + . whitespaces

これも行き止まりのように思えますが、pokleyzz は次のペイロードを使用してデータを抽出する別の素晴らしい方法を示しました。

 

/foo/?theName=YAP&idNumber=248'||<bruteforce all column_name here>||'001 - We found few column names which one of it was "username"

そして最後のステップは次のとおりです。 

 

 /foo/?theName=YAP&idNumber=248001'and''||username||''like'<bruteforce-character>%

 

上記の攻撃ポイントで Intruder を実行すると、出来上がり、ユーザー名を取得し。

 

ほなほな。