見出し画像

Writeup: Vulnhub My-school 攻略

Vulnhub のMyschool を攻略してみた。
レベルは Easy 。解き方に気が付きさえすれば難なくクリアできる。

Vulnhub はサイバーセキュリティ学習用のプラットフォームで脆弱な仮想マシンのイメージファイルが数多く収録されている。

自身のPCにダウンロードしてさまざまな攻撃手法を試すことで、セキュリティの勉強ができるようになっている。

今回はこの VulnHub からMy-school という仮想マシンを攻略してみた。

0.セットアップ

Vulnhub の仮想マシンを実行するには、Virutal Box が必要だ。
以下の説明では、PCにすでに Virutal Box 、Kali Linux がインストールされているものとして説明する。それぞれ以下のURLからダウンロード可能だ。

Virutal Box :
https://www.virtualbox.org/wiki/Downloads
Kali Linux:
https://www.kali.org/get-kali/#kali-virtual-machines


1. 仮想マシン(My-School) のダウンロード

下記のURLからダウンロードし、Virtual Boxにインポートして起動する。
この仮想マシンはメモリ1GBで問題なく動作するので、起動前にメモリの割り当てを変更しよう。(デフォルトではメモリ8GBで設定されている)

マシンが起動したら下図のような画面になる。
画面にIPアドレスが表示されているので調べる手間が省けてありがたい。

My-school 起動完了画面攻略

2.攻略

ここからが攻略である。
環境は下図の通り。攻撃側(Kali Linux )とターゲット(My-school)を「ホストオンリーネットワーク」で接続している。My-school は脆弱なマシンなのでインターネットにはアクセスできないようにした。

仮想マシンのネットワーク接続

1) 稼働サービス調査

まずはターゲットがどのようなサービスが稼働しているか調査する。
 nmap でポートスキャンを行う。

nmap -sS -sV -n -v -p- -T4 -oN portscan.log  

結果は以下の通り。80/tcp,  8080/tcp, 3306/tcp あたりが怪しそうな雰囲気。

ポートスキャン結果

2) 脆弱性探し

とりあえず、ブラウザで 80/tcp にアクセスしてみる。
CMS Made Simple とはオープンソースのCMSらしい。

CMS Made Simple

どこかにバージョンが書いてないか探してみる・・・画面の一番下に書いてあった。バージョンは 2.2.14 だった。

既知の脆弱性が無いか調べてみるが、2.2.14 には クロスサイトスクリプティング(XSS)以外、めぼしいものは無さそうだ。

CMS Made Simple の脆弱性

お次は 8080/tcp 。これもブラウザでアクセスしてみるとWord Press のインストール画面が表示された。とりあえず [Let's go!] をクリックしてみよう。

Wordpressのインストール画面

Wordpress セットアップ時のパラメータ入力画面が表示された。
ポートスキャンをした際、 MySQLが検出されていたことをふと思い出す。
ただ、データベースの名前や ID / Password は不明なままだ。
どうすれば良いだろう・・・。

よくよく考えてみると、この画面で入力する「Database Host」 は必ずしも localhostである必要は無い。ならば、攻撃マシン側で MySQL を稼働させて、「DataBase Host」に攻撃マシンのIPアドレスを入力すれば何とかなるのではないか?と気がついた。

WordPressセットアップ画面(ターゲットマシン側)

3) 攻撃準備

まずは攻撃マシンのローカルでMySQL(Maria DB) を起動し、wordpressという名前のデータベースを作成する。このデータベースにターゲットから接続させる準備をする。

MySQL 起動、データベース作成

続いて、ユーザー hoge を追加。先ほど作成したデータベースに対するアクセス権を付与する。

適当なユーザーを作成して権限を付与

最後に、ターゲットから攻撃側マシンのMySQLに対してアクセスを許可するために、MySQLの設定ファイルを編集する。

/etc/mysql/mariadb.conf.d/50-server.cnf  をエディタで開き、bind-address を0.0.0.0  (任意のアドレスから接続許可)に変更する。

攻撃マシンのMySQLに対して外部からの接続を許可

これで準備完了である。MySQLを再起動して設定を反映させる。

攻撃マシン側のMySQLを再起動

4) 侵入

いよいよターゲットに侵入する。
ターゲットマシンのWordpressセットアップ画面に接続し、さきほど準備したデータベースの名前、ユーザーID, パスワードを入力、"Database Host"に攻撃マシンのIPアドレスを入力して、[ Submit ] をクリックする。

Wordpressセットアップ画面(ターゲットマシン側)

ターゲットマシンから攻撃マシンのMySQLに接続が行われ、Wordpress のセットアップを継続できることが判った。[ Run Installation ] をクリックする。

Wrodpress インストール開始画面

wordpressの管理者アカウント設定画面が表示される。
適当な名前とパスワードを入力し [ Install Wordpress] をクリックする。

Wordpress管理者アカウント設定画面(ターゲットマシン側)

無事インストールが終わった。
あとはログイン画面から先ほど設定したユーザーとパスワードで Wordpressにログインすれば良い。


Wordpressログイン画面(ターゲットマシン側)

無事ログインできたら、管理画面から Theme Editor を開き、404 エラー表示用のスクリプト(404 Template )をすり替える。リバースシェル用のphp スクリプトを貼った。

404 Template改竄(ターゲットマシン側)

そして、攻撃マシン側の 443ポートでターゲット待ち受ける。

ターゲットからの接続を待ち受け(攻撃マシン側)

最後に、404エラーを発生させるため、ブラウザからターゲット側サイトの「存在しないディレクトリ」にアクセスする。

404エラーを発生させる

改竄した404 Templateが起動し、攻撃マシンが待ち受けている443番ポートにシェルを返してくれた。以後は、攻撃マシンからターゲット側のシェルを操作して任意のコマンドで実行できる。侵入成功である。

侵入成功

5) ターゲット内部の調査

現在は www-data という低い権限のユーザーであり、できることは限られているので、権限を昇格させること考える。

とりあえず、パスワードファイルを調べてみると、armour というユーザーのみが登録されているようだ。

マシンに登録されているユーザーの調査

次に ID/Password が記載されていそうなファイルを調べてみる。
1) の調査でチェックしたように、このマシンには CMSがインストールされている。CMSはたいてい、config.php などの名前でDBに接続するためのID、パスワードが書かれている。このファイルが無いか見てみる。

CMSの設定ファイル調査

/var/www/html/cmsms/config.php を見てみると、それらしい情報が記載見つかった。

CMS設定ファイル

6) 権限昇格

大抵は同じパスワードが使いまわされているものなので、このファイルに書かれたパスワードで権限昇格できないか試してみる。

権限昇格(その1)

root には成れなかったが、armour の権限に昇格できた。
このままでは使いづらいので、プロンプトが表示されるよう環境を整える。

プロンプトを表示

7) root 権限奪取!

次に目指すのは armour から root への権限昇格。
このユーザーは sudo で rclone を実行できることが判った。

armour が root権限で実行できるコマンド

google 検索してみると、rclone はクラウドストレージと同期するためのコマンドでさまざまなオプションがあり、ローカルやリモートにファイルをコピーすることができるようだ。

root 権限でこのコマンドが使えるということは、同じ名前でファイルをコピーすれば、サーバー内の任意のファイルが上書きできる、ということになる。

ということは、あらかじめ root 権限をもったユーザーを登録したパスワードファイルを準備しておいて、このコマンドで /etc/passwd に上書きすれば良い。

ということでやってみよう。
まずは、/etc/passwd をコピーする。

/etc/passwd をコピー

このファイルにID:loot  パスワード: 1234 でroot 権限(UID=0)のエントリを追加する。パスワードはsalt付きのハッシュにする必要がある。

passwd にエントリを追加

rclone コマンドを root 権限で起動して、/etc/passwd を先ほど作成したファイルで上書きする。

/etc/passwd を上書き

何やらエラーが出ているが、確かに /etc/passwd は上書きができたようだ。

上書きできたことを確認

これで  loot に su すれば管理者権限になっているはずである。
試してみると、uid=0 なので想定通り root 権限を奪取できた。

root権限奪取

それにしても、 プロンプトが  # になっているのは、いつ見ても気分の良いものだ。

これで攻略完了!


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