文件解析漏洞

           之前在看到文件上传漏洞的部分的时候,感觉除了绕过后缀名,MIME-TYPE的检查外,对文件的解析部分不是太清楚,现在再记录一下。

IIS

6中会将a.asp;xx.jpg解析成asp,原因是被;符号截断了。还存在一个目录解析,会将a.asp/目录下文件解析成asp文件,前提是本地确实存在这样的文件或环境。
7.5中xyz.jpg/.php 会被解析成php ,pathinfo

Apache

apache:webshel.php.XXX.XXA.XXB module方式解析php文件的情况下,由于mime.types配置里没有XXX文件类型,不认识就往前遍历解析.php(1.x 2.x)
还有个关于AddType和AddHandler的配置问题,AddType指令在给定的文件扩展名与特定的内容类型之间建立映射关系。MIME-type指明了包含extension扩展名的文件的媒体类型。
而AddHandler 指令的作用是:在文件扩展名与特定的处理器之间建立映射
比如:AddHandler php5-script .php
就是指定扩展名为 .php 的文件应被php5-srcipt 处理器来处理。
AddType 是与类型表相关的,描述的是扩展名与文件类型之间的关系。
AddHandler 说明什么样的扩展名使用什么样的程序来处理,描述的是扩展名与处理程序之间的关系。
AddType中application/x-httpd-php .jpg 后缀名jpg文件会被当成php解析
而AddHandler php5-script .jpg 的话,只要文件名中包含.jpg字符串就会被当成php解析

Nginx

在php配置为fast-cgi的应用中,由于pathinfo模式(参数cgi.fix_pathinfo)的开启,在映射URI的时候,如果是解析xxx/111.jpg/222.php
其中SCRIPT_NAME会是xxx/111.jpg/222.php,当开启fix_pathinfo的时候,由于222.php不存在,会被丢弃掉,所以111.jpg会被作为PHP脚本解析。(IIS也存在过相同问题,主要是后缀是.php就扔给php处理了)
防御方式是将cgi.fix_pathinfo设置为0,高版本中引入了security.limit_extensions也会防止此问题的出现
00截断

防御手段

文件上传目录设置为不可执行
判断文件MIME Type类型+后缀检查推荐使用白名单,此外,对图片的处理可以使用压缩函数从而破坏文件中可能包含的代码
使用随机数重命名文件名和路径名,不暴露出文件上传位置
单独设置文件服务器的域名,可以有效解决如策略文件上传xss之类的客户端攻击


发表评论 暂无评论

*