DC-2マシンをハッキングする
今回も「ハッキング・ラボのつくりかた」 を参照しながら実際にDC-2マシンをハッキングしていきます。
(諸事情によりDC-1は飛ばします)
Potatoの練習問題を飛ばしてしまったのでまた忘れた頃に別な記事で作っていきたいなと思っています
1.DC-2マシンをダウンロードしてみよう
前回と同様にDC-2マシンをダウンロードします。
ダウンロードのURLこちらです。
今回も同様にDownload (Mirror)の方のURLをクリックしてダウンロードします。
ダウンロードされたファイルは解凍しておきます
2.DC-2の設定をしてみよう
こちらも前回と同様の手順で設定を行います。
まずは、VirtualBoxを開き、左上にあるファイルから仮想アプライアンスのインポートをクリックします。

このような画面が出るかと思います。

ここで先ほどダウンロードファイルを選択します。
次に>設定に移ります。

MACアドレスのポリシー→すべてのネットワークアダプターのMACアドレスを含むに変更してください。
追加オプションのところはチェックが入っているかと思いますが、入っていなければ入れてください。
そして完了をクリックします。
何もしなくてもDC-2マシンが起動されるかと思います。
これでDC-2マシンの設定は以上となります
3.ParrotOSのIPアドレスを調べてみよう
私はあまり見やすさを重視しないため、ip aで実行しました。
ip a

私の場合、自分のIPアドレスは192.168.56.108だと分かります。
4.DC-2マシンのIPアドレスを特定する
本に書いてあった内容で実行しても良いのですが、コマンドが長いためPatatoマシンで実行したコマンドをまた使っていきたいと思います。
sudo netdiscover -i enp0s3 -r 192.168.56.0/24
DC-2のIPアドレスは192.168.56.110だと分かります。
前回と同様に環境変数を設定しておくと長く書かなくて済むため環境変数を設定します(設定しなくても大丈夫です)
export IP=192.168.56.110
念のため設定されたか確認します。
echo $IP
5.実験用のディレクトリ作成する
今回はDC-2マシンを使っているため、dc2というディレクトリを作成しました。
mkdir ./vulnhub/dc2
ディレクトリ作成後、dc2ディレクトリに移動します。
cd vulnhub/dc2/
6.DC-2にポートスキャンをする
nmap -sC -sV $IP --open -p-
上記のコマンドをコマンドを実行します。
- -sC:Nmapの標準スクリプトで実行する
- -sV:ソフトウェア名とバージョンを表示する
- --open:開いているポートだけ表示する
- -p-:全ポートをスキャンする
ポートスキャンをすると以下のようになりました。

開いているTCPポートが2つあると分かります。
- ポート80:HTTP
- ポート7744:SSH
HTTPのポートが開いていることから実際にサイトにアクセスしてみましょう。
7.HTTPにアクセスしよう
実際にhttp://192.168.56.110/にアクセスしてみるとアクセスすると開くことができませんでした。

この現象がなぜ起きてしまうのかというと、簡潔に言うと名前解決ができていないからです。
ローカル環境で行っているため、DNSにdc-2という名前が登録されていないため名前解決できないため接続することができないのです。
そのためhostsファイルに手動で名前とIPを書くことでアクセスすることができます。
sudo vi /etc/hosts
ファイルに追加する内容は以下になります
192.168.56.110 dc-2

その後、ブラウザでhttp://192.168.56.110/にアクセスするとサイトが開けるかと思います。

8.Webサイトを探索してみる
どうやらFlagのところに英語が書かれており、翻訳すると
普段使っているワードリスト(辞書ファイル)は、おそらく役に立たないでしょう。代わりに、ただ cewl(CeWL)になる必要があるかもしれません。
パスワードは多ければ多いほど良いですが、時にはすべてに勝てるとは限らないこともあります。
次のフラグを見るために、いずれかのユーザーとしてログインしてください。
もし見つからなければ、別のユーザーとしてログインしてみてください。
と書かれていました。
ひょっとしたらCeWLを使うのかもしれませんね…
9.アクセスできるファイルがないか調べましょう
今回もGobusterを使って、アクセスできるファイルやディレクトリを調べていきます。
gobuster dir -u $URL -w /usr/share/wordlists/dirb/common.txt
このような結果になりました。

このことから/wp-admin、/wp-content、/wp-includesの3つのディレクトリが存在していると分かります。
この3つのディレクトリ名からWordPressで作られているのではないかと分かります。
実際にhttp://192.168.56.110/wp-admin/と入力してブラウザで調べてみましょう。

すると、ログイン画面が出てきましたね。
試しにUsername or Email Addressのところにadmin、Passwordのところにpasswordと入力してみましょう。

[翻訳]
エラー:ユーザー名「admin」に対して入力したパスワードが間違っています。パスワードをお忘れですか?
どうやらadminというアカウントがあるということが分かりました。
10.もう少し色々調べてみよう
今回はWordPressが使われているため、wigで調べていきます。wigとは、WebサイトのCMSやフレームワークを自動で特定する情報収集ツールのことです。WordPress・Drupal などの種類やバージョンを調べることができます。
実際に調べてみましょう。
wig $URL
WordPressのバージョンとOSのバージョン、脆弱性の情報も分かりました。
ここからはまだadminしかユーザーが分かっていないため、もう少し他にユーザーがいないか調べます。
11.ユーザーを調べていこう
この本を読んで私は初めて知ったのですが、WordPressでは投稿者ごとにアーカイブが作成されるそうです。
投稿者自身がアーカイブを無効化にしていない場合、(今回の場合)dc-2/?author=1にアクセスするとdc-2/index.php/author/<ユーザー名>にリダイレクトします。
流石に一個一個試すのは時間がかかってしまうためNmapのNSEというNmapの追加機能を使います。
NSEを使うことで、情報収集や認証・ユーザーの列挙ができたり、脆弱性診断、サービス解析を行うことができます。
今回はWordPressの投稿者アーカイブからユーザー名を列挙できるスクリプトを使っていきます。
nmap -p80 --script http-wordpress-users $IP
-
-p80:ポート 80(HTTP)だけをスキャンする -
--script http-wordpress-users:Nmap の NSE スクリプトの一つで「WordPress のユーザー名を列挙する」ためのスクリプト
実行した結果がこちらになります。

admin以外にもtomとjerryがいること存在しています。
ユーザーリストを作ります。
12.辞書ファイルを作りましょう
ここで思い出していただきたいのですが8.でFlag1にCeWLを利用するようなことが書かれていました。CeWLはWeb サイト上の単語を収集して “カスタムワードリスト” を自動生成するツールのことです。
adminではおそらくCeWLで辞書攻撃が成功する可能性は低いですが、jerryとtomでは辞書攻撃ができる可能性があります。
実際に試してみましょう。
cewl dc-2

これを辞書ファイルにしていきます。>でリダイレクトすると1行目のCeWL~が含まれてしまうため、CeWLの中には-wというオプションがありそれを使うと1行目の文章を含めずに辞書ファイルを生成することができます。

13.実際にWordPressの認証を解読しよう
Hydraを使ってパスワードを解読していきます。
hydra -L users.txt -P cewl.txt dc-2 http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'
-L-Phttp-form-post/wp-login.phplog=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1-
S=Location
このコマンドがどういう動きをしているのか知らなかったため調べてみました。
1.users.txtからユーザー名を1つ、cewl.txtからパスワードを1つ取り出す。
2.それを^USER^と^PASS^に当てはめて、dc-2の/wp-login.phpにPOST送信する。
3.返ってきた返事にLocation(リダイレクトの指示)が含まれているかチェックする。
4.含まれていれば「ログイン成功!」と判断して画面にユーザー名とパスワードを表示し、含まれていなければ次の組み合わせを試す。
その結果、jerryのパスワードはadipiscing、tomのパスワードはparturientだと分かりました。
実際にログインして何か手がかりがないか調べます。
14.実際にログインして手がかりを探そう
jerryさんとtomさんのアカウントにアクセスします。
tomさんの方を調べても特に手がかりに繋がるものがありませんでしたが、jerryさんの方にログインするとFlag 2というタイトルの記事があり、以下のようなことが書かれていました。
翻訳するとこのような文章でした。
WordPressを悪用して近道ができない場合でも、別の方法があります。
別の侵入経路が見つかったことを願っています。
まだadminにつながる情報は何一つないため、別な方法でないと侵入できないのかもしれません。
15.SSHにアクセスしてみよう
ポートスキャンをした際、HTTPとSSHのポートしか開いていなかったため次はSSHにアクセスしていきます。
今回ポートが7744番のため、-pでSSHポートを指定する際は7744と指定します。
まずは、jerryさんの方でアクセスしていきます。
ssh jerry@$IP -p 7744
ログインすることができませんでした。次にtomさんの方でアクセスしていきます。

ログインすることができました。
16.実行できるコマンドを調べる
まず、私はls -laを使ってどのファイルがあるのか調べてみました。
その結果がこちらです。

どうやら、flag3.txtというファイルが存在することと分かります。
実際にcatコマンドを使ってファイルの中身を表示してみましょう。

すると、エラーが出てしまいました。
-rbashと書かれており、catコマンドが見つかりませんとなってしまいました。
-rbashは通常のBashに制限を加えたモードで、ユーザーが勝手に環境を変更したり、危険なコマンドを実行したりできないようにするための制限シェルのことです。
制限される操作は以下のようになっています
- cd が使えない(ディレクトリ移動禁止)
- PATH の変更ができない(readonly)
- フルパス指定でコマンドを実行できない
- リダイレクト(>、>>)が禁止
- 環境変数の変更や unset が禁止
ls -alをした際、usrというディレクトリがあったかと思います。usrのディレクトリの中に別な手がかりがないか調べます。

binというディレクトリがありました。その中身も調べてみましょう。

./usr/bin/viを実行すればViのバイナリを実行できそうな気がしますが、パス指定が禁止されているため実行することができません。
ですが、./usr/bin/ディレクトリの中にless、ls、scp、viのシンボリックリンクがあるため、これらのコマンドは使える可能性があります。
export -p
このコマンド環境変数のリストを表示することができるコマンドです。

すると、PATHには/home/tom/usr/binだけが設定されており、これらのコマンドは実行することができると分かります。
viコマンドが使えるため、flag3.txtでファイルを開いてみます。
vi flag3.txt
翻訳を調べてみるとよく分からなかったため、AIに意訳させたところこのような意味だと分かりました。
彼が受けているすべてのストレス(制限)を解決するために、特権ユーザー(su)になるべきかもしれません
つまり、rbashの機能制限を回避し、特権ユーザにログインしてくださいということですね。
17.rbashを回避しよう
vi
するとこのような画面が出ると思います。
:set shell=/bin/shと入力して、Enterをします。
その後、:shellと入力して、Enterをします。
プロンプトが返ってきました。
現在のシェルを確認してみます。
echo $SHELL
echo $0
rbashからshに切り替えができていることが分かります。
このままではまだコマンドを使用することができないため、環境変数PATHを再設定することで、基本コマンドを実行できるようになります。
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
cat flag3.txt
18.suコマンドを使い、jerryさんのアカウントにログインしてみよう
su jerry
パスワードのadipiscingを入力してください。
すると、jerryさんのアカウントにもログインすることができました。
lsコマンドを用いて、ファイルの中身がどうなっているか見てみましょう。
ls -la
flag4.txtというファイルがあるかと思います。実際に開いてみましょう。
cat flag4.txt
文章を翻訳すると、「まだ最終フラグを取得していません、ここにはヒントがありません」と書かれています。
19.sudoの設定を確認に、権限昇格を行う
本にsudoコマンドの設定を調べるとの記述がありましたが、私自身このコマンドがどういう意味か知らなかったため調べてみました。
sudo -l
GTFOBinsには、特定のコマンドがsudo経由で悪用できるケースがまとめられています。その中の一つがgitのヘルプ機能を利用した権限昇格です。
今回の場合は先ほど行った、sudo -lでこのような設定があったため、一般ユーザーでもgitをroot権限で実行することができます。
sudo git -p help config
すると、gitのヘルプがpagerで開かれます。
!/bin/shと入力を行い、Enterを押すと、プロンプトが#に変わり、rootシェルが取得できていることが分かります。
lsで答えとなるファイルがないか調べます。
すると、final-flag.txtというファイルがあることが分かります。
開くと、おめでとうございます。と書かれておりこれにて以上になります。