Linux命令长度限制在7个字符的情况下,如何拿到shell
<?php
$param = $_REQUEST['param'];
If ( strlen($param) < 8 )
{ echo shell_exec($param);
}
分析代码:
这段代码传入参数param然后进入if语句判断是否小于8个字符,然后如果小于就会进入echo语句执行系统函数shell_exec执行输入的参数param。
.加空格可以执行函数
那么我可以不可上传一个文件然后在.加空格执行它呢?
说干就干,
当我们上传一个文件的时候这个文件无论上传成功都会在tmp临时文件目录下生成文件,那我们上传一个带有恶意执行语句的代码。
上面这个phpXtjWyo就是上传文件时生成的临时文件,我们需要给他包含执行起来就ok
我们通过抓包的方式先抓一个上传param值的包,再抓一个文件上传的包然后给他们组合一下
上传param的包
上传文件的包
将他们这样组合其中要看的是Content-Type的值要与下面
------geckoformboundary5c61f8803035a54aa08abfb9e1039af8
换行符也是不能错的不然上传会不成功。
最后上传成功,这个文件的上传成功也证明了我们可以上传任何东西。
如何编写一个不使用数字和字母的webshell
<?php
if(!preg_match('/[a-z0-9]/is',$_GET['shell'])) {
eval($_GET['shell']);
}
他的闲置就是不允许是字母和数字那我可不可以用上面的方法来解决它呢?上面对临时文件匹配的格式是
. /t*/*
因为这次不允许输入字母和数字,那么就不能输入t那么我可不可以这样匹配呢?
. /*/*显然是不可以的
太多了那还有没有其他的匹配呢?
有的有的兄弟
?: 匹配0次或1次
那我们的php临时文件的格式是phpXtjWyo
那么我们就可以是
/tmp/phpXtjWyo
/???/?????????
是不是就匹配上了呢?
还是有这么多>_<
那么上传的这个文件是不是还有上面特点呢,来减少这些匹配的项。
有的有的兄弟
这个临时文件最后以为有可能是大写所以我们可以将最后一个的匹配改为大写的匹配但是又不能用字母所以
是不是可以这样匹配呢?
/???/????????[@~[]
ok啊也是匹配上了
但是传入的时候报错了我们搜索一下
传入的参数如果是code的时候需要被执行的字符串,然后传入的时候必须先结束php模式通过
?>来结束然后才可以传入新的参数,传入的时候要echo传入,但是在这里不能用字母,所以只有
用<?=,它和短标签的效果是一样的所以可以用<?=`. /???/???????[@-[]?`;?>。应该就可以传入了
ok了