Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。
其特点是占有内存少,并发能力强,nginx的并发能力在同类型的网页服务器中表现较好。主要应用在百度,淘宝等高并发请求情形。
影响版本:Nginx 0.8.41~1.4.3 / 1.5.0~1.5.7
漏洞原理:主要原因是nginx错误的解析了请求的URI,比如说下面这个模块,nginx会匹配以|.PHP|结尾的请求,发送给FastCGI(一个ong-live型CGI,激活后不用每次都fork,减少内存消耗)。而存在文 件名漏洞时,1.jpg[0x20][0x00].php会匹配为php文件(0x20为空格,0x00是null,查询ASCII表)但进入该模块后,因为1.jpg后是空格,会被设置为script_filename的值被发送到fastcgi解析。就完成了一次错误的解析。
location ~ \.php$ {
include fastcgi_params;
fastcgi\_pass 127.0.0.1:;
fastcgi\_index index.php;
fastcgi\_param SCRIPT\_FILENAME /var/www/html$fastcgi\_script\_name;
fastcgi\_param DOCUMENT\_ROOT /var/www/html;
}
小扩展: 很多网站限制了允许访问后台的IP,那么在请求时可以这么请求/test[0x20]/../admin/index.php,前提是有test这个文件夹
漏洞复现:
那看看后缀名能不能绕过;
接下来就是要使该文件被解析为php文件,根据CVE-2013-4547文件名错误解析原理,.jpg[0x20][0x00].php就可以进入php的函数,而被cgi解析。重放访问上传文件的数据包, 可以看到没被解析;
可以看到,1.jpg的内容成功被php解析。
漏洞原理:
该漏洞与nginx,php的版本无关,这是由于 php 中的选项 cgi.fix_pathinfo 默认值为1,表示开启;nginx看到.php结尾的文件就交给php处理,而不先判断文件是否存在,这一点IIS与nginx是一样的。
漏洞复现:
影响版本:0.5.*, 0.6.*, 0.7 <= 0.7.65, 0.8 <= 0.8.37
漏洞原理:php-fastcgi在执行php文件时,URL在处理 %00 空字节时 与FastCGI处理不一致,使得我们在其他文件中插入php代码,访问 URL+%00.php 即可执行其中的php代码。
漏洞详情:
在nginx作为反向代理服务器,且开启了缓存时,攻击者可以构造恶意的range域,来获取相应服务器中的缓存文件头部信息,导致敏感的服务器信息泄露。
在进行实践之前,先了解一下这个关键的range,range是HTTP中允许客户端分批断点续传请求资源的一个参数,举例,在请求大资源时,可以通过range并发下载;若网络中断,可以断电续传。range设置在http请求头中。
对range域的详情感兴趣的可参见:https://www.freebuf.com/articles/terminal/140402.html,介绍的很详细
影响版本:Nginx version 0.5.6 - 1.13.2
漏洞复现:
漏洞介绍:CRLF是“\r\n”的简称,即回车+换行的意思。在HTTP协议里,http头部和http正文是用两个CRLF分割的,恶意的注入http返回包头部,即是CRLF注入漏洞。这也叫HTTP Response Splitting ,简称HRS。
漏洞复现:这里搭建了一个简单的靶机环境,错误配置示例如下,传入的 %oa%0d 会被uri解码为 \r\n 。
location / {
return https://$host$uri;
}
这里有一个新浪的CRLF利用实例参见:https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html
漏洞介绍:nginx在配置别名(alias)时,将“/files” 等同为“/home/”,可以看到这里多了一个“/”,这个就导致可从/home/目录穿越到他的上层目录,即 /files../ == /home/../ ,其错误配置示例如下:
漏洞复现:
http://url:8081/files是公共文件目录,files 会被解析为/home/,files../ = /home/./ , 可以访问到根目录下的文件,造成任意文件下载。
错误配置如图所示:
漏洞原理:
1. add_header是headers模块中定义的一个指令,用来添加http响应头部。格式如:add_header Cache-Control no-store
2. nginx是分层级组织的,每层可以有自己的指令,子块继承父块的配置;但对于相同指令,子块的配置可以覆盖掉父块的配置。
3. Content Security Policy,简称CSP,内容安全策略,来限制网站是否可以包含某些来源内容,来预防一些注入漏洞,如XSS;
4. 在上图错误示例中,server块配置为:
add_header Content-Security-Policy "default-src 'self'"; ===> 使页面只能加载同源资源,且禁止内联代码执行。
add_header X-Frame-Options DENY; ===> 使页面中不能被放在iframe框架中,避免被用作点击劫持。
但是location = /test2 子块中,add_header 被重新配置了,这个会覆盖父块的配置,所以在/test2 页面下没有做安全限制。
以上内容是提取出来与此漏洞有关的,要详细了解的请参见:
add_header :https://www.jb51.net/article/156230.htm
csp:http://www.mamicode.com/info-detail-2440203.html
x-frame-options:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options
漏洞复现:
本文涉及的漏洞分为三大类
解析错误漏洞:
CVE-2013-4547:.jpg0x20 0x00.php
cgi.fix_pathinfo=1 时,.jpg/.php
%00.php (版本过低)
缓存读取漏洞:CVE-2017-7529
版本配置错误漏洞:
CRLF注入---HRS HTTP响应头注入;%0a%0d的利用
alias /files = /home/
add_header指令,子块覆盖父块
手机扫一扫
移动阅读更方便
你可能感兴趣的文章