Vulnhub - Toppo: 1 Walkthrough
はじめに
今回取り組んだのは Toppo: 1 。前回同様、難易度が Beginner のものから選びました。この VM に対して Kali から侵入してフラグを探します。配布されているのは vmdk ファイルのみで ova や vmx などなく、ダウンロードページには OS が Linux とだけ。アーキテクチャ (64bit/32bit) が不明でしたが、適当に 32bit の VM として VirtualBox で VM を作成しました。IP address は DHCP です。
Toppo: 1
・Type: CTF Challenge
・Level: Beginner
・URL: https://www.vulnhub.com/entry/toppo-1,245/
詳細
まずは VM の IP address を特定するところから。Kali に入っている netdiscover コマンドで、特定レンジで生きている IP address を検索します。
オプションの意味:
-r (IP address レンジの指定。指定しないと 192.168.0.0/16 になる。)
IP アドレスが特定できたのでどんなサービスポートが動いているのかを nmap で確認します。
オプションの意味:
-sV (バージョンスキャン。)
-p- (ポート範囲。- を指定している場合は 1~65535。)
-n (名前解決をしない。Closed だし。)
-oA (ファイルに保存する。扱えるすべてのフォーマットで保存。)
ssh (22)、http (80)、rpc (111) が特徴的でしょうか。rpc (59898) も見えますが、良くわからないのでひとまず保留。セオリー通り http でトップページにアクセスしてみても有益な情報は得られなさそうだったので dirb でほかにどんなディレクトリやファイルがあるのかを確認します。
admin ディレクトリが気になります。アクセスしてみるとディレクトリリスティング可能で、notes.txt があるのが見えますので、中身を確認したところパスワードらしきものが確認できました。これを使えば ssh ログインできるような気がします。
しかしユーザ名が分かりません。notes.txt からいくつかの好きなものなどキーになる情報が確認できたので、いったんユーザの候補リストを作成します。パスワードの文字列にも人の名前らしき値があるのでこれも列記しました。
hydra で ssh ポートに列記したユーザ名、取得したパスワードを使い有効なユーザ名を探したところ、1 件見つかりました。
オプションの意味:
-L (ユーザリストファイルを指定。)
-p (パスワードを一つ指定。)
さっそくこのユーザ名とパスワードで ssh 接続を試し、無事に接続できることは分かりました。
他にどんなユーザがいるのかを確認しましたが、めぼしいものはいません。root になることが目標となりそうです。不適切に設定された SUID はなさそうです。sudo で実行できるコマンドを確認しようとしましたが command not found になります。直接 sudoers を確認してみると、このユーザは awk コマンドが書かれている (=awk を root として実行できる) ようです。
(他のユーザの確認)
↓
(SUID ファイルの確認)
↓
(sudoers の確認)
awk はテキストを加工するコマンドという印象があります。何かこのコマンドを使って実行できる方法はないかと探したところ、system() で記述した値を実行するとの事。
試しに whoami を渡してみると root が返ってきました。また、root のホームディレクトリに flag.txt があるのが分かります。
awk で root で実行できるので、このflag.txt も awk を使って無事に中身を確認することができました。
(追記)
調べてみると、awk による権限昇格は /bin/sh を実行すればシェルを取れるみたい。ただ、/bin/bash も試しましたがこちらは動かず。(違いがよく分かっていない。。。)
また、find で SUID を探したときに python2.7 が含まれていました。なので、python でシェルを実行すれば root のシェルが取れます。
まとめ
ワークフロー
[偵察]
- netdiscover (IP アドレスの調査)
- nmap (サービスの調査)
- dirb (Web サービスのディレクトリやファイル調査)
- ユーザ列挙 (notes.txt から。)
[侵入]
- hydra によるリバースブルートフォース攻撃
[内部探索]
- find / -user root -perm -4000 -print 2>/dev/null (SUID が使えそうなファイル調査)
- sudo -l (sudo できるコマンドの確認)
- cat /etc/sudoers
[権限昇格]
攻撃のポイント
- dirb による notes.txt の発見
- ユーザの列挙と hydra によるリバースブルートフォース攻撃
- sudoers の確認
- awk によるコマンド実行