SSRF 入門
SSRFとは?
Server-Side Request Forgery (サーバーサイド リクエスト偽造 : SSRF)
攻撃者がウェブサーバーを悪用して、そのサーバーに自分の指示した場所(他のサーバーやサービスなど)にアクセスさせる脆弱性
例: 本来はサーバーが安全な外部サイトにデータを取りに行く仕組みになっているところ、攻撃者がこの脆弱性を使って、サーバーに悪意のあるサイトにアクセスさせたり、社内の保護されたデータに不正にアクセスさせたりすることができる
許可されていないエリアへのアクセス。
顧客/組織データへのアクセス。
内部ネットワークに拡張する機能。
認証トークン/資格情報を公開します。
SSRFの種類
データが攻撃者の画面に返される通常の SSRF
SSRF が発生しても攻撃者の画面に情報が返されないブラインド SSRF 脆弱性
SSRFの方法
攻撃者がリクエストするURL https://website.thm/item/2?server=server.website.thm/flag?id=9&x=
本来はhttps://website.thm/item/2?をするリンクだが、https://server.website.thm/flag?id=9の情報が欲しい
server=api.website.thm/api/user が重要
server=以下がServer Requestの時に最初に来る
本来は、https://website.thm/item/2?が最初に来るはず
しかし、https://server.website.thm/flag?id=9&x=.website.thm/api/item?id=2のようにserver=以下が先頭に来て、それに本来のurlが続く。
このままだと本来のurlが続いてしまってリクエストが上手くいかない。
そこで、末尾に&x=をつけることで、URLのパスを切り、本来のurlを無効にする
&x= はURLのパスを切る役割
Server Requesting:の表示を見ながら適宜調整していくことが必要
潜在的なSSRF脆弱性を見つける
https://scrapbox.io/files/6713646fbfb8cb58a59e6c2c.png
よくあるプロフィールとかのアバターとかのurlからもSSRFできてしまう
/assets/avatars/1.png的なところのリンクを書き換えればいいだけ
https://scrapbox.io/files/67136df59025bdd5a7f85c7d.png
以下のパラメータがurlに入ってたら、SSRF脆弱性がある
server=
サーバーが指定された外部リソースにアクセスする可能性がある。
form=
フォームの送信先が外部URLに変更される可能性がある。
dst=(destinationの略)
ダウンロード先やアクセス先を外部URLに変えられる可能性がある。
url=
サーバーが指定された外部URLにリクエストを送る可能性がある。
redirect=
リダイレクト先が攻撃者の指定するURLに向けられる可能性がある。
path=
サーバー内部のパスやファイルに不正アクセスされる可能性がある。
callback=
next=
continue=
fetch=
proxy=
action=
出力が反映されないブラインド SSRF を使用している場合
requestbin.com、独自の HTTP サーバー、Burp Suite の Collaborator クライアントなどの外部 HTTP ログ ツールを使用してリクエストを監視する必要がある
SSRF脆弱性に対するチェック方法
拒否リスト(ブラックリスト)
特定のリソースやパターンに一致するリクエストを拒否し、それ以外を許可する。
例:機密エンドポイントやローカルホスト (127.0.0.1) へのアクセスを拒否。
問題点:攻撃者は代替のローカルホスト参照や特殊なDNSレコード(例:127.0.0.1.nip.io)を使い、ブラックリストをバイパスする可能性がある。
クラウド環境での例:169.254.169.254(クラウドメタデータのIPアドレス)へのアクセスもブロックすることが重要。攻撃者はこれを指すDNSレコードを悪用する可能性がある。
許可リスト(ホワイトリスト)
特定のリストにあるリソースのみアクセスを許可し、それ以外のリクエストを拒否する。
ブラックリストの弱点:ローカルホストや特定のDNSレコードをバイパスする攻撃手法に注意。
ホワイトリストの弱点:攻撃者がサブドメインを利用してホワイトリストを回避する可能性を考慮。
オープンリダイレクト対策:リダイレクト先の厳格な検証が必要。