upload-pass13
源码截取
function getReailFileType($filename){
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
switch($typeCode){
case 255216:
$fileType = 'jpg';
break;
case 13780:
$fileType = 'png';
break;
case 7173:
$fileType = 'gif';
break;
default:
$fileType = 'unknown';
}
return $fileType;
}
源码通过二进制的方式查看文件前2字节(文件头)是否为合法文件。
一般而言jpg、png、gif这类格图片格式的前几个字符(16进制下)都是一样的,有些防护手段也是通过这种特征码来判断的。
可以突破上传,但是png格式无法解析php的代码,需要配合文件包含漏洞组合攻击。