目录
各种文件都有特定的文件头格式,开发者通过检查上传文件的文件头检测文件类型。但是这种检测方式同样可以被绕过,只要木马文件的头部添加对应的文件头,这样既可以绕过检测,又不影响木马文件的正常运行。
常见的文件头
-JPEG:0xFFD8FF
- PNG:0x89504E470D0A1A0A
- GIF:47 49 46 38 39 61(GIF89a)
源码分析
文件头过滤绕过示例代码(部分)
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
$upfile=$_FILES["upfile"];
//获取数组里面的值
$name=$upfile["name"];//上传文件的文件名
$type=substr($name, strrpos($name, '.')+1);//上传文件的类型
$size=$upfile["size"];//上传文件的大小
$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径
//判断是否为图片
if(!exif_imagetype($_FILES['upfile']['tmp_name'])){
echo "<script>alert('请上传图片文件!')</script>";
die();
在上面的代码中通过exif_imagetype函数判断上传的文件是否是图片。exif_imagetype读取一个图像的第一个字节并进行检查其签名。如果发现了恰当的签名,则返回一个对应的常量;否则返回FALSE。所以有两种方式进行绕过
解决方法
(1)添加图片的文件头
在开头添加一个图片文件的文件头GIF89a
可以看见这样可以直接上传成功,可以通过上传路径直接查看
上传的路径是
/upload/up/004.php
(2)通过copy命令进行图片木马制作
图片是一张正常的jpg图片
666.txt文件里的内容这里写的是
<?php
phpinfo();
?>
可以看出我们上传成功,而且里面还有一张图片
进入路径查看
/upload/up/test.php
上面的乱码是图片信息