实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1. 后缀名检测绕过
2. MIME类型检测与绕过
3. 文件内容检测与绕过
4. 00截断绕过
5. 条件竞争检测与绕过
文件内容的检测是利用getimagesize()函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。
文件内容检测的绕过常见的有两种方式:
- 在脚本文件前面补充对应的文件头
常见的图片文件头
JPG:FF D8 FF E0 00 10 4A 46 49 46
GIF:47 49 46 38 39 61(GIF89a)
PNG:89 50 4E 47
- 制作图片马
制作图片马的方式也有很多,常见的有:
在图片后写入脚本代码
在cmd中使用命令 copy 1.jpg/b+1.php/a 2.jpg
- 参数/b指定以二进制格式复制、合并文件,用于图像类/声音类文件
- 参数/a指定以ASCII格式复制、合并文件,用于txt等文档类文件
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/4/upload.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,不允许的文件
5、以记事本或编辑器的方式打开脚本文件,补充图片的文件头(比如GIF文件头)
6、再次选择脚本文件
7、点击“submit”按钮,再次上传文件,脚本文件成功上传
8、访问http://ip/upfile/4/upload/info.php,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的文件内容类型检测原理以及绕过方法,了解三种图片格式的文件头,通过补充文件头绕过文件内容的检测。