文件上传常见验证:
后缀名:类型,文件头等
后缀名:黑名单,白名单
#黑名单:明确不让上传的格式后缀(asp,php,jsp,aspx,cgi,war)
黑名单验证利用代码编写漏洞尝试绕过,比如后缀名加.jpg.php,抓包加空格,大小写后缀名,循环验证与一次验证单次验证只去除一个字符,可以通过添加多个干扰字符实现绕过等。
#白名单:明确可以上传的格式后缀(jpg,png,zip,rar,gif)
白名单上传可以使用干扰字符绕过,具体看搭建环境版本以及类型
主流都是使用白名单验证
文件类型:MIME信息
#上传抓包可以通过Content-Type:这个类型判断上传文件类型,修改值的内容绕过
例:Content-Type:application/octet-stream修改为Content-Type:image/jpeg
文件头:内容头信息
#每一个图片文件都有一个特定的开头内容,验证方式是通过文件头判定是否为图片文件,可以通过修改文件头绕过
例:.png格式的为“塒NG”,.gif的为GIF89a
注:PHP代码查找需要知道相应的意思,使用$_FILES[][]验证一般是获取文件的信息然后判断
$_FILES ['upload-file']['name']表示获取上传文件的文件名;
$_FILES ['upload-file']['type']表示获取上传文件的文件类型(image/jpeg)
$_FILES ['upload-file']['size']表示获取上传文件的文件大小