无字母数字webshell命令执行

复制代码
<?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__);
}

限制:

1.webshell长度不超过35

2.正则过滤掉了数字字母还有$和_

php7环境:

取反

php中'~'表示取反,而取反之后大都是不可见字符

复制代码
<?php
var_dump(urlencode(~'system'));

取反后的值为%8C%86%8C%8B%9A%92

解码:

复制代码
<?php
var_dump(urlencode(~'phpinfo'));

答案如下:

php5环境:

通配符

用通配符来进行匹配,无法准确匹配

但我们要继续通配符

\^a\]表示这里不为a \[0-9\]表示0-9这个范围 而注意到linux中文件基本都是小写,我们上传的文件中后几位是随机的,可能包含大写,所以我们就只需要利用\[\]表示出大写字母就可以了 在ascii表中,大写字母处于@-\[之间,所以很明确了,使用/???/???????\[@-\[\]来进行匹配 执行: Document

写一个form表单上传文件到web.php,使用bp抓包,抓一个上传文件的包和web.php的包 ![](https://i-blog.csdnimg.cn/direct/aa866ef860624319a33769a58a1ec267.png) ![](https://i-blog.csdnimg.cn/direct/031663b524354a0d93e1ceb4c78a2554.png) 把第一个包的post内容放入web.php中 ![](https://i-blog.csdnimg.cn/direct/8072b8ca7ac749a8a33681d10d2c99f7.png) 发送请求 ![](https://i-blog.csdnimg.cn/direct/0a8fab9500094965b90eb324f27a9ac4.png) 结束

相关推荐
ICscholar1 小时前
ExaDigiT/RAPS
linux·服务器·ubuntu·系统架构·运维开发
全靠bug跑1 小时前
Spring Cache 实战:核心注解详解与缓存过期时间配置
java·redis·springcache
聆风吟º1 小时前
【数据结构手札】空间复杂度详解:概念 | 习题
java·数据结构·算法
薛定谔的猫19821 小时前
RAG(二)基于 LangChain+FAISS + 通义千问搭建轻量级 RAG 检索增强生成系统
运维·服务器·langchain
计算机程序设计小李同学2 小时前
基于SpringBoot的个性化穿搭推荐及交流平台
java·spring boot·后端
是一个Bug2 小时前
50道核心JVM面试题
java·开发语言·面试
米高梅狮子2 小时前
4. Linux 进程调度管理
linux·运维·服务器
bug总结2 小时前
Vue3 实现后台管理系统跳转大屏自动登录功能
前端·javascript·vue.js
用户47949283569152 小时前
同事一个比喻,让我搞懂了Docker和k8s的核心概念
前端·后端
朱朱没烦恼yeye2 小时前
java基础学习
java·python·学习