ソース:
訳:
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 。
ほなほな。