見出し画像

Writeup: Vulnhub DC-2 攻略

Vulunhub の DC-2 を攻略したのでメモ。
このマシンはところどころにヒントが書いてあり取り組みやすかった。
また、ツールの使い方や sshd の設定など勉強になることが幾つかあった。

0.ダウンロード

この仮想マシンは下記のリンクからダウンロードできる。
ファイルは DC-2.zip  サイズは847MBと比較的小さめ。

ダウンロード後、解凍すると DC-2.ova  が出来上がる。これを Virutal Boxにインポートして起動する。以下の画面が表示されれば起動完了だ。

DC-2 起動画面

起動後、仮想マシンのIPアドレスを調べるため、攻撃マシンからping スキャンを行う。筆者の環境では、192.168.56.119  だった。

pingスキャン(nmap)

DC-2 のダウンロードページには、この仮想マシンのIPアドレスを hosts に追加するよう指示があるので、攻撃マシンの /etc/hosts にエントリを追加した。これで準備完了である。

hosts にエントリを追加

1.攻略

1)ポートスキャン

まずは ポートスキャンで稼働しているサービスを調べてみる。
80/tcp で Apache が、 7744/tcp で ssh が稼働していた。

ポートスキャン

2)脆弱性探し

80/tcp が開いているので、ブラウザでアクセスしてみる。
よく見るとヘッダの部分に”Just another Wordpress site" と表示されている。
このサイトはWordpress で作成されたサイトのようだ。

"Flag というメニューがあるのが気になる。
きっと何かのヒントに違いない。とりあえずクリックしてみる。

dc-2  トップページ(http)

「次のフラグを入手するには、cewl で作成したパスワードリストを使え」と書いてある。Wordpress のログイン画面にブルートフォースアタックをすれば良いようだ。

Flag 1

3)攻撃(ブルートフォースアタック)

Wordpress のログイン画面に総当たり攻撃をすることを考える。
必要なのは2つ。ユーザー名のリストとパスワードのリストだ。

Flag1 に書いてある通り、まずは cewl コマンドを使用してパスワードリストを作成することにしよう。

cewl コマンドは Webサイトに記載されている文字列から単語を切り出し、パスワード辞書を作ってくれるツールで、Kali Linux に標準搭載されている。コマンドは以下の通り。対象のURLと出力ファイル名を指定するだけだ。

cewl -w pass_list.txt http://dc-2/

次に、ユーザー名のリストを作成する。
Wordpress のユーザー名は wpscan というツールで調査できる。wpscanは Wordpress用の脆弱性スキャナで、Kali Linux に標準搭載されている。
コマンドは以下の通り。

wpscan --url http://dc-2/ -e u 

wpscan によって、admin, jerry, tom の3つのユーザー名が検出できた。
この3つのユーザー名を user_list.txt というファイルに記載しておく。

wpscan によるユーザー名列挙

準備が整ったので、総当たり攻撃(ブルートフォースアタック)を行う。
これも wpscan で実行可能だ。コマンドは下記の通り。

wpscan --url http://dc-2/ -U user_list.txt -P pass_list.txt

ブルートフォースアタックの結果、tom と jerry のパスワードが判明した。

tom と jerry のパスワード

4)侵入

ポートスキャンの結果から、このマシンでは 7744/tcp でssh が稼働していることが判っている。「パスワードの使いまわし」は現実世界ではよくある話なので、さきほど判明した Wordpress用のパスワードで ssh にログインできないか試してみよう。

それぞれ試してみた結果、tom で ssh にログインできた。
侵入成功である。

侵入成功

5)権限昇格

tom のホームディレクトリに次のヒント(flag3.txt)があるので読もうとした。あれ? cat コマンドが使えない。。

cat コマンドが使えない?

エラーを見ると、"rbash" と書いてある。
なんだろう?とググってみると、どうやら 「bash の制限モード」であり、特定のコマンド以外実行させないような設定になっているようだ。
rbash の仕組みや設定方法は @IT の記事に判り易い説明が有った。

この記事を見ると、シェルの設定をした後、「.bash_profile をroot以外のユーザーが 変更できないようにする」必要があることが書かれている。

念のため、tom の .bash_profile をチェックしてみると、書き込み可能になっていた。

.bash_profileのパーミッション

先ほど cat を実行しようとときのエラーは "command not found" であった。cat が実行できなかったのは PATHが通っていないのが原因である。ならば、.bash_profileを編集して PATHを通すようにすればいい。

というわけで、vi で .bash_profile を書き換える。幸い vi は起動可能だった。もとの内容をコメントアウトして、新たにPATHを設定する。

.bash_profile の書き換え

いったんログオフし、再度 tom でログインすると、cat コマンドで flag3.txt を読むことができた。
どうやら次は Jerry に権限昇格する必要がありそうだ。

flag3.txt 

念のため、再度 su コマンドで jerry のパスワードを試してみる。
今度はすんなりうまくいった。これで jerry に権限昇格できた。

jerry に権限昇格

6)root 権限奪取

次に目指すのは root 権限の奪取である。
jerry のホームディレクトリに移動して手がかりを探してみると、flag4.txt というファイルが置いてあった。

jerryのホームディレクトリ

flag4.txt を読んでみると、「最後はノーヒント」と言いつつも、何やら意味ありげなことが書かれている。

flag4.txt

jerry が root権限で実行できるコマンドが無いかチェックしてみる。
git コマンドが使用できるようだ。flag4 はこれを意味していたに違いない。

jerry が root権限で実行できるコマンド(sudo -l )

git のマニュアルを読んでみると、-p  でコマンドの出力を less などのページャーに送ることができるようだ。

git のmanページ(抜粋)

root権限で起動したgit から起動された less はroot 権限を持つので、less から更に bash を起動すれば良いことになる。

まずは  "sudo git -p"  で less を起動する。

git から less を起動

less が起動し git のマニュアルが表示された。 画面の一番下で "!" に続けてbash を起動するコマンドを入力する

less から bash を起動

想定通り、root 権限でシェルを起動できた。 root権限の奪取は完了である。

root権限奪取

というわけで、/root の下の フラグを見てみよう。

final-flag.txt

これで攻略完了であるが、一つ疑問が残る。
パスワードは合っていたのに、 jerry は ssh でログインできなかった。
これは何故だろう?
sshサーバーの設定(sshd_config )をチェックしてみよう。

sshサーバの設定を確認

なるほど・・。sshでログインが許可されていたのは tom だけだったのだ。

ログイン許可の設定(ssh)

これで納得。
今回はこれでおしまい。めでたし、めでたし。

この記事が気に入ったらサポートをしてみませんか?