Writeup: Vulnhub Thales
Vulnhub の Thales 攻略メモ。
このVMには幾つか罠があって少しハマってしまった。。
1.仮想マシンのダウンロード
下記のリンクからダウンロード。サイズは 2.2GB。
ダウンロードしたファイルをVirtual Box へインポートして起動する。
メモリは 1GB、ネットワークインターフェースは「ホストオンリーアダプタ」を使用。
2.攻略
1)ポートスキャン
netdiscover でIPアドレスをスキャンする。
ターゲットのIPアドレスは 192.168.56.144 。
(192.168.56.1 と 100 は VirtualBox 自身のアドレス)
ポートスキャンしてみる。
開いているポートは OpenSSH (22/tcp), Tomcat ( 8080/tcp) だけだった。
2)脆弱性探し
とりあえず、8080/tcp にブラウザでアクセスしてみる。
Tomcat のトップページが表示された。
画面右側のボタン「Host Manager」をクリックしてみる。
当然のことながら Basic認証がかかっている。
tomcat / s3cret とおなじみのユーザー、パスワードを試したが駄目だった。
ちょっと調べてみると、Tomcat のデフォルトユーザー/パスワードは幾つものパターンがあるようだ。念のため、全部試してみることにしよう。
GitHub に様々なデフォルトユーザー/パスワードを集めたページがある。
まずは下記のサイトからデータを拾ってきて、ユーザー名辞書(user.txt)とパスワード辞書(pass.txt)を作成する。
ユーザー、パスワードの総当たりは、手作業だと面倒なので、hydra を使う。コマンドラインは以下の通り。
hydra -v -L user.txt -P pass.txt -f http-get://192.168.56.144:8080/manager/html
結果はというと、、あらら、ダメだった。
Hydra の設定を変更しながら何度か試したが状況は変わらない。
ここで頭を抱えてしまった。
Tomcat 9.0.52 には認証無しで侵入できそうな脆弱性は見当たらない。
攻略には何とかして管理画面にログインすることが必要になる。
少し考えて、ターゲットの仮想マシンを一旦削除し、再度Verturl Boxへインポートし直すことにした。
もしかしたら、一連のブルートフォースアタックで、アカウントがロックアウトされるなど、サーバー側で問題が起きてしまったのかもしれない。
仮想マシンを再起動し、再度 hydra を実行してみる。
今度はうまくいった。
念のため再度、仮想マシンを再起動後、ブラウザで 管理画面にログインしてみる。問題無くログインできた。
3)侵入
管理画面にログインできるので、悪意のあるアプリをアップロードして実行すれば侵入できる。
侵入にはmetasploit を使うことにした。
攻撃に使うモジュールは exploit/multi/http/tomcat_mgr_upload
あっさりと侵入できた。
4)権限昇格
しばらくサーバー内をうろついていると、thales ユーザーの秘密鍵が読み取り可能なことに気づいた。ダウンロードする。
この秘密鍵を使って、ssh でログインを試みたが、パスフレーズが設定されていた。
パスフレーズをクラックするため、まずはハッシュファイルを作成する。
このファイルをJohn the ripperに入力してパスワードをクラックする。
パスワードは vodka06 だった。
ところが、このパスフレーズを使ってもログインできなかった。
/home/thales/.ssh のパーミッションが777だったので、公開鍵を作成してアップロードしてみたが、それでも ssh でのログインはできなかった。
ここでもう1度、頭を抱えた。
もしかすると、もともと thales は ssh でのログインが許可されていないのかもしれない。
もしやと思い、metepreter からシェルを起動し、su コマンドで先ほどのパスワードを使うと thales ユーザーに権限昇格できた。
thales のホームディレクトリには notes.txt があり、バックアップ用スクリプトの場所が書かれていた。
スクリプトはパーミッション 777 で誰でも書き込み可。
バックアップ先のディレクトリは /var/backups になっていた。
バックアップの出力先 /var/backups の所有者は root で、タイムスタンプが5分毎に更新されていることに気づいた。
つまり、先ほどのバックアップスクリプトは root 権限で 5分毎に動いていることになる。
バックアップスクリプトは誰でも書き込み可能なので、スクリプトを書き換えて、攻撃マシンにリバースシェル接続するようにすれば良い。
まずスクリプトを書き換え、リバースシェル用のコマンドを追加する。
次に攻撃側マシンの 4242/tcp で待ち受ける。
少し待つと、root 権限のシェルに接続できた。
権限昇格完了だ。
フラグを見てみる。
これで完了。
めでたし、めでたし。