目录
文件解析漏洞
原理分析
复现过程
防御方法
目录遍历漏洞
原理分析
复现过程
防御方法
空字节代码执行漏洞
复现过程
防御方法
整数溢出漏洞(CVE-2017-7529)
复现过程
防御方法
文件名逻辑漏洞(CVE-2013-4547)
复现过程
防御方法
该漏洞是由于Nginx中php配置不当而造成的,与Nginx版本无关,但在高版本的php中,由于 security.limit_extensions的引入,使得该漏洞难以被成功利用。
Nginx的处理程序和FastCGI处理程序不同导致 Nginx拿到URI为/1.jpg/xxx.php后,识别处后缀是.php,认为是php文件,转交给PHP FastCGI处理程序去处理。PHP FastCGI处理程序识别该URI: /1.jpg/xxx.php不存在,按照PHP FastCGI处理程序自己 的规则,删去最后的/xxx.php,又看/1.jpg存在,就将/1.jpg当成要执行的文件,就成功解析。
利用vulhub靶场进行复现
进入靶场路径
[root@server nginx]# cd nginx_parsing_vulnerability/
启动靶场
docker-compose up -d
查看端口
docker-compose ps
访问靶场环境
上传一个提前制作好的图片马,图片马内容为phpinfo,上传后返回图片的路径
在路径后增加/test.php 并访问,发现图片已经被解析成为php文件
1、 将php.ini文件中的cgi.fix_pathinfo的值设置为0,这样php再解析1.php/1.jpg这样的目录时,只要1.jpg 不存在就会显示404页面
2、 php-fpm.conf中的security.limit_extensions后面的值设置为.php,表示仅支持.php后缀解析
Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露。
修改nginx.conf,添加autoindex on
autoindex on 开启目录浏览
autoindex off关闭目录浏览 默认是关闭状态
利用vulhub靶场复现
进入靶场路径
[root@server nginx]# cd insecure-configuration/
启动环境并查看端口
docker-compose up -d #启动靶场
docker-compose ps #查看端口
访问靶场环境(8081端口)
访问 http://your-ip:8081/files…/
穿越到根目录
1.设置 autoindex off 关闭目录浏览
2.删除 autoindex on
在使用PHP-FastCGI执行php的时候,URL里面在遇到%00空字节时与FastCGI处理不一致,导致可在非 php文件中嵌入php代码,通过访问url+%00.php来执行其中的php代码。如: http://local/robots.txt.php会把robots.txt文件当作php来执行。
影响版本:
nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37
创建一个1.jpg图片马,内容为phpinfo
上传文件后进行抓包,修改上传文件名为1.jpg%00.php
发包后发现图片被解析为php文件
1.在nginx虚拟机配置或者fcgi.conf配置加如下代码:
if ($request_filename ~* (.*)\.php) {
set $php_url $1;
}
if (!-e $php_url.php) {
return 403;
}
2.升级 nginx
在 Nginx 的 range filter 中存在整数溢出漏洞,可以通过带有特殊构造的 range 的 HTTP 头的恶意请求 引发这个整数溢出漏洞,并导致信息泄露。 该漏洞影响所有 0.5.6 - 1.13.2版本内默认配置模块的Nginx只需要开启缓存攻击者即可发送恶意请求进 行远程攻击造成信息泄露。
当Nginx服务器使用代理缓存的情况下攻击者通过利用该漏洞可以拿到服务器的后端真实IP或其他敏感信息。
该漏洞利用难度低可以归属于low-hanging-fruit的漏洞在真实网络攻击中也有一定利用价值。
[root@server nginx]# cd CVE-2017-7529/
[root@server CVE-2017-7529]# docker-compose up -d
调用python3 poc.py http://your-ip:8080/,读取返回结果:
升级版本
这一漏洞的原理是非法字符空格和截止符(\0)会导致Nginx解析URI时的有限状态机混乱,此漏洞可导 致目录跨越及代码执行,其影响版本为:nginx 0.8.41 – 1.5.6
#启动环境
[root@server nginx]# cd CVE-2013-4547/
[root@server CVE-2013-4547]# docker-compose up -d
创建 abc.jpg 文件,并上传 抓包,在该文件最后添加一个空
访问图片地址,抓包
http://ip/uploadfiles/abc.jpg
将请求体中abc.jpg后加入两个空格.php变成
再次修改HEX,找到20 20,把第二个20修改成00
成功解析
升级nginx