影响版本为: Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
漏洞说明:这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,
错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
漏洞测试
环境搭建:
在本地搭建一个nginx:1.4.2的上传页面
漏洞复现过程:
1.首先判断其文件上传的格式为白名单机制,上传一个1.jpg的木马,抓包后进行修改在其后加入一个空格—>1.jpg
然后放包
2.发现其地址
3.构建请求url:http://192.168.127.133:8080/uploadfiles/1.jpgaaaphp
抓包后修改其2进制值将61 61 61 分别改为 20 00 2e
然后放包
影响版本:和nginx,php版本无关,这是由于php中的选项cgi.fix_pathinfo的默认值被开启,所以当nginx看到.php结尾的文件就交给了php处理,相当于iis7.5的解析漏洞
漏洞复现:
1.上传一张正常的图片马绕过检测
2.然后加/.php这样会发现图片被解析成php代码
影响版本: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域,来获取相应的服务器中的缓存文件头部信息,导致敏感的服务器信息泄露
相关文章检索:https://www.freebuf.com/articles/terminal/140402.html
影响版本:Nginx 0.5.6 - 1.13.2
环境搭建
使用脚本 发现其带出部分缓存信息
原理:CRLF是“回车 + 换行”(\r )的简称。在HTTP协议中,HTTP Header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF(使用payload %0a%0d%0a%0d进行测试)来取出HTTP内容并显示出来。所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie(http://www.xx.com%0a%0d%0a%0dSet-cookie:JSPSESSID%3Dxxx)或者HTML代码(http://www.xx.com/?url=%0a%0d%0a%0d<img src=https://www.freebuf.com/articles/web/1 onerror=alert("xss")>),所以CRLF Injection又叫HTTP Response Splitting,简称HRS。
Nginx在配置别名(Alias)的时候,如果忘记加,将造成一个目录穿越漏洞。
错误的配置文件示例(原本的目的是为了让用户访问到/home/目录下的文件):
Payload:,成功穿越到根目录: