文件解析漏洞
原理分析
该漏洞是由于Nginx中php配置不当而造成的,与Nginx版本无关,但在高版本的php中,由于security.limit_extensions的引入,使得该漏洞难以被成功利用。
Nginx的处理程序和FastCGI处理程序不同导致Nginx拿到URI为/1.jpg/xxx.php后,识别处后缀是.php,认为是php文件,转交给PHPFastCGI处理程序去处理。PHPFastCGI处理程序识别该URI:/1.jpg/xxx.php不存在,按照PHPFastCGI处理程序自己的规则,删去最后的/xxx.php,又看/1.jpg存在,就将/1.jpg当成要执行的文件,就成功解析。
复现过程
利用vulhub靶场进行复现
进入靶场路径
[root@servernginx]#cdnginx_parsing_vulnerability/
启动靶场
docker-composeup-d
查看端口
docker-composeps
访问靶场环境
上传一个提前制作好的图片马,图片马内容为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,添加autoindexon
autoindexon开启目录浏览
autoindexoff关闭目录浏览默认是关闭状态
复现过程
利用vulhub靶场复现
进入靶场路径
[root@servernginx]#cdinsecure-configuration/
启动环境并查看端口
访问靶场环境(8081端口)
访问http://your-ip:8081/files…/
穿越到根目录
防御方法
1.设置autoindexoff关闭目录浏览
2.删除autoindexon
空字节代码执行漏洞
在使用PHP-FastCGI执行php的时候,URL里面在遇到空字节时与FastCGI处理不一致,导致可在非php文件中嵌入php代码,通过访问url.php来执行其中的php代码。如:http://local/robots.txt.php会把robots.txt文件当作php来执行。
影响版本:
nginx0.5.*
nginx0.6.*
nginx0.7<=0.7.65
nginx0.8<=0.8.37
复现过程
创建一个1.jpg图片马,内容为phpinfo
上传文件后进行抓包,修改上传文件名为1.jpg.php
发包后发现图片被解析为php文件
防御方法
1.在nginx虚拟机配置或者fcgi.conf配置加如下代码:
2.升级nginx
整数溢出漏洞(CVE-2017-7529)
在Nginx的rangefilter中存在整数溢出漏洞,可以通过带有特殊构造的range的HTTP头的恶意请求引发这个整数溢出漏洞,并导致信息泄露。该漏洞影响所有0.5.6-1.13.2版本内默认配置模块的Nginx只需要开启缓存攻击者即可发送恶意请求进行远程攻击造成信息泄露。
当Nginx服务器使用代理缓存的情况下攻击者通过利用该漏洞可以拿到服务器的后端真实IP或其他敏感信息。
该漏洞利用难度低可以归属于low-hanging-fruit的漏洞在真实网络攻击中也有一定利用价值。
复现过程
调用python3poc.pyhttp://your-ip:8080/,读取返回结果:
防御方法
升级版本
文件名逻辑漏洞(CVE-2013-4547)
这一漏洞的原理是非法字符空格和截止符(\0)会导致Nginx解析URI时的有限状态机混乱,此漏洞可导致目录跨越及代码执行,其影响版本为:nginx0.8.41–1.5.6
复现过程
创建abc.jpg文件,并上传抓包,在该文件最后添加一个空
访问图片地址,抓包
http://ip/uploadfiles/abc.jpg
将请求体中abc.jpg后加入两个空格.php变成
再次修改HEX,找到2020,把第二个20修改成00
成功解析
防御方法
升级nginx