こんにちは、ぎんたです。
今回は、TryHackMeで提供されている「Surfer」というルームの攻略の過程を記事にしています。
こちらの「SurferのURL」でアクセスできます。
今回のCTFはSSRF(Server Side Request Forgery)の脆弱性を使ってシステム管理者が意図しない内部サーバのコンテンツを取得することを体験できるものとなっています。
SSRFの脆弱性を使った内部サーバへのアクセス方法について知りたい方。
gobuster、burp suiteのツールの使用に興味のある方
CTFに興味のある方
が今回の対象です。
無料でアクセス可能なので、試してみたい方はぜひやってみてください。
スポンサーリンク
ポートスキャンによるサービスの列挙
nmapでポートスキャンを行います。
以下のコマンドを使用します。
nmap -sV -sC -T4 10.10.216.146
- -sV :サービスのバージョン列挙
- -sC :サービスに対するデフォルトスクリプトの実行
- T4 : 高速モードで実行
実行した結果
tarting Nmap 7.60 ( https://nmap.org ) at 2023-05-18 06:24 BST
Nmap scan report for ip-10-10-216-146.eu-west-1.compute.internal (10.10.216.146)
Host is up (0.00026s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.38 ((Debian))
MAC Address: 02:C8:D4:3F:C2:A5 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.20 seconds
内容を確認したところ、sshとhttpのサービスが稼働しているようです。
sshの方は認証情報が分からないので、まずはhttpの方を確認します。
Web Serverの確認
Webサーバ(http://10.10.216.146)にアクセスするとログインページでした。
ただし有効な認証情報が不明なので、サイト攻略の突破口を開くべくgobusterを使ってWebサイトの有効なパスを列挙します。
gobuster dir -u http://10.10.216.146 -w /usr/share/wordlists/dirb/common.txt
- -u サイトのURL
- -w 使用するワードリスト(AttackBoxにデフォルトで入っているリストを使用しました)
[+] Url: http://10.10.216.146
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Timeout: 10s
===============================================================
2023/05/18 06:27:01 Starting gobuster
===============================================================
/.htaccess (Status: 403)
/.htpasswd (Status: 403)
/assets (Status: 301)
/backup (Status: 301)
/.hta (Status: 403)
/index.php (Status: 302)
/internal (Status: 301)
/robots.txt (Status: 200)
/server-status (Status: 403)
/vendor (Status: 301)
/backup、robots.txtあたりが気になります。
まずは、robots.txtを確認します。
robots.txtは検索エンジンのクローラに対して、サイトのどの URL にアクセスできるか、アクセスを拒否するかを伝えるものです。
googleに公開したくない情報であり、有用な情報が記載されている可能性があります。
/backupフォルダ内のchat.txtというファイルにgoogleにインデックスされないようにする設定があることを確認できました。
内容を確認します。
AdminとKateの会話が書かれています。
内容を確認すると、
- export2pdfのセットアップを終わらせたこと
- pdfフォーマットで毎日のシステムレポートを必要としていること
- 内部サーバへの追加が完了したこと
- ユーザ名をパスワードとして使っていると推測できること
が分かりました。
ユーザがadminなのでパスワードもadminを使っていると想定し、最初に発見したログイン画面で試してみると、無事にログインできました。
ログイン後の管理画面を確認すると、右側に内部サーバへのアドレスが記載されているのが分かります。
「/internal/admin.php」に「system flag」があると記載があるので、この内容を確認するのがゴールなのかなと思います。
さらに下の方に画面を進めると、先ほどのchatの会話の中で出てきたレポートのエクスポートボタンがあったのでクリックしてみます。
クリックしたところ、「http://127.0.0.1/server-info.php」の内部サーバ上にあるコンテンツにアクセスしてレポートを取得しているような動きをしているのが分かりました。
「/internal/admin.php」にフラグがあると推測できるので、「Export to PDF」ボタンをクリックして取得するコンテンツを「/internal/admin.php」に変更すれば取得できるのかと思います。
そこで、WebアプリケーションのServer Side Request Forgeryの脆弱性を利用した攻撃を行いたいと思います。
SSRFの脆弱性を利用した内部サーバコンテンツへのアクセス
Server Side Request Forgeryは、攻撃者がサーバ側のアプリケーションを利用してインフラ内部の意図しないコンテンツにアクセスできる脆弱性です。
これにより、直接外部からはアクセスできないコンテンツにWebアプリケーション経由でアクセスさせることが可能になります。
Burp Suiteを起動して、firefoxでBurp SuiteをProxy先に指定します。
Burp Suiteの「Proxy」タブの「Intercept」を選択し、「Intercept is on」をクリックし、「Export to PDF」ボタンを押したときのリクエストをキャプチャします。
これでサーバに送られるリクエストを一時停止することができます。
リクエストの内容を確認します。
urlパラメータの箇所がレポートを取得する場所になっていることを確認できます。
そこで、このurlパラメータをflagがある場所の「/internal/admin.php」に変更します。(「/」を「%2F」にするなど、URLエンコードされた状態に変換しています)
変更が完了したら、「Foward」ボタンを押して、書き換えたリクエストをサーバへ送信します。
内部サーバの「internal/admin.php」へのアクセスが無事に行われ、画面上に記載のフラグを取得できました。
まとめ
今回は、SSRFの脆弱性を使って監視者が意図しない内部サーバのコンテンツを取得することを体験できるCTFを紹介しました。
- nmapによる列挙でsshとhttpが稼働していることが判明。
- gobusterでWebサイトのフォルダ・ファイルを列挙、robots.txtと/backupフォルダを発見する。
- サイト管理者とのチャットを発見し、認証情報が判明する。
- ログイン後の管理画面から、内部サーバにフラグがあるページの存在を確認する。
- SSRFの脆弱性を利用して内部サーバ上のサイトにアクセスし、フラグを取得。
SSRFの脆弱性を体験できるちょうどよいコンテンツだったよ。
今回の記事が参考になれば幸いです。
以上、ぎんたでした。
サイバーセキュリティを学ぶ上で必要な攻撃と解析に関する他の記事は、以下のリンクで確認できます。
学習に関しましては、以下のセキュリティの勉強法、おすすめの学習本・動画の記事が多くの方に読まれています。
資格の記事については以下の記事がおすすめです。
ITエンジニアへの転職については以下の記事がおすすめです。
その他学習・転職関連に関しましては、以下の記事もあわせて読まれています。
ぜひご覧ください!