SQLi WAF Bypass Techniques Part 2 から学ぶ

ソース:

infosecwriteups.com

脆弱性:SQLi

 

訳:

前回のセッションでは、主要なタイムベース SQL インジェクション WAF バイパスについて学習しました。
今回はさらに一歩進んで、他の SQL インジェクション タイプの WAF ルールを破ることを試みて。
いくつかの防御を実装できる他の方法と、それらを回避する方法を確認して。

守備側

すでに準備されているファイアウォールルールを使用して、防御側から直接始め。
ターゲットに応じて (セキュリティが強化されているかどうか)、高度な防御が導入されている可能性があって。
それは、プログラムのセキュリティ チームが保護層を追加することにどれだけ真剣に取り組んでいるかによって決まり。
次の例を見てみましょう。

 

URL クエリを小文字に変換し、ブラックリストに登録されている 2 つの単語 (AND と OR) をチェックし。

ブラックリストに登録された文字列の特定

最初にターゲットに近づくときは、どのようなファイアウォール ルールが存在するかわからず。
Ghauri や SQLmap などのツールから指標を取得した後 (または、もちろん手動でテストすることによって) のみ、ある程度の推定を得ることができて。
Web アプリケーション ファイアウォールによってブロックされた場合は、まずどの単語がフィルターで除外される可能性があるかを確認し。

 

 

これは XSS をバイパスするのとよく似ており、どの HTML タグがフィルターで除外されているかを確認する必要があって。
今回は、どの既知の SQL コマンドがフィルターで除外されているかを確認したいと考えて。
ブラックボックス テストの観点からは、 AND 文字列と OR 文字列はフィルタリングされていますが、その論理記号 ( && ||) はフィルタリングされていないことがわかり。 。
これらの文字列を特定することは、WAF バイパス プロセスの最初のステップで。

Atlas を使用して改ざんスクリプトを特定する

ツールの使用を提案している人もいます Atlas sqlmap 改ざん検出に。
4 年前に更新されましたが、依然として WAF バイパスの有効なオプションです。
私は個人的には、これをあまり使用していなく。
本当に多くの誤検知が発生する可能性があり、時間の無駄になるからで。
ただし、実際の動作を見てみましょう。
ご自身で判断してください。

Atlas のペイロードの準備

改ざん提案のために Atlas を実行する前に、SQL インジェクション用の初期ペイロードを取得する必要があって。
自分で構築することも、sqlmap を使用することもでき。
sqlmap には冗長オプションがあり。
ペイロードを表示するには、詳細度を少なくとも 3 に設定する必要があります。


詳細レベルは最大 5 までありますが、それらのレベルでは必要のない多くの情報が得られて。
sqlmap の実行後にペイロードの 1 つをコピーする必要があって。

 


次に、それを Atlas ツールに貼り付ける必要があり。

 

python3 atlas.py -u 'target.com/endpoint.php?key=value' -p "<YOUR_PAYLOAD>" --random-agent -v

 

ご覧のとおり、多くの結果が得られましたが、そのうちの 1 つが機能するはずであることがわかっているため、それでも役に立ち。


全体として、これらの改ざんを 1 つずつチェックするのに多くの時間を費やすことに。 私が個人的に使用している、もっと良い方法があるので、ご紹介しましょう。

WAF バイパスのための sqlmap 改ざんスクリプトの調査

通常、ターミナルにはすべての sqlmap 改ざんを表示するためだけに用意された別のタブがあり。
それらをリストするには、次のコマンドを実行するだけで。

 

sqlmap --list-tampers

 


選択肢はたくさんありますが、AND 文字列と OR 文字列を論理演算子に置き換える必要があることを覚えておいて。
この場合に私がやりたいのは、 grep コマンドをいくつかの正規表現とともに使用してフィルタリングすることで。 

 

sqlmap --list-tampers | grep -E " AND | OR "

 


すべてを選択するのではなく、そのうちの 2 つだけが除外されていることがわかり。 私たちの特定のケースでは、シンボリック 論理 改ざんスクリプトが最もうまく機能する可能性があります。

 

sqlmap -u 'http://k1t.uk/listproducts.php?cat=1' --random-agent --flush-session --technique=B --hostname --batch --tamper=symboliclogical

 

レート制限ルールのバイパス

これをやっていると、ブロックされた文字列をチェックし、それらをバイパスする方法を見つけるだけで、一日中遊んでしまう可能性があり。
実際のシナリオでは、次のような他の基本ブロックを実装できて。


同じ IP から指定したエンドポイントに送信されるリクエストの数を確認し。
この場合、そのエンドポイントが 10 秒あたり 10 件のリクエストを受信すると、IP はしばらくの間ブロックされて。
他の場合には、無期限にブロックされる可能性があって。
お勧めします この問題が発生した場合に備えて、 NordVPN を使用し、IP を切り替えることを。

そもそもブロックされたくない場合は、 -delay sqlmap と ghauri の両方で オプションを使用することをお勧めして。
各リクエストを送信する間隔を秒単位で指定できるため、Web サイトではより穏やかになり。
もちろん、sqlmap はかなり遅くなりますが、この場合、IP は問題なく使用できて。

 

ほなほな。