Vulhub Nginx漏洞复现
前言
Nginx是一款广泛使用的Web服务器和反向代理服务器,尽管它以高性能和稳定性而闻名,但像所有软件一样,它也可能存在安全漏洞。
文件名逻辑漏洞(CVE-2013-4547)
漏洞描述
Nginx在解析URL时会因为空格和截断符的存在,错误地解析请求的URL。所以可以通过添加非编码空格和截断符绕过文件后缀的限制。
Nginx如何读取php文件?
当Nginx读取到了.php的文件,会将文件给 FastCGI 解析:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /var/www/html;
}
什么是FastCGI?
FastCGI(Fast Common Gateway Interface)是一种通用的、平台无关的、轻量级的进程间通信协议,用于在Web服务器和应用程序服务器之间进行通信。允许Web服务器(Nginx)将请求传递给应用程序服务器(PHP-FPM),并接收应用程序服务器处理后的响应,然后将其发送回客户端。
正常情况下,也只有.php后缀的文件才会被发送给fastcgi解析。
通我们直接上传.php文件的木马是不被允许的。那就尝试上传不是php文件的木马,比如图片格式的文件,这个图片里面包含有php代码。上传成功后尝试去访问这个文件,但服务器就会按照图像处理的方式去执行。所以我们要让服务器误认为这个文件就是.php的文件,把文件当作php的文件去执行。
漏洞复现
漏洞环境:/vulhub/nginx/CVE-2013-4547
影响版本:Nginx 0.8.41 - 1.4.3 / 1.5.0 - 1.5.7
直接上传.php文件是不被允许的:

那现在上传一个图片马,注意后面的空格:

图片马上传成功,并且知道文件的绝对路径。现在要做的就是让服务器把这个png文件当作php文件去解析:
首先在png后面输两个空格,路径变为/uploadfiles/a.png .php,现在请求仍然是不可行的。

利用空格和截断符放在一起不会报错的原理,路径应该是/uploadfiles/a.png[0x20][0x00].php。所以在Hex中将第二个0x20修改为0x00:

现在有一个空格和一个截断符,现在再请求就成功了。

漏洞修复
将Nginx升级到 1.5.7 版本之后。
配置不当导致解析漏洞
漏洞描述
这个漏洞和nginx,php版本无关,是配置不当导致的解析漏洞。
通常nginx会把.php结尾的文件交给FastCGI处理,假设请求的URL是这样/uploadfiles/a.png/a.php,如果FastCGI在处理/a.php文件时发现这个文件不存在,并且配置文件中的配置项cgi.fix_pathinfo=1默认开启(路径修复:如果当前路径不存在则采用上级路径),那么此时这里交由fastcgi处理的文件就会变成/a.png。
还有一点就是 php-fpm.conf 中的security.limit_extensions配置项会限制FastCGI解析文件的类型。当设置为空的时候才允许fastcgi将.png等文件当做php代码解析。

所以当cgi.fix_pathinfo开启并且security.limit_extensions没有限制解析文件类型时,就会造成这个解析漏洞。
漏洞复现
漏洞环境:/vulhub/nginx/nginx_parsing_vulnerability
当去访问一张图的时候会正常显示:

如果在图的后面加上/.php,则会被当作php文件来解析:

漏洞修复
将php.ini文件中的cgi.fix_pathinfo的值设置为0
php-fpm.conf中的security.limit_extensions后面的值设置为.php
配置错误导致漏洞
CRLF注入漏洞
漏洞描述
CRLF指的是是回车+换行(\r\n),其十六进制编码分别为0x0d和0x0a。在HTTP协议中,header和body之间使用两个CRLF进行分隔,并且浏览器就会根据CRLF来取出body中内容并显示出来。
如果我们能够控制header消息头中的字符,注入一些恶意的换行,这样我们就能注入一些Cookie或者其他信息。
nginx强制跳转的功能,如果存在如下配置,就会被强制跳转到以https协议访问之前访问的链接。
location / {
return 302 https://$host$uri;
}
这个过程中会将$uri进行解码,并且这个$uri变量是可以控制的,这样我们就可以在url处填入CRLF,然后对服务器进行访问实现头部注入。
漏洞复现
漏洞环境:/vulhub/nginx/insecure-configuration
注入Set-Cookie头Payload: /%0a%0dSet-Cookie:%20a=1234567

甚至可以注入HTML,构造一个XSS漏洞:

目录穿越漏洞
漏洞描述
当配置Nginx访问静态资源时,如果alias路径后没有配置/,而location路径后也没有配置/,就可能出现目录穿越漏洞。
location /files {
alias /home/;
}
漏洞复现
漏洞环境:/vulhub/nginx/insecure-configuration
Payload: /files../ 成功穿越到根目录:

当访问/files../时,Nginx实际处理的路径是/home/../,从而实现了穿越目录。
若有错误,欢迎指正!o( ̄▽ ̄)ブ
Vulhub Nginx漏洞复现的更多相关文章
- Weblogic-SSRF漏洞复现
Weblogic-SSRF漏洞复现 一.SSRF概念 服务端请求伪造(Server-Side Request Forgery),是一种有攻击者构造形成有服务端发起请求的一个安全漏洞.一般情况下,SSR ...
- nginx解析漏洞,配置不当,目录遍历漏洞环境搭建、漏洞复现
nginx解析漏洞,配置不当,目录遍历漏洞复现 1.Ubuntu14.04安装nginx-php5-fpm 安装了nginx,需要安装以下依赖 sudo apt-get install libpcre ...
- nginx文件名逻辑漏洞_CVE-2013-4547漏洞复现
nginx文件名逻辑漏洞_CVE-2013-4547漏洞复现 一.漏洞描述 这个漏洞其实和代码执行没有太大的关系,主要原因是错误地解析了请求的URL,错误地获取到用户请求的文件名,导致出现权限绕过.代 ...
- Nginx解析漏洞复现以及哥斯拉连接Webshell实践
Nginx解析漏洞复现以及哥斯拉连接Webshell实践 目录 1. 环境 2. 过程 2.1 vulhub镜像拉取 2.2 漏洞利用 2.3 webshell上传 2.4 哥斯拉Webshell连接 ...
- CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现
漏洞背景:来自Wallarm的安全研究员Andrew Danau在9月14-16号举办的Real World CTF中,意外的向服务器发送%0a(换行符)时,服务器返回异常信息.由此发现了这个0day ...
- 15.Nginx 解析漏洞复现
Nginx 解析漏洞复现 Nginx解析漏洞复现. 版本信息: Nginx 1.x 最新版 PHP 7.x最新版 由此可知,该漏洞与Nginx.php版本无关,属于用户配置不当造成的解析漏洞. 使用d ...
- nginx解析漏洞复现
nginx解析漏洞复现 一.漏洞描述 该漏洞与nginx.php版本无关,属于用户配置不当造成的解析漏洞 二.漏洞原理 1. 由于nginx.conf的如下配置导致nginx把以’.php’结尾的文件 ...
- nginx目录穿越漏洞复现
nginx目录穿越漏洞复现 一.漏洞描述 Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞. 二.漏洞原理 1. 修改nginx.conf,在如下图位置添加如下配置 在如 ...
- nginx CRLF(换行回车)注入漏洞复现
nginx CRLF(换行回车)注入漏洞复现 一.漏洞描述 CRLF是”回车+换行”(\r\n)的简称,其十六进制编码分别为0x0d和0x0a.在HTTP协议中,HTTP header与HTTP Bo ...
- nginx目录遍历漏洞复现
nginx目录遍历漏洞复现 一.漏洞描述 Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露. 二.漏洞原理 1. 修改nginx.conf,在如下图位置添 ...
随机推荐
- Go语言目前主要有哪些应用框架
Go语言是一种高效.快速.简洁的编程语言,近年来越来越受到开发者的欢迎.由于Go语言的快速发展,出现了很多的优秀框架来支持Go应用程序的开发.以下是一些目前比较流行的Go语言框架: 1. Gin:Gi ...
- 【图文安装教程】在docker中安装kibana
在上一篇中,我们已经在docker里面安装了ES. kibana可以给我们提供一个elasticsearch的可视化界面,便于我们学习. 所以,本篇咱们就在docker里面安装kibana图文教程: ...
- mysql 存储结构介绍及执行过程分析
MySQL体系结构介绍 1 mysql 的体系结构 MySQL整体的逻辑结构可以分为4层,客户层.服务层.存储引擎层.数据层 客户层 客户层:进行相关的连接处理.权限控制.安全处理等操作 服务层 服务 ...
- c程序设计语言 by K&R(五)UNIX系统接口
一.文件描述符 在unix操作系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统的文件,因此,所有的输入.输出都要通过读/写文件来完成.也就是说,通过一个单一的接口就可以处理外围设备和程序之 ...
- 事件触发器TRIGGER
我所理解的事件 MYSQL触发器 就好比是 JavaScript 中的 Object.defineProperty,通过观察某些行为,然后做些事情 创建触发器 DELIMITER $$ CREATE ...
- parser.add_argument
parser.add_argument 在解析参数时,有个地方很值得注意. --dict-name,会把dict-name解析为变量dict_name.也就是说会把破折号转成下划线.
- 音视频入门-5-音频编码原理、编码器、ADTS格式
1. 概念 音频压缩技术指的是对原始数字音频信号流(PCM编码)运用的数字信号处理技术. 2. 背景 和 压缩的必要性 研究发现,直接采用PCM码流进行存储和传输存在非常大的冗余度. 以CD为例,其 ...
- CentOS7 控制台上安装运行 vmware workstation 备忘录
目标平台 CentOS 7.5.1804 无桌面,要跑个 Ubuntu.vmx 1.安装依赖库 yum -y install perl gcc kernel-devel libX11 libXiner ...
- Diffusion系列 - DDIM 公式推导 + 代码 -(三)
DENOISING DIFFUSION IMPLICIT MODELS (DDIM) 从DDPM中我们知道,其扩散过程(前向过程.或加噪过程)被定义为一个马尔可夫过程,其去噪过程(也有叫逆向过程)也是 ...
- 键盘事件 key keyCode
keyCode 8 = BackSpace BackSpace keyCode 9 = Tab Tab keyCode 12 = Clear keyCode 13 = Enter keyCode 16 ...