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 は問題なく使用できて。

 

ほなほな。

SQLi WAF Bypass Techniques Part 1 — Time-Based Attacks から学ぶ

ソース:

infosecwriteups.com

脆弱性SQLインジェクション

 

訳:

Web アプリケーション ファイアウォールは、Web サイトを保護するための優れたソリューションではありますが、完璧ではなく。
これはリクエスト フィルタリング ルールによって作成された防御フレームワークですが、これらのルールは非常に単純で簡単に回避できる可能性があって。
SQL インジェクションに対する一般的な防御策とそれを克服する方法を見ていく。

 

 準備

今回は、testphp.vulnweb.com Web サイトを例として使用し、中央にある CloudFlare ファイアウォールをプロキシとして使用し。

 


今度はターミナルに行き、攻撃側をチェックし。
SQL インジェクションに 2 つの一般的なツールを使用するため、ターミナルを 2 つに分割し。

 

 

ほとんどの侵入テスターに​​よく知られているツールがsqlmap で。
もう 1 つはあまり知られていませんが、これも非常に優れています — ghauri 。
これらはどちらも SQL インジェクションの自動化に非常に適していて。
理想的には、HTTP リクエストをファイルまたは URL クエリ文字列としてこれらのツールのいずれかに渡し。
私の経験では、 sqlmap は ネットワーク上でより積極的ですが、より高速で。
欠点は、注意しないと IP が簡単にブロックされてしまう可能性があることで。

どのように動作するかを確認してみましょう。
でsqlmap が WAF プロキシ Web サイト k1t.uk まず、すぐに

 

 

 

お気づきのとおり、すぐに 403 エラーが 表示され、 CloudFlare が識別されて。
これは、 sqlmap が 独自の ユーザー エージェント をそのまま使用しているために発生し。
フラグを指定する必要があるため、これはかなり面倒な機能です –random-agent 毎回 。 一方、 ガウリには そんな必要はありません!

WAF を使用しない SQLi の検出

いよいよ SQL インジェクションを探すときが。
まず sqlmap そのために を使用しますが、 –random-agent フラグを付けます。  X で私をフォローしている 方は コマンドを共有していることに気づいたかもしれません 、私が特定のsqlmap
特に非常に興味深いコマンドの 1 つは、Web サイトをクロールするためのもので。
そうです。sqlmap クローラーとしても使用できます。
を使用してみましょう でsqlmap クローラー コマンドの Web サイト WAF ではない元 。
意図的に脆弱なサイトであるため、この機能を使用しても SQL のものを見つけるのは非常に簡単で。

 

sqlmap -u testphp.vulnweb.com --random-agent --crawl=3 --forms --hostname --current-db --smart

 

上記のコマンドを分解してみて。

  • -u は ターゲット URL を指定します。
  • –random-agent は 、通常のユーザーのブラウザに似たランダムなユーザー エージェントを選択します。 これは、基本的な CloudFlare ユーザー エージェントのブロックを回避するのに役立ちます。
  • –crawl=3 は、 クローラーがどの程度の深さまで移動するか (リンクの深さ) を指定します。
  • –forms は 伝えます sqlmap に 、このツールが POST、PUT、または HTML FORM で見つかったその他のリクエストにデータを入力できることを 。 認証されたフローでテストしている場合、これは非常に危険である可能性があることに注意してください。 私は通常、ログイン フォームを表示するときにこれを使用し、sqlmap を使用してそれらをバイパスしようとしますが、深さは 1 です。
  • –hostname –curent-db — これらを使用して、SQL インジェクションが成功したかどうかを検証します。 SQL サーバーのホスト名と Web アプリケーションに使用されるデータベースが表示されます。
  • –smart フラグは頻繁に使用するべきではありませんが、意図的に脆弱なアプリが存在することがわかって いる場合は、それだけで十分です。 ヒューリスティック チェックで脆弱性の可能性が高いとツールに通知された場合にのみ、SQL インジェクションを実行します。

このコマンドを実行すると、データベースが正常に利用されたことがわかって。

 


現在のデータベース名とホスト名が表示されて。
また、このエンドポイントで利用可能な SQL インジェクションのタイプも確認でき。 

 

 

で特定された脆弱なエンドポイントをコピーしましょう。 sqlmap この記事全体で使用するため、 

 

 

再度実行してみましょう sqlmap を
ただし、その特定のエンドポイントのみを WAF プロキシ URL k1t.uk を追加し に置き換え、 –random-agent フラグと –technique=T て、時間ベースの攻撃を試み

 

sqlmap -u 'http://k1t.uk/listproducts.php?cat=1' --random-agent --technique=T

 

 

現時点では、攻撃も成功したことがわかり。
時間ベースの手法は本当にうまくいき。
–random -agent は、 シミュレートしました。 sqlmap リクエストを通常のブラウザからのものとして

単純な WAF ルールのバイパス

サイバーセキュリティ チームは sqlmap からのリクエストを確認し、単純な WAF ルールを導入することにした。
という単語を含むリクエストが多数あったため sleep 、誰かが次のルールを使用してそれをブラックリストに登録しようとし。

 

この場合、URL クエリに「sleep」の小文字または大文字の文字列が含まれるかどうかだけがチェックされて。
これを攻撃側から再度実行しようとすると、ブロックされることがわかって。

 
の改ざんスクリプトをリストすることをお勧めして。
sqlmap WAF がいくつかの基本的なルールをバイパスしようとする場合は、次のコマンドを使用して。
 

sqlmap --list-tampers

 

ご存知のとおり、これは小文字と大文字のスリープ文字列を除外するだけなので、 randomcase 改ざんスクリプトを使用すると機能する可能性があって。

 

実際に動作を見てみましょう: 

 

sqlmap -u 'http://k1t.uk/listproducts.php?cat=1' --random-agent --technique=T --tamper=randomcase

 

 

この種の改ざんは、かなり基本的なルールに対して機能することがわかります。

ビット高度な WAF ルールのバイパス

通常は、次のような、より賢明なルールが存在します。

すべてを小文字に変換してから文字列と比較します。
このルールをデプロイすると、前の改ざんスクリプトはほとんどの場合機能しなくなるため、特にスリープ ペイロードに対して試行する必要がある次の改ざんスクリプトcharencode で。

 

sqlmap -u 'http://k1t.uk/listproducts.php?cat=1' --random-agent --technique=T --tamper=charencode

 

今回はうまくいきました!

まとめ

これまでに学んだことは、利用可能な改ざんスクリプトを確認することであり、状況とツールが出力する内容に応じて、それに応じて改ざんスクリプトを選択する必要があり。
今回は、時間ベースの SQL インジェクションに対してどのような改ざん手法が有効かを検討しました。
Ghauri ツールは非常に単純な WAF ルールにも機能することがわかりました。
の両方を組み合わせて使用​​するとよいでしょう 理想的には、 sqlmap ghauri

 

ほなほな。

Common 403 Bypasses Part 1 から学ぶ

ソース:

infosecwriteups.com

脆弱性:403エラー

 

訳:

403ステータスコードとは何ですか?

このステータス コードは、 特定のホスト、エンドポイントなどへのユーザーのアクセスを制限して。
これは、Web アプリケーション コードに実装されるか、特定の Web アプリケーション ファイアウォール ルールが存在する可能性があって。
テクノロジーのセットが異なるため、バイパスのケースも異なる場合があり。
つまり、ほとんどの場合にオールインワンの解決策は存在しないということですが、それでも最も一般的な方法を検討していき。

この記事では、複数のテクニックを取り上げて。

  • URL に特殊文字を適用する
  • HTTPメソッドの切り替え
  • ヘッダーの操作
  • IPの切り替えまたはVPNプロバイダーの使用

HTTP メソッドのファジング

まずは簡単に確認できる方法から見ていく。
特定のエンドポイントにアクセスしようとしただけで 403 ステータスが取得され、他のエンドポイントでは 200 ステータスが取得された場合、これが最初に試行すべきことの 1 つである可能性があって。
その目的は、Web アプリケーションによるさまざまな HTTP メソッド (GET、POST、PUT、DELETE など) の処理を​​チェックし、それらを変更すると 200 などの他のステータス コードが発生する可能性があるかどうかを確認することで。
これと同じくらい簡単です。
これをすぐに確認してください。
burp のような HTTP プロキシを使用できて。

 


または、curl などの CLI ツールを使用してリクエストを送信することもできて。

 

 

ヘッダーの操作

Web サイトに初めてアクセスしようとしたときに 403 コードを取得した場合には、別のテクニックを使用することもできて。
これらのヘッダーを試してみることをお勧めします。

 


これらと組み合わせて、127.0.0.1localhost、または一部のクラウド内部 IP も同様に使用できて。 

 

 

一部の Burp Suite プラグインはこれを行うか、このような別のヘッダーをリクエスト内に挿入することもできて。
また、これを CLI ツールで追加のヘッダーとして使用して。
たとえば、httpx を大規模に使用する場合で。

 

IPアドレスの変更またはVPNの使用

悪意のあるアクションを実行すると、Web アプリケーション ファイアウォールによってブロックされる可能性もあって。
たとえば、既知の悪意のあるペイロードを含むリクエストを送信しすぎたり、1 秒あたりのリクエスト数が多すぎたり、既知の機密ファイルにアクセスしようとしたりすると、IP がブラックリストに登録される可能性があり。
あなたの IP は一定期間、あるいは無期限にブラックリストに登録される可能性があって。
このため、手間がかかる可能性がある IP プロキシを使用するか、VPN プロバイダーを使用することをお勧めして。
私はNordVPN を使用していますが、特定のコンテンツにアクセスするためではなく、主にテスト中にブロックされた場合に使用して。
他の製品は遅かったり信頼性が低い可能性があるため、この製品を使用すると時間と神経を大幅に節約できて。

URL パスのファジング

そして最後の方法は、URL パスにいくつかのトリックを使用することです。 私はこれで最も成功して。
Web サイトへの初めてのアクセスで問題が発生した場合、または特定のエンドポイントに到達できない場合は、次のペイロードを送信してみる価値があって。

 

 

この方法を使用しているいくつかの Swagger ドキュメント サイトを発見しましたが、最終的にはより深刻なバグである SQL インジェクションを発見することになって。

 

 

ほなほな。