本期引言:文件解析是当服务器接收到客户端发送的HTTP请求时,Web容器(Apache、Ngingx、IIS等)首先会根据文件的后缀名,来决定如何去处理这个请求。在服务器中如果找到可以处理这类后缀名的应用程序,会提交给相应的应用程序处理;如果找不到则直接把这个文件返还给客户端。文件解析同样也是Web系统的一项正常功能,但为什么会导致漏洞产生呢?通过本篇文章带大家走进文件解析漏洞的领域中。
什么是文件漏洞解析
文件解析漏洞是由于网站管理员的配置不当或者Web容器自身的漏洞,导致一些特殊的文件在解析时被当作脚本文件解析执行。文件解析漏洞与文件上传漏洞是两种不同类型的漏洞,文件解析漏洞一般会结合文件上传漏洞组合利用。
网站管理员的配置不当会导致文件解析漏洞产生,比如由于Apache配置文件配置不当,导致php3、php5、phtml等文件被当成php脚本文件执行。
Web容器自身的漏洞是造成文件解析漏洞的常见原因,比如IIS6.0解析漏洞、IIS7.5解析漏洞、Nginx解析漏洞。
常见的Web容器解析漏洞
2.1 IIS解析漏洞
IIS除了解析.asp后缀的文件外,还可以把.cer和.asa后缀的文件当作asp脚本文件执行,并且IIS解析漏洞在IIS 6.0和II S7.5两个版本中都存在。
-
IIS6.0解析漏洞:/test.asp/test.jpg和test.asp;.jpg,两种利用方式
-
IIS7.5解析漏洞:test.jpg/任意文件名.php
2.2 Nginx解析漏洞
Nginx对于任意文件名,在文件名的后面添加“/任意文件名.php”,就可以触发Nginx解析漏洞。
-
Nginx解析漏洞:test.jpg/任意文件名.php,与IIS7.5解析漏洞类似
2.3 Apache解析漏洞
Apache解析文件的规则是从右向左开始判断解析,一个文件可以有多个以点分隔的后缀,当右边的后缀名无法识别,则继续向左判断解析,直到能够识别为止;如果所有后缀名都不可识别,则暴露源文件。
-
Apache解析漏洞:1.php.aaa
文件解析漏洞实例
Apache解析漏洞与用户的配置有密切关系。严格来说,属于用户配置不当的问题。Apache和php有三种结合方法:
-
CGI:通常翻译为共同网关接口,是HTTP服务器与机器上的其他程序进行通信的一个接口,让Web服务器必要时启动额外的程序处理动态内容。
-
FastCGI:CGI解释器的更快实现,可以提供良好的性能、伸缩性、Fail-Over特性等。
-
Module:把php编译为Apache的模块,也是用得最多的一种方法。
Apache文件解析漏洞就发生在Module结合方法上。
Apache文件解析漏洞的特性是:Apache默认一个文件可以有多个以点分隔的后缀,在处理多后缀文件时会按照从右往左解析的特点,当右边的后缀无法识别,则继续向左识别,直到遇到自己能够解析的扩展名为止。若全部不能够解析,则暴露源代码。
1. 登录操作机,访问http://ip,上传一个名为xxx.php的文件,被拦截,判断为白名单验证。
2. 将文件重命名为xxx.php.png,并上传文件,文件内容如下,上传成功。
3.访问http://ip/uploadfiles/xxx.php.png,解析失败。
4.其实,解析漏洞的产生,是由于运维人员在配置服务器时,为了使Apache服务器能解析php,而自己新建一个配置文件添加一个handler,它的作用也是为了让Apache把php文件交给php_module解析,但是注意到它与SetHandler:它的后缀不是用正则去匹配的。所以,在文件名的任何位置匹配到php后缀,它都会让php_module解析。例如:
5.利用Apache解析漏洞,再次访问http://ip/uploadfiles/xxx.php.png,文件被当作php脚本文件解析执行。
总结
通过此文,发现文件解析漏洞会结合文件上传漏洞出现,当文件上传使用白名单做限制,只能上传图片文件,导致脚本文件无法上传,上传图片马绕过白名单文件上传的验证,但是图片马又无法解析,利用Apache文件解析漏洞的特点:任意文件名.php.png.xxx,Apache从右向左找文件后缀识别,当遇到不认识的后缀会向前继续找,直到找到认识且能解析的后缀,从而解析脚本文件。
本期作者:石岩,深信服培训认证中心主任,深信服安全服务认证专家(SCSE-S),产业教育中心资深讲师,中国网络空间安全协会会员,深圳大学专业学位研究生校外导师;曾任国内知名安全厂商安全认证负责人、安全服务工程师、信息安全咨询顾问、信息安全讲师;多次为政府、运营商、企业、本科、高职学员以及高校老师进行信息安全培训;多次组织、参与职业能力评价认证工作,擅长Web安全、渗透测试、操作系统等多个方向的课程。