赞
踩
本篇文章只是学习笔记。
文件解析漏洞,是指web容器(Apache、nginx、iss等)在解析文件时出现了漏洞,以其他格式执行出脚本格式的效果从而黑客可以利用该漏洞实现非法文件的解析。
web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如tmocat、apache、nginx等。(可以理解为编程语言提供环境)
中间件:提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,中间件处在操作系统和更高一级应用程序之间。
容器:给处于其中的应用程序组件(ASP,JSP,PHP)提供一个环境。使处于其中的应用程序组件之间跟容器中的环境变量接口交互,不必关注其他系统问题。
攻击者在利用上传漏洞时,通常会与web容器的解析漏洞配合在一起。
在IIS5.x/6.0中,在网站下建立文件夹的名字为.asp、.asa、.cer、.cdx的文件夹,你们其目录内的任何扩展名的文件都会被IIS当做asp文件来解释并执行。例如常见目录test.asp,那么/test.asp/1…jpg将被当做asp文件来执行。假设黑客可以控制上传文件夹路径,就可以不管上传后你的图片改不改名都能那shell了。
在IIS5.X/6.0中,分号是后面的不被解析,也就是说xie.asp;,jpg会被服务器看成是xie.asp。还有IIS6.0默认的可执行文件除了asp还包含这两种.asa .cer。而有些网站对用户上传的文件进行校验,只是校验后缀名。所以我们只要上传.asp;,jpg、.asa;,jpg、.cer;.jpg后缀的文件,就可以通过服务器校验,并且服务器会把它当成asp文件执行。
IIS6.0→主目录→配置→查看这几种扩展名都是指向同一个文件。
C:\WINDOWS\SYSTEM32\INETSRV\ASP.DLL所以都解析成asp。
在IIS7.0中,在默认Fast-CGI开启状况下,再加上php配置文件中,开启了cgi.fix_pathinfo导致漏洞产生 。
这并不是nginx或者iis7/7.5本身的漏洞。
php.ini里的cgi.fix_pathinfo=1
IIS7在Fast-CGI运行模式下
我们往图片里面加入phpinfo。
将文件保存成test.jpg格式,上传到服务器,上传成功后,直接访问test.jpg/x.php,此时神奇的畸形解析开始发挥作用,test.jpg将会被服务器当成php文件执行,所以图片里面的代码就会被执行。
在windows环境下,xx.jpg【空格】或xx.jpg,这两类文件都是不允许存在的,若这样命令,windows会默认出去空格或点,黑客可以通过抓包,在文件名后加一个空格或者点绕过黑名单,若上传成功,空格和点都会被windows自动消除。
该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞
cgi.fix_pathinfo
这个选项位于配置文件php.ini中,默认值为1,表示开启,当php遇到文件路径/test.png/x.php,若/test.png/x.php不存在,则会去掉最后的/x.php,然后判断/test.php是否存在,若存在,则把/test.png当做文件/test.png/x.php解析,如若test.png还不存在如果在其前面还有后缀,继续前面的步骤,以此类推,若是关闭该选项,访问/test.jpg/x.php只会返回找不到文件。
security.limit_extensions
在配置文件中,它位于/etc/php-fpm.d/www.conf中
这个选项开始是被注释了的也就是默认只允许执行php文件,可以在后面添加其他后缀,比如security.limit_extensions .jpg .php。像这样添加.jpg之后,.jpg文件也能以php格式来执行,修改了后需要service php-fpm restart重启php。
环境:
vulhub/nginx/nginx_parsing_vulnerability
影响nginx版本:nginx0.8.41~1.5.6
漏洞的原理是非法字符空格和截止符(%00)会导致Nginx解析URI时的有限状态机混乱,危害是允许攻击者通过一个非编码空格绕过后缀名限制。举个例子,假设服务器上存在文件:file.jpg【空格】,注意文件名的最后一个字符是空格,则可以通过访问:
在Apache 2.0.x<=2.0.59,Apache 2.2.x<=2.2.17,Apache 2.2.2<=2.2.8中Apache解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。
apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断,比如,sh.php.owf.rar和.rar这两种后缀是apache不可识别的解析,apache就会把sh.php.pwf.rar解析成sh.php。如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个sh.php.rara.jpg.png…去测试是否是合法后缀。任意不识别的后缀,逐级向上识别。
只要不在mime.types当中的都不认识,可以到安装Apache的目录下找这个文件。
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置,通过.htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、运行/阻止特定用户或者目录的访问、禁止目录列表、配置默认文档等功能IIS平台上不存在该文件,该文件默认开启,启用和关闭在httpd.conf文件中配置。
.htaccess文件生效前提条件为:
mod_rewrite模块开启
AllowOverride ALL
要.htaccess的规则生效,则需要在apache开启rewrite重写模块,因为apache是多数都开启这个模块,所以规则一般都生效,以下这个,.htaccess的意思就是把所有名字里面含有jpg的文件当成php脚本来执行。当前目录下的所有jpg文件当成php文件执行。如果在Apache的conf里有这样一行设置,AddType application/x-httpd-php .jpg即使扩展名是 .jpg ,也会以php来执行。
正则表达式在结尾处
符号,如果设置了
R
e
g
E
x
p
对象的
M
u
l
t
i
l
i
n
e
属性,则
符号,如果设置了RegExp对象的Multiline属性,则
符号,如果设置了RegExp对象的Multiline属性,则也匹配‘\n’或’\r’。
因为1.php\x0a = 1.php\n,所以我们在上传文件名后面加上\0xa(换行符),也会以php文件形式解析执行。
该漏洞属于用户配置不当产生的漏洞,与具体中间件版本无关。
1.php\x0a=>1.php
apache通过mod_php来运行脚本,其2.4.0-2.4.29中存在apache换行解析漏洞,在解析php时xxx.php\x0A将被安装PHP后缀进行解析,导致绕过一些服务器的安全策略,该漏洞属于用户配置不当产生的漏洞,与具体中间件版本无关。
影响版本:Apache 2.4.0-2.4.29
环境:vulhub/httpd/CVE-2017-15715
.htaccess是伪静态环境配置文件,用于lamp。
.user.ini是lnmp文件,里面放的是你网站的文件夹路径地址,目的是防止跨目录访问和文件跨目录读取。
为了防止跨站,可将.user.ini放在网站根目录下,内容为:
利用条件:
1、服务器脚本语言为PHP
2、服务器使用CGI/FastCGI模式
3、上传目录下要有课执行的php文件
windows操作系统中,文件名不能以空格或.开头,也不能以空格或.结尾,当把一个文件命名为以空格或.开头或结尾时,会自动的去掉开头和结尾处的空格和.,利用此特性,也可能造成文件解析漏洞。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。