无字母绕过webshell

目录

代码

payload构造

php7

php5

构造payload


代码

不可以使用大小写字母、数字和$然后实现eval的注入执行

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

payload构造

php7

在PHP7中我们可以使用('phpinfo')(),这样的代码执行,如下图

但是我们如果直接使用('phpinfo')()因为有英文,所以我们可以尝试使用取反绕过,如下

先取反

再进行注入,将刚刚取反的字符串在地址栏中再次取反,当然不止可以执行phpinfo可以执行任意php代码

php 复制代码
http://192.168.244.152:8080/web.php?code=(~%8F%97%8F%96%91%99%90)();

php5

在php5中是不支持('phpinfo')()

所以在php5中我们就要换一种绕过方式。抓取php的临时文件,**然后要用code参数匹配到临时文件,然后放到eval上,然让eval执行系统命令(这里临时文件是不会删除的因为php程序没有走完走完才会删除临时文件)。**在PHP中,当通过POST方法提交大型数据时,PHP会将提交的数据暂存到临时文件中,而不是保存在内存中。这时我们可以通过抓取临时文件执行临时文件的内容。但是抓取临时文件很难因为你上传上去后,没有接收文件,系统就会很快的删除掉你的文件,然后想要接收文件还需要知道文件名字,但是文件名是一个随机字符没有用办法接到。所以我们可以使用一些过滤方法来获取文件名字。

下面我们来看一下临时文件长什么样子,并尝试执行临时文件

首先修改php配置文件

尝试进行post传参:

get.html文件

test.php文件

尝试上传

然后我们在要上传的文件写我们的系统执行命令。如果可以访问并执行临时文件,就可以进行命令执行了,我们在要上传的文件上写入你要执行的命令,如下图所示

下载来看一下在tml下的临时文件

使用. 临时文件名绕过加权限的步骤,如下图执行成功。

上面我们既然执行了临时文件,那么我们现在剩下的问题就是找到我们的临时文件,这样才可以在网站中进行命令执行。对于这道题目来说,我们要匹配临时文件是不可以使用英文和数字进行匹配的所以不可以/tmp/php*这样找。那应该如何进行临时文件名的查找呢,我们来看一下下面这个技巧。

首先说一下php的临时文件最后一个字母可能是大写字母(这个大写小写只有50%的概率),而在linux中文件后缀几乎就没有大写的字母。所以我们可以匹配最后一个大写字母,正好Linux中有一个叫做glob的通配符可以单独匹配大写字符

下面代码可以匹配在/有3位的文件夹下的/有9位并且最后一位还是的文件在ascii码中@-[之间就是大写字母

php 复制代码
ls -al /???/????????[@-[]

构造payload

抓一个文件上传的包,抓这个包是为了改造web.php的包

抓取的web.php的数据包

改造web.php的包

先将web.php改成post传参方式

修改Content-Type字段,和复制传输内容,保持一致

添加get参数

这里?>的意思是eval有一个标签需要闭合,如下官方文档解释

代码不能包含打开/关闭 PHP tags。比如, 'echo "Hi!";' 不能这样传入: '<?php echo "Hi!"; ?>'。但仍然可以用合适的 PHP tag 来离开、重新进入 PHP 模式。比如 'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'

然后=的意思就相当于=,这是<?= 是 PHP 的短标签,用于输出一个表达式的值。它是 <?php echo 的简写

··反引号可以在eval中命令执行在这里的代码就是上面说的匹配上文件,再进行命令执行,然后由于这个是get传参所以需要需要进行url编码,不过这是再bp下所以转不转码都可以,然后就执行成功了

复制代码
code=?><?=`. /???/????????[@-[]`;?>

在这个里面首先进行post提交产生临时文件,然后再传入get,只要程序不执行完临时文件就不会删除

结果忘记截图了

相关推荐
报错小能手30 分钟前
计算机网络自顶向下方法57——网络安全 基础与密码学原理
计算机网络·安全·web安全
Q_Q5110082851 小时前
python+django/flask的结合人脸识别和实名认证的校园论坛系统
spring boot·python·django·flask·node.js·php
Q_Q5110082851 小时前
python+django/flask的选课系统与课程评价整合系统
spring boot·python·django·flask·node.js·php
权泽谦1 小时前
PHP 版羊了个羊完整开发实战:逻辑解析 + 三消算法 + 全套接口(附源码)
开发语言·php
Pa2sw0rd丶1 小时前
Fastjson 反序列化漏洞深度解析:从原理到实战防护
java·后端·安全
数据牧羊人的成长笔记2 小时前
Hadoop 分布式计算MapReduce和资源管理Yarn 2
开发语言·php
前端小L2 小时前
图论专题(二十三):并查集的“数据清洗”——解决复杂的「账户合并」
数据结构·算法·安全·深度优先·图论
报错小能手3 小时前
计算机网络自顶向下方法60——网络安全 详解TLS(传输层安全协议)
计算机网络·安全·web安全
JaguarJack3 小时前
PHP True Async RFC 被拒——原生异步离 PHP 还有多远?
php·服务端
●VON3 小时前
Electron 与鸿蒙 DevEco Studio 的融合实战:从 WebView 到安全 IPC 架构迁移指南
安全·electron