SQLMapとProxychainsを使ったWAF回避の実装手順:Tamperスクリプトの選定と検証方法

Published on: | Last updated:

最近、WAF(Web Application Firewall)のこと、特にどうやってそれを「テスト」するか、みたいなことをよく考えてる。うん、まあ、平たく言えば「突破」するって話なんだけど。なんか、ただツールを回すだけじゃなくて、その裏にあるロジックとか、どうしてブロックされたり、逆にするっと抜けられたりするのか、そのへんが面白いなと思って。

よく聞かれるのが、「SQLMap使ってもCloudflareにすぐ弾かれるんだけど、どうすればいいの?」ってやつ。わかる。めっちゃわかる。あれ、最初は絶望するよね。今日はその辺の話を、自分用のメモみたいな感じで、ちょっとまとめてみようかなって。正直、プロ中のプロってわけじゃないから、まあ、一個人の試行錯誤の記録みたいなもんだと思って読んでくれると嬉しい。

先說結論

いきなり結論から言うと、WAF、特にCloudflareとかModSecurityみたいな手強いやつを相手にするなら、ツールを組み合わせるのがマジで大事。具体的には、「SQLMap」に「ProxyChains」をかませて、さらに「tamperスクリプト」で攻撃コードを偽装する。この三点セット。これが今のところの最適解に近いんじゃないかなって、個人的には思ってる。一個一個は知ってても、この組み合わせで「なんでうまくいくのか」を理解するのがポイント。

そもそもWAFって何で攻撃を止められるの?

ちょっとだけおさらい。WAFっていうのは、ウェブサイトの門番みたいなやつ。変なリクエスト、例えばSQLインジェクションみたいな典型的な攻撃コードが飛んできたら、「お前は通さん!」ってブロックしてくれるセキュリティの仕組み。

じゃあ、どうやって「変なリクエスト」だって判断してるかっていうと、だいたいはパターンマッチング。リクエストの中に ' OR 1=1-- とか UNION SELECT みたいな、教科書に載ってるようなSQLインジェクションのコードが入ってたら、即座に「はい、アウトー!」って感じで403エラーを返してくる。あとは、同じIPアドレスから短時間に大量のリクエストが来たら「怪しい!」って判断してブロックしたりもする。賢いよね。

だから、こっちがやるべきことは、その「パターン」にいかにして引っかからないようにリクエストを送るか、ってことになる。そこで出てくるのが、さっきのツールたち。

普通の攻撃は弾かれるけど、スクリプトでうまくやるとこうやってすり抜けるイメージ。
普通の攻撃は弾かれるけど、スクリプトでうまくやるとこうやってすり抜けるイメージ。

代表的なWAF、CloudflareとModSecurityってどう違うの?

WAFと一口に言っても色々あるけど、特によく名前を聞くのがCloudflareとModSecurity。この二つ、似てるようで結構性格が違うんだよね。

項目 Cloudflare ModSecurity
タイプ クラウド型(CDNサービスの一部) オープンソース(サーバーにインストール)
防御の考え方 世界中のトラフィックから学習して、賢くブロックする感じ。どっちかというと「振る舞い検知」が得意。AIっぽい。 基本は「ルールセット」命。細かく定義されたルールに違反したらブロック。職人技って感じ。
突破の難易度 IPベースのブロックが厳しいから、Proxyがほぼ必須。賢い分、パターンをちょっと変えただけじゃすぐバレることも。 ルールがわかれば、そのルールをかいくぐる「抜け道」を見つけやすいこともある。逆に、ガチガチに固められてると手も足も出ない。
よく見る場所 スタートアップから大企業まで、世界中のモダンなWebサイト。 日本のレンタルサーバーとかだと、大体このModSecurityが裏で動いてることが多いよね。AWS WAFみたいなもっと複雑なやつとはちょっと違うけど、基本は似てる。
個人的な印象 金持ち喧嘩せず、みたいな。力技で来る相手をいなすのがうまい。 頑固な門番。決まった合言葉(ルール)以外は絶対通さないマン。

怎麼做:実際にWAFをバイパスする手順

よし、じゃあ実際にどうやって設定していくか。ここからはコマンドとかも出てくるけど、やってることはシンプルだから大丈夫。

ステップ1:ProxyChainsの設定

まず、IPアドレスをガチャガチャ変えて、WAFに「こいつ、また来たな」って思わせないようにするための準備。ProxyChainsっていうツールを使う。これは、自分のPCから出る通信を、色々なプロキシサーバー経由にしてくれるやつ。

設定ファイルを開いて編集する。ターミナルでこう打つ。

sudo mousepad /etc/proxychains.conf

mousepad の部分は、自分が使ってるテキストエディタ(nanoとかvimとか)に変えてね。ファイルを開くと、最初の方はTorを使う設定になってるはず。

# socks4  127.0.0.1 9050

これは使わないから、行の頭に # をつけてコメントアウト。で、ファイルのいちばん下に、自分が契約してるResidential Proxy(普通の家庭用回線に見えるプロキシ)のリストを貼り付ける。こんな感じで。

http 111.222.333.444 8080 user password
http 111.222.333.445 8080 user password
...

次に、プロキシをどう使うかの設定。dynamic_chain とか strict_chain はコメントアウトして、random_chain を有効にする。こうすると、リストの中からランダムでプロキシを選んでくれるから、より追跡されにくくなる。あと、quiet_mode も有効にしておくと、余計なログが出なくて画面がスッキリする。

#dynamic_chain
#strict_chain
random_chain

#...
quiet_mode

これで保存すれば、ProxyChainsの準備はOK。ちゃんと設定できたか不安なときは、proxychains curl http://ipinfo.io/ip を何回か実行してみて。毎回IPアドレスが変わってれば成功。

ProxyChainsの設定ファイル。ターミナルの黒い画面で、ここをいじるのが第一歩。
ProxyChainsの設定ファイル。ターミナルの黒い画面で、ここをいじるのが第一歩。

ステップ2:SQLMapに魔法をかける

いよいよ主役のSQLMap。でも、普通に使うだけじゃダメ。ProxyChainsを経由させて、さらにtamperスクリプトで攻撃コードをWAFが騙される形に変形させる。

コマンドはこんな感じになる。

proxychains sqlmap -u 'http://test.site/page.php?id=1' --dbs --batch -p id --random-agent --tamper=between,space2comment --dbms mysql --tech=B --no-cast --flush-session --threads 10

うわ、長いって思うよね。わかる。でも分解すると簡単。

  • proxychains sqlmap -u '...': 「proxychains経由でsqlmapをこのURLに実行してね」って意味。
  • --dbs --batch: 「見つかったデータベース名を全部表示して。途中で質問しないでね」っていうおまじない。
  • --random-agent: User-Agentを毎回ランダムに変えてくれる。これもWAF対策の一つ。
  • --tamper=between,space2comment: これがキモ。本当に。SQLMapに元々入ってる「tamperスクリプト」っていうのを指定してる。betweenは、' '(スペース)を' BETWEEN 'A' AND 'Aみたいに、WAFが検知しにくい形に変えてくれる。space2commentはスペースを/**/みたいなコメントに置き換えるやつ。こういうのを組み合わせることで、WAFのパターンマッチングをすり抜ける。
  • --dbms mysql --tech=B: 「データベースはMySQLだと思う。あと、チェック方法はBooleanベースでお願い」って指定。絞った方が速い。
  • --threads 10: 処理を速くするためのおまじない。まあ、これは環境によるかな。

このコマンドを実行すると、今まで403エラーで門前払いされてたのが嘘みたいに、SQLMapがデータベースの情報を抜き出してきてくれることがある。そうなったら、もう、ガッツポーズだよね。

そして、最終的に欲しい情報がこうやって見えてくるわけ。
そして、最終的に欲しい情報がこうやって見えてくるわけ。

反例與誤解釐清

ここで大事なのが、ツールは完璧じゃないってこと。例えば、Ghauriっていう別のSQLインジェクションツールがあるんだけど、これでスキャンしたら最初「脆弱性あり!」って出るのに、詳しく調べてみたら「やっぱ違ったわ、ごめん(false positive)」みたいになることが結構ある。

ツールが「脆弱性なし」って言ったからって、本当に安全とは限らない。逆もまた然り。結局は、ツールが出した結果を鵜呑みにしないで、なんでそういう結果になったのかを考えるのが大事なんだと思う。WAFにブロックされたら、「どのルールに引っかかったんだろう?」「じゃあ、このtamperスクリプトを試してみたらどうかな?」みたいに、試行錯誤するプロセスそのものが、一番のスキルアップになるんじゃないかな。

採購/預算思路:じゃあ、これを大規模にやるには?

一個のサイトをじっくり見るのもいいけど、例えば自社の管理する大量のサイトのセキュリティチェックをしたい、みたいなとき。一個一個手でやってたら日が暮れちゃう。

そういう時は、もっと自動化する。やり方はいろいろあるけど、例えば…

  1. 対象リストの作成: Google Dorkとかを使って、似たような作りのサイト(例えば同じフレームワークを使ってるサブドメインとか)をざっとリストアップする。
  2. URLの収集: waybackurlsとかを使って、それらのサイトに存在するURLを過去のデータから根こそぎ集める。
  3. パターンの抽出: 集めた大量のURLの中から、gfみたいなツールでSQLインジェクションの影響を受けそうなURL(?id=とか?category=みたいなパラメータがついてるやつ)だけを絞り込む。
  4. 自動スキャン: 最後に、Nucleiみたいな高速スキャナに、SQLインジェクション用のテンプレートを食わせて、リストにあるURLを一気にスキャンさせる。

ここまでやると、もう個人の趣味っていうよりは、ちゃんとしたセキュリティ業務の領域だね。でも、基本的な考え方は、SQLMapで一個のサイトを試すのと一緒。「いかに効率よく、怪しい箇所を見つけ出すか」っていうパズルみたいなもの。

…と、まあ、こんな感じでつらつらと書いてみたけど、結局のところ、WAFバイパスって、攻撃者と防御者のいたちごっこなんだよね。今日通用したテクニックが、明日にはもう通用しなくなってるかもしれない。だから、ツールの使い方を覚えるだけじゃなくて、「なんでこれで通るのか」っていう根本を理解しておくのが、一番腐らないスキルになるんだろうな、なんて思う。

一応言っておくけど、これはあくまで学習とか、許可された範囲での脆弱性診断のための知識だからね。悪用は、ダメ、絶対。約束だよ。

みんなはWAFをテストする時、どんな工夫してる?もし面白い方法があったら、ぜひ教えてほしいな。

Related to this topic:

Comments

  1. Guest 2025-12-09 Reply
    海外プロジェクトでWAF抜けようとした時、SQLMapにProxychains組み合わせて試してた。Tamperスクリプトね、選ぶときいつも「公式のおすすめだけで本当にいける?」ってずっと引っかかる。いや、案外それで十分なのかもしれないけど、自信は持てないんだよな……。挙動変わるのかなーって半分信じて半分疑ってる感じ。そのままマニュアル通りやったことも一応あったけど、何か足りない気がして、結局自作スクリプトも差し込んじゃった。 ただ、その効果どう測ったらいいか未だによく分からなくて。納得感が出ない。世界中探せば色々手法あるにはあるけどさ、「これ」っていう答え無いし、なんか結局ぐるぐる同じ所回ってる感じが強いんだよね。
  2. Guest 2025-05-29 Reply
    へぇ〜、WAFとセキュリティの深い世界、マジ興味深いっすね!SQLインジェクション対策とかProxyChainsの設定、めっちゃ勉強になりそう。セキュリティエンジニアになりたい人には超オススメの知識だと思います!
  3. Guest 2025-05-19 Reply
    最近WAFについて学んでるんだけど、SQLインジェクションやXSSの防御法が面白いよね!CloudflareとModSecurityの違いとかも気になるし、みんなの経験聞かせてほしいな〜!
  4. Guest 2025-05-11 Reply
    WAFの効果は確かに重要だけど、過信するのも危険だよね。設定ミスや誤検知で本来の機能が果たせなくなることもあるし、常に最新情報を追う必要があると思う。
  5. Guest 2025-05-09 Reply
    こんにちは!WAFについてもっと知りたいんだけど、特にSQLインジェクションの防ぎ方とか効果的なスキャン手法について詳しく教えてもらえると嬉しいです!
  6. Guest 2025-05-09 Reply
    WAFについての情報、特にSQLインジェクションやXSS対策に関する詳細を教えてもらえませんか?子供たちが安全にネットを使えるよう、もっとリソースが必要です。
  7. Guest 2025-04-26 Reply
    最近、WAFについての話題をよく目にしますが、子供たちには難しい内容かもしれませんね。もう少し簡単に説明してもらえたら嬉しいです。どんなツールを使うのかも気になります!
  8. Guest 2025-04-25 Reply
    こんにちは!WAFやSQLインジェクション対策についての情報、すごく興味深いですね。もし可能なら、関連するリソースや実践的な例を共有していただけると嬉しいです。国際的な視点から学ぶことができれば、更に理解が深まります!よろしくお願いします。
  9. Guest 2025-04-21 Reply
    WAFについての情報、すごく参考になります!CloudflareとModSecurityの具体的な使い方についてもう少し詳しく教えてもらえますか?特に設定方法が気になります。