当前位置: 首页 > news >正文

ctf show web 入门80

这是一道非常经典的 文件包含漏洞(LFI) 结合 日志注入(Log Injection) 的 Web 题目。我们可以看到代码对 php 和 data 伪协议进行了过滤,这封死了直接通过 php://filter 或 data:// 获取 Web Shell 的路径。
在这种情况下,日志包含 是最通用的 GetShell 手段。

  1. 源码分析漏洞点:include($file) 存在明显的文件包含漏洞。
    防御手段:使用了 str_replace 过滤了 php 和 data 关键字。这意味着你无法使用常用的封装协议(如 php://input)。
    绕过思路:由于它没有过滤斜杠和敏感目录,我们可以尝试包含服务器系统日志。
  2. 核心思路:日志注入
    Web 服务器(如 Nginx 或 Apache)会将每一个 HTTP 请求的信息记录在日志文件中。如果我们发送一个包含 PHP 代码的请求,这段代码就会被写入日志。当我们利用 include 包含该日志文件时,PHP 解释器会执行其中的代码。
    步骤一:定位日志文件
    你需要尝试常见的 Web 日志存放路径(通常在 Linux 下):
    Nginx 日志:/var/log/nginx/access.log 或 /var/log/nginx/error.log
    Apache 日志:/var/log/apache2/access.log 或 /etc/httpd/logs/access_log
    验证方法:
    在 URL 后面尝试访问:?file=/var/log/nginx/access.log。如果页面返回了大量的 HTTP 请求记录,说明路径正确。

得出日志存放路径为?file=/var/log/nginx/access.log

步骤二:注入木马(关键点)
我们需要通过修改 User-Agent 来注入木马,而不是直接在 URL 中注入。
原因:URL 中的特殊字符(如 < >)会被浏览器或服务器进行 URL 编码,编码后的内容包含在日志里不会被 PHP 执行。而 User-Agent 字段通常会原样记录。
操作方法:
使用抓包工具(如 Burp Suite)截获请求或者直接使用hackbar。
将请求中的 User-Agent 字段修改为:<?php @eval($_POST[1]); ?>。
发送请求。此时,这一行 PHP 代码就已经躺在服务器的日志文件里了。

步骤三:包含日志文件 GetShell
再次访问包含日志的 URL:
?file=/var/log/nginx/access.log
使用 AntSword(蚁剑)、Chopper(菜刀) 或直接通过 POST 发送指令。
POST 数据:cmd=system(‘ls /’);

在hackbar中使用post method 输入1=system(‘ls’);

如果成功执行,你就能看到根目录下的文件列表,寻找 flag 即可。

发现flag应该在fl0g.php目录下

尝试查看fl0g.php文件
在post method 中输入:1=system(‘tac fl0g.php’);
得到flag
ctfshow{7b853f57-bde3-45e1-a31a-59433aeae27f}

为什么在修改use-agent中的数据

  1. 绕过 URL 编码(最根本原因)
    当你直接在浏览器地址栏输入特殊字符(如 < > ?)时,浏览器会自动对这些字符进行 URL 编码(例如 < 变成 %3c)。
    后果:Web 服务器会将 %3c?php … %3e 这种编码后的字符串原样写入日志。
    失效:PHP 的 include 函数在执行文件时,只识别标准的 PHP 标签 <?php ... ?>。它不会自动解码日志里的 %3c。
    User-Agent 的优势:User-Agent 属于 HTTP 请求头(Header),它是以原始字符串的形式发送给服务器的。大多数 Web 服务器(如 Nginx, Apache)会直接将 User-Agent 的原始值写入日志,而不进行编码,从而保证了木马代码的“活性”。
  2. 日志文件的存储结构
    Web 服务器的访问日志(Access Log)通常采用特定的格式记录每次请求。以下是一个典型的 Nginx 日志条目:
    192.168.1.1 - - [13/May/2026] “GET /index.php?file=… HTTP/1.1” 200 456 “https://referer.com” “Mozilla/5.0…”
    URL 部分:位于引号内的请求行中。
    User-Agent 部分:位于日志条目的末尾。
    关键点:由于 User-Agent 字段在日志中是完全受用户控制的字符串,它为注入攻击提供了一个非常稳定的“载荷槽位”。
  3. 隐蔽性与规避 WAF
    许多 WAF(Web 应用防火墙) 对 URL 参数有着极其严格的监控。
    如果你在 URL 参数中提交 <?php eval(...) ?>,防火墙会立即识别出这是典型的攻击特征并拦截请求。
    虽然现在的 WAF 也会检查请求头,但相比于高度敏感的 URL 参数,Header 部分(尤其是 User-Agent)有时防御规则相对宽松,更容易让木马代码“溜进”服务器内部的日志文件中。
http://www.jsqmd.com/news/810526/

相关文章:

  • 5.4 分布分析
  • 预算有限的中小企业,品牌传播如何花小钱办大事发软文?亲测有效的实战方法 - 代码非世界
  • 如何在移动端项目中快速集成jQuery WeUI框架:完整指南
  • 2026五月天津闲置首饰怎么规划?大牌珠宝回收内行干货分享 - 奢侈品回收测评
  • 硕士研究生文献综述写作指南:检索技巧+阅读方法+AI工具Scholaread实战教程(2026年最新版)
  • 为AI Agent打造精简NixOS网关:OpenClaw部署优化实战
  • 河道水质监测站:给江河湖海装上“电子感官”
  • 14 从中序和后序遍历构造二叉树
  • FalcoClaw:为AI Agent与Linux工作负载构建自动化运行时安全响应引擎
  • 手把手教你为STM32F429的LTDC或大数组配置SDRAM:从硬件选型(W9825G6KH)到CubeMX参数详解
  • 基于比特币与IPFS构建去中心化身份锚点:原理、实现与应用
  • 北京手表回收哪家靠谱?2026 主流渠道实测对比,新手不踩坑 - 奢侈品回收测评
  • 多线程与并发编程
  • 在Windows上优雅处理PDF:Poppler工具包让你的文档工作更轻松
  • 嵌入式开发云端化:架构模式、实战评估与核心挑战解析
  • 风力叶片机器人喷涂轨迹规划仿真【附模型】
  • 利用Taotoken模型广场为不同项目选择合适大模型的策略
  • AI助手本地化办公:officecli-skills实现文档自动化生成
  • C/C++项目里stb_image库的‘multiple definition’报错,我用STB_IMAGE_STATIC宏解决了
  • 2026年金融AI投研炒股工具横评:五大主流平台深度对比推荐 - 品牌种草官
  • 【技术底稿 33】同机复用开发资源,搭建完整测试环境实战复盘一、核心背景
  • 基于Git工作流的OpenClaw状态备份工具clawsync设计与实践
  • 【仅限前500名】NotebookLM RAG私有化调优套件泄露版:含17个生产环境验证的prompt-sql混合检索模板+Latency-SLA监控看板
  • Python WebSocket 实时通信实战:构建实时Web应用
  • 告别答辩PPT焦虑:百考通AI一键生成,高效备战毕业答辩
  • AI时代的战神金刚——构建你的外部大脑与商业闭环@围巾哥萧尘
  • 【AI响应速度生死线】:Haiku在实时客服/编程助手/边缘设备的3大不可替代性验证
  • NotebookLM播客生成质量暴跌真相:训练数据污染率高达18.7%?我们逆向拆解了其RAG音频对齐层
  • LabVIEW主要设计特性与工程价值
  • STM32实战:BMP280气压模块IIC驱动与数据精准采集