RCE - - 无字母数字远程命令执行

题目源码

cpp 复制代码
<?php
if(isset($_GET['code'])){
    $code = $_GET['code'];
    if(strlen($code)>35){
        die("Long.");
    }
    if(preg_match("/[A-Za-z0-9_$]+/",$code)){
        die("NO.");
    }
    eval($code);
}else{
    highlight_file(__FILE__);
}

分析

这道题 code 接get传参,完了对传进来的内容进行正则匹配,通过观察还可以看出这道题有两个限制:

  1. webshell长度不超过35位

  2. 除了不包含字母数字,还不能包含$_

所以我们有关$和_的方式都无法实现了

php7解法

在PHP7中就不是非常困难,因为PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7中增加了()()这种形式的命令执行

<?php

(phpinfo())();

那么这道题就可以用这样的方式来做,但是还是会出现字母,我们就会想到编码,get传参使用urlcode编码,但是这种编码对只会对符号进行编码,字母并不在它的编码范围里,这是我们想到取反操作,得到:

(~%8F%97%8F%96%91%99%90)();

执行成功,我们只用把里面要去反的函数的反码进行更换即可。但是,这种方法只适用于php版本在7以上,低版本并不支持这种形式。

相关推荐
小陆猿4 分钟前
股票实时行情Echarts动态图表
前端·javascript
Dilettante25820 分钟前
React Server Components 全链路解析:Next.js 构建产物、导航流程与 Payload 格式
前端·next.js
前端付豪22 分钟前
Nest 项目小实践之注册登陆
前端·node.js·nestjs
用户91219176206122 分钟前
日本股票K线图生成实战:基于API的完整对接方案
前端
牛奶22 分钟前
JS随笔:ES6+特性与模块化实践
前端·javascript
牛奶38 分钟前
JS随笔:基础语法与控制结构
前端·javascript
天蓝色的鱼鱼41 分钟前
Node.js 中间层退潮:从“前端救星”到“成本噩梦”
前端·架构·node.js
货拉拉技术1 小时前
如何用 AI 做业务级 Code Review
前端·agent·前端工程化
李剑一1 小时前
前端圈子又出新东西了,大幅提升解析速度。尤雨溪推荐,但我不太推荐
前端
前端Hardy1 小时前
HTML&CSS&JS:基于定位的实时天气卡片
javascript·css·html