无字母绕过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,只要程序不执行完临时文件就不会删除

结果忘记截图了

相关推荐
kingx316 小时前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
山东科恩光电20 小时前
安全触边在游乐园设施与公共交通车门防夹伤系统中的选型安装及维护要点
安全
QXWZ_IA21 小时前
横跨三网“只进不出”架构如何划分安全边界
安全·架构
国科安芯1 天前
从遥控到自治:ASP4644S2B支撑星载电源健康管理与容错配电
网络·单片机·嵌入式硬件·安全·dcdc·低轨卫星·商业航天
武天旭1 天前
AI安全--AI大模型的隐私保护解析
人工智能·深度学习·安全·机器学习
Nerd(BUG版)1 天前
KMP学习day4--Kotlin空安全与泛型
学习·安全·kotlin
测试界的小码农1 天前
【Linux 命令实战(03):文件创建、复制、移动与删除,掌握 touch、mkdir、cp、mv、rm】
linux·服务器·php
kingx31 天前
Bugku 326 Baby-heap1 题解:glibc 2.23 堆溢出到 FSOP 劫持 _IO_list_all(附完整 exp)
pwn·ctf·glibc·堆溢出·fsop
IT规划师1 天前
API 安全三支柱:认证、防篡改、防重放的工程实践
安全·api