各种文件解析漏洞
中间件
提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通
IIS6.0命令执行漏洞
在开启WebDAV服务的情况下存在远程命令执行漏洞
在IIS6.0处理Propfind指令的时候,由于对url的长度没有进行有效长度控制和检查,导致执行memcpy对虚拟路径进行构造的时候,引发栈溢出,该漏洞可以导致远程代码执行。
Apache文件解析漏洞
在/etc/apache2/sites-enabled目录下编写任意一个conf文件
内容为: AddHandler application/x-httpd-php .php
然后重启apache2服务
在网页根目录创建1.php.aaa 内容为phpinfo();
成功解析
****
Nginx目录遍历漏洞
在nginx目录下写一个phpinfo页面 可以正常访问
创建一个test文件夹 但是nginx会拒绝访问
此时需要修改配置文件 增加autoindex on 目录遍历功能
Vim /etc/nginx/sites-avalilable/default 在location里加上autoindex on
重启nginx服务 目录遍历生效
修复方法:将/etc/nginx/sites-available/default配置文件修改
Autoindex on 改成 autoindex off
****
Nginx文件解析漏洞
原理
对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加为test.jpg/x.php进行解析攻击
对低版本的nginx可以在任意文件名后面添加%00.php进行解析攻击
nginx下,请求文件/shell.gif时在后面加上*.php,即/shell.gif/1.php可能会被当做php代码执行
和apache一样,nginx也是通过mime.types识别文件
文件在/etc/nginx/mime.types
在网站根目录下创建1.gif文件 写入phpinfo内容
但是无法被解析
利用文件解析漏洞输入1.gif/1.php 显示AccessDenied
因为nginx拿到文件后,检查后缀名为php,则交给php进行处理,php发现1.jpg/1.php不存在,就删去最后的1.php,发现1.jpg存在,但是php并不认为这是php文件,所以返回"Access Denied."
文件目录为将/etc/php5/fpm/pool.d/www.conf中security.limit_extensions=.php
将.php删除 意思是将所有文件都交给php解析 重启php服务
Cgi.fix_pathinfo这个配置在php.ini中可以修改,默认是开启的/etc/php5/fpm/php.ini
默认是1,不需要修改
修复方法:
1.将php.ini文件中的cgi.fix_pathinfo的值设置为0,这样php在解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示404
2.将/etc/php5/fpm/pool.d/www.conf中security.limit_extensions后面的值设置为.php
****
Tomcat任意文件上传漏洞
Tomcat7.0.79
漏洞配置:在/conf/web.xml文件中(114行)插入以下内容
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
将readonly设置为false时,可以通过HTTP PUT方式创建一个JSP文件,并可执行任意代码
在访问创建的JSP文件时,在末尾通过空格符%20(windows中文件名不能以空格结尾)
来绕过限制 返回201说明文件上传成功
****
IIS文件解析漏洞
IIS一般是和ASP搭配的,上传的地方如果限制了asp的后缀名,那么应该使用其他IIS支持的文件后缀,除了asp之外还有cer和asa
如果网站将cer和asa都过滤了的话,就只能通过文件解析来绕过
IIS6.0在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞
/test.asp/test.jpg
Test.asp;.jpg
第一种是新建一个test.asp的目录 ,该目录中的任何文件都被IIS当做ASP程序执行
第二种是使用分号做隔断,虽然文件真正后缀名是jpg,但是因为有分号依然会被当做asp程序运行
IIS7.5文件解析漏洞
Test.jpg/.php
后缀为php,无论该文件是否存在,都会直接交给php处理,而php又默认开启cgi.fix_pathinfo,便会对路径进行修理
比如:当php遇到 /aaa.xxx/bbb.yyy时 若/aaa.xxx/bbb.yyy不存在,则会去掉最后的bbb.yyy,然后判断aaa.xxx是否存在,若存在,则把/aaa.xxx当做文件
若有文件test.jpg 访问时在其后加/.php 则可以让IIS把test.jpg/.php交给php
php修理文件路径后得到test.jpg 该文件存在 便把该文件当做php程序执行了
