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 plan9 汇编:手写汇编
原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 在 Go plan9 汇编: 打通应用到底层的任督二脉 一文中介绍了从应用程序到汇编指令的转换.本文将结合汇编和 Go 程序实现手写基本的汇编指 ...
- 【YashanDB知识库】23.1.3.101版本创建物化视图coredump
[标题]23.1.3.101版本创建物化视图coredump [问题分类]数据库错误 [关键词]YashanDB, 物化视图, coredump, dblink [问题描述]在23.1.3.101版本 ...
- Spark Dataframe 转 Json
import org.apache.spark.sql.DataFrame import org.apache.spark.sql.functions._ import org.apache.spar ...
- Qml 实现瀑布流布局
[写在前面] 最近在刷掘金的时候看到一篇关于瀑布流布局的文章,然鹅他们的实现都是前端的那套,就想着 Qml 有没有类似实现. 结果百度了一圈也没有( T_T Qml 凉了凉了 ),于是,我按照自己理解 ...
- JavaScript – 类型转换
介绍 JS 是弱类型语言, 在编程时, 有许多自动类型转换的技巧, 虽然大家都不太鼓励, 尤其是用了 TypeScript 之后, 但无可否认自动转换很方便, 看上去也很干净. 所以这篇还是要介绍一些 ...
- OData – Custom Serialize & Deserialize
前言 本来计划用 Custom Serialize 来解决 OData 不支持 [JsonPropertyName] 的问题. 但是后来发现 Custom Serialize 并不能解决这个问题. C ...
- laravel中添加公共函数
laravel中添加公共函数 1. 在项目中的新建app/Helper/functions.php文件 2.在项目的跟目录找到composer.json 文件,并打开,然后再autoload中添加如下 ...
- USB总线-Linux内核USB设备驱动之UAC2驱动分析(十)
1.概述 UVC(USB Audio Class)定义了使用USB协议播放或采集音频数据的设备应当遵循的规范.目前,UAC协议有UAC1.0和UAC2.0. UAC2.0协议相比UAC1.0协议,提供 ...
- 深度学习卷积、全连接层、深度可分离层参数量和FLOPs计算公式
来源 卷积: 输入尺寸 ,卷积核的大小为 * ,输出的尺寸大小为 参数量 (1)不考虑bias:(2)考虑bias: FLOPs (1)不考虑bias 解释:先计算输出的中一个元素需要的计算量, ...
- 【官宣】2024 DTC数据技术嘉年华全议程发布:汇聚行业精英,共襄年度盛宴
龙腾四海内,风云际会时.由墨天轮数据社区和中国数据库联盟(ACDU)主办的第十三届数据技术嘉年华 将于2024年4月12日至13日在北京新云南皇冠假日酒店盛大召开.本次大会的主题是"智能·云 ...