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アドレスが表示されているので調べる手間が省けてありがたい。
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らしい。
どこかにバージョンが書いてないか探してみる・・・画面の一番下に書いてあった。バージョンは 2.2.14 だった。
既知の脆弱性が無いか調べてみるが、2.2.14 には クロスサイトスクリプティング(XSS)以外、めぼしいものは無さそうだ。
お次は 8080/tcp 。これもブラウザでアクセスしてみるとWord Press のインストール画面が表示された。とりあえず [Let's go!] をクリックしてみよう。
Wordpress セットアップ時のパラメータ入力画面が表示された。
ポートスキャンをした際、 MySQLが検出されていたことをふと思い出す。
ただ、データベースの名前や ID / Password は不明なままだ。
どうすれば良いだろう・・・。
よくよく考えてみると、この画面で入力する「Database Host」 は必ずしも localhostである必要は無い。ならば、攻撃マシン側で MySQL を稼働させて、「DataBase Host」に攻撃マシンのIPアドレスを入力すれば何とかなるのではないか?と気がついた。
3) 攻撃準備
まずは攻撃マシンのローカルでMySQL(Maria DB) を起動し、wordpressという名前のデータベースを作成する。このデータベースにターゲットから接続させる準備をする。
続いて、ユーザー hoge を追加。先ほど作成したデータベースに対するアクセス権を付与する。
最後に、ターゲットから攻撃側マシンのMySQLに対してアクセスを許可するために、MySQLの設定ファイルを編集する。
/etc/mysql/mariadb.conf.d/50-server.cnf をエディタで開き、bind-address を0.0.0.0 (任意のアドレスから接続許可)に変更する。
これで準備完了である。MySQLを再起動して設定を反映させる。
4) 侵入
いよいよターゲットに侵入する。
ターゲットマシンのWordpressセットアップ画面に接続し、さきほど準備したデータベースの名前、ユーザーID, パスワードを入力、"Database Host"に攻撃マシンのIPアドレスを入力して、[ Submit ] をクリックする。
ターゲットマシンから攻撃マシンのMySQLに接続が行われ、Wordpress のセットアップを継続できることが判った。[ Run Installation ] をクリックする。
wordpressの管理者アカウント設定画面が表示される。
適当な名前とパスワードを入力し [ Install Wordpress] をクリックする。
無事インストールが終わった。
あとはログイン画面から先ほど設定したユーザーとパスワードで Wordpressにログインすれば良い。
無事ログインできたら、管理画面から Theme Editor を開き、404 エラー表示用のスクリプト(404 Template )をすり替える。リバースシェル用のphp スクリプトを貼った。
そして、攻撃マシン側の 443ポートでターゲット待ち受ける。
最後に、404エラーを発生させるため、ブラウザからターゲット側サイトの「存在しないディレクトリ」にアクセスする。
改竄した404 Templateが起動し、攻撃マシンが待ち受けている443番ポートにシェルを返してくれた。以後は、攻撃マシンからターゲット側のシェルを操作して任意のコマンドで実行できる。侵入成功である。
5) ターゲット内部の調査
現在は www-data という低い権限のユーザーであり、できることは限られているので、権限を昇格させること考える。
とりあえず、パスワードファイルを調べてみると、armour というユーザーのみが登録されているようだ。
次に ID/Password が記載されていそうなファイルを調べてみる。
1) の調査でチェックしたように、このマシンには CMSがインストールされている。CMSはたいてい、config.php などの名前でDBに接続するためのID、パスワードが書かれている。このファイルが無いか見てみる。
/var/www/html/cmsms/config.php を見てみると、それらしい情報が記載見つかった。
6) 権限昇格
大抵は同じパスワードが使いまわされているものなので、このファイルに書かれたパスワードで権限昇格できないか試してみる。
root には成れなかったが、armour の権限に昇格できた。
このままでは使いづらいので、プロンプトが表示されるよう環境を整える。
7) root 権限奪取!
次に目指すのは armour から root への権限昇格。
このユーザーは sudo で rclone を実行できることが判った。
google 検索してみると、rclone はクラウドストレージと同期するためのコマンドでさまざまなオプションがあり、ローカルやリモートにファイルをコピーすることができるようだ。
root 権限でこのコマンドが使えるということは、同じ名前でファイルをコピーすれば、サーバー内の任意のファイルが上書きできる、ということになる。
ということは、あらかじめ root 権限をもったユーザーを登録したパスワードファイルを準備しておいて、このコマンドで /etc/passwd に上書きすれば良い。
ということでやってみよう。
まずは、/etc/passwd をコピーする。
このファイルにID:loot パスワード: 1234 でroot 権限(UID=0)のエントリを追加する。パスワードはsalt付きのハッシュにする必要がある。
rclone コマンドを root 権限で起動して、/etc/passwd を先ほど作成したファイルで上書きする。
何やらエラーが出ているが、確かに /etc/passwd は上書きができたようだ。
これで loot に su すれば管理者権限になっているはずである。
試してみると、uid=0 なので想定通り root 権限を奪取できた。
それにしても、 プロンプトが # になっているのは、いつ見ても気分の良いものだ。
これで攻略完了!
この記事が気に入ったらサポートをしてみませんか?