前言

一次对文件上传漏洞的总结,希望在学习知识的同时可以帮助到其他人。

前端验证

前端验证其实没必要多说,就是上传的时候上传文件的类型,后缀都是由前端JS验证的,而我们只要BurpSuite抓一下包就可以绕过客户端的这个验证。

后端验证未严格化

这主要产生在后端验证为黑名单,或者只验证了Content-Type : image/gif,又或者只是验证了文件头为GIF89a

当后端验证为黑名单时:我们可以找一下是否有文件后缀黑名单内未包括,但是解释器却把这个后缀解释为执行语言。(jsp jspx jspf asp asa cer aspx php php php3 php4 exe exee)

只验证了Content-Type:这时我们只要修改Content-Type:image/gif即可。

只是验证了文件头:可以随意找一个图片文件,直接右键文本打开,然后写入一句话即可。

解析漏洞

Apache,IIS,Nginx

  • Apache:Apache识别文件的规则是从右向左,所以当我们上传一个名为xxx.php.bywalks的文件时,Apache无法识别bywalks这个文件后缀就往前识别,所以解释为php代码

  • IIS7.0/7.5:由于配置不当,IIS会把http://www.bywalks.com/123.jpg/123.php这种形式的当做php文件来解析。

  • Nginx:与IIS同理。

如何防护

1:后端验证需要严格;

2:要考虑到apache,iis,nginx这些中间件和windows,linux这些操作系统的特性;

3:上传后的文件名需要随机化。