0x01 概述
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
在大多数情况下,文件上传漏洞一般都是指“上传Web脚本能够被服务器解析”的时候,也就是通常所说的webshell的问题
需要满足几个条件:
- 上传的文件能够被web容器解释执行(文件上传后所在的目录要是Web容器所覆盖的路径)
- 用户能够从web上访问这个文件
- 上传的文件不会被安全检查、格式化、图片压缩等功能改变内容
0x02 绕过文件上传检查功能
在C、PHP等语言的常用字符串处理函数中,0x00被认为是终止符
比如应用原本只允许上传JPG图片,那么可以构造文件名(需要修改POST包)为xxx.php[\0].jpg
其中[\0]为十六进制的0x00字符
有时还会通过判断上传文件的文件头来验证文件的类型(浏览器的MIME Sniff实际上就是通过读取文件的前256个字节,来判断文件的类型)
这种情况,可以伪造一个合法的文件头,而将真实的PHP等脚本代码附在合法的文件头之后
0x03 Apache文件解析问题
Apache(1.x和2.x)对于文件名的解析是从后往前解析的,直到遇见一个Apache认识的文件类型为止
这些文件类型定义在Apache的mime.types文件中
phpshell.php.rar.rar.rar
0x04 IIS文件解析问题
-
当文件名为abc.asp;xx.jpg时,IIS6会将此文件解析为abc.asp,文件名被分号";"截断了
-
还出现过一个漏洞——因为处理文件夹扩展名出错,导致将/*.asp/目录下的所有文件都作为ASP文件解析
http://www.target.com/path/xyz.asp/abc.jpg
这个abc.jpg将被当作ASP文件进行解析
注意:这两个漏洞是需要在服务器的本地硬盘上确实存在这样的文件或文件夹 -
支持PUT功能所导致的若干上传脚本问题
PUT是在WebDav中定义的一个方法,允许用户上传文件到指定的路径下
在许多Web server中,默认禁用了,或者是对能够上传的文件类型做了严格限制
但在IIS中,如果目录支持写权限,同时开启了WebDav,则会支持PUT方法,再结合MOVE方法,就能够将原本只允许文本文件改成脚本文件,从而执行webshell
步骤:
- 通过OPTIONS探测服务器信息
- 上传文本文件
- 成功创建文件后,通过MOVE改名
0x05 利用上传文件钓鱼
利用文件上传功能,钓鱼者可以先将包含了HTML的文件(比如一张图片)上传到目标网站,然后通过传播这个文件的URL进行钓鱼,则URL中不会出现钓鱼地址,更具有欺骗性
网友评论