解析メモ

マルウェア解析してみたり解析に役に立ちそうと思ったことをメモする場所。このサイトはGoogle Analyticsを利用しています。

Vulnhub - Toppo: 1 Walkthrough

 

はじめに

今回取り組んだのは Toppo: 1 。前回同様、難易度が Beginner のものから選びました。この VM に対して Kali から侵入してフラグを探します。配布されているのは vmdk ファイルのみで ova や vmx などなく、ダウンロードページには OS が Linux とだけ。アーキテクチャ (64bit/32bit) が不明でしたが、適当に 32bit の VM として VirtualBoxVM を作成しました。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 を検索します。

f:id:k1z3:20180810155438p:plain

オプションの意味:

-r (IP address レンジの指定。指定しないと 192.168.0.0/16 になる。)

 

IP アドレスが特定できたのでどんなサービスポートが動いているのかを nmap で確認します。

f:id:k1z3:20180810155454p:plain

オプションの意味:

-sV (バージョンスキャン。)

-p- (ポート範囲。- を指定している場合は 1~65535。)

-n (名前解決をしない。Closed だし。)

-oA (ファイルに保存する。扱えるすべてのフォーマットで保存。)

 

ssh (22)、http (80)、rpc (111) が特徴的でしょうか。rpc (59898) も見えますが、良くわからないのでひとまず保留。セオリー通り http でトップページにアクセスしてみても有益な情報は得られなさそうだったので dirb でほかにどんなディレクトリやファイルがあるのかを確認します。

f:id:k1z3:20180810155514p:plain

 

admin ディレクトリが気になります。アクセスしてみるとディレクトリリスティング可能で、notes.txt があるのが見えますので、中身を確認したところパスワードらしきものが確認できました。これを使えば ssh ログインできるような気がします。

f:id:k1z3:20180810155618p:plain

 

しかしユーザ名が分かりません。notes.txt からいくつかの好きなものなどキーになる情報が確認できたので、いったんユーザの候補リストを作成します。パスワードの文字列にも人の名前らしき値があるのでこれも列記しました。

f:id:k1z3:20180810155702p:plain

 

hydra で ssh ポートに列記したユーザ名、取得したパスワードを使い有効なユーザ名を探したところ、1 件見つかりました。

f:id:k1z3:20180810155723p:plain

オプションの意味:

-L (ユーザリストファイルを指定。)

-p (パスワードを一つ指定。)

ssh:// (ssh でスキャンさせる。)

 

さっそくこのユーザ名とパスワードで ssh 接続を試し、無事に接続できることは分かりました。

f:id:k1z3:20180810155912p:plain

 

他にどんなユーザがいるのかを確認しましたが、めぼしいものはいません。root になることが目標となりそうです。不適切に設定された SUID はなさそうです。sudo で実行できるコマンドを確認しようとしましたが command not found になります。直接 sudoers を確認してみると、このユーザは awk コマンドが書かれている (=awk を root として実行できる) ようです。

f:id:k1z3:20180810160028p:plain

(他のユーザの確認)

f:id:k1z3:20180810160035p:plain

(SUID ファイルの確認)

f:id:k1z3:20180810160053p:plain

(sudoers の確認)

 

awk はテキストを加工するコマンドという印象があります。何かこのコマンドを使って実行できる方法はないかと探したところ、system() で記述した値を実行するとの事。

awk run command - Google 検索

 

試しに whoami を渡してみると root が返ってきました。また、root のホームディレクトリに flag.txt があるのが分かります。

f:id:k1z3:20180810160320p:plain

 

awk で root で実行できるので、このflag.txt も awk を使って無事に中身を確認することができました。

f:id:k1z3:20180810160409p:plain

 

追記

調べてみると、awk による権限昇格は /bin/sh を実行すればシェルを取れるみたい。ただ、/bin/bash も試しましたがこちらは動かず。(違いがよく分かっていない。。。)

f:id:k1z3:20180810163028p:plain

 

また、find で SUID を探したときに python2.7 が含まれていました。なので、python でシェルを実行すれば root のシェルが取れます。

f:id:k1z3:20180810164351p:plain

 

まとめ

ワークフロー

[偵察]

  1. netdiscover (IP アドレスの調査)
  2. nmap (サービスの調査)
  3. dirb (Web サービスのディレクトリやファイル調査)
  4. ユーザ列挙 (notes.txt から。)

[侵入]

  1. hydra によるリバースブルートフォース攻撃

[内部探索]

  1. find / -user root -perm -4000 -print 2>/dev/null (SUID が使えそうなファイル調査)
  2. sudo -l (sudo できるコマンドの確認)
  3. cat /etc/sudoers

[権限昇格]

  1. awk によるコマンド実行
  2. SUID 付きの python による権限昇格(追加)

 

攻撃のポイント

 

防御のポイント

  • ディレクトリリスティングの無効化
  • 不要なファイルを web に置かない
  • パスワードにユーザ名につながる文字列を入れない
  • 不適切な sudoers 設定の整理