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,在如下图位置添 ...
随机推荐
- containerd:配置https私有镜像仓库的最新方法
随着containerd应用越来越广泛,我们必须紧跟官网的节奏. 之前配置https私有镜像仓库的方法比较繁琐,并且不易梳理,下边介绍一下目前最新的配置方法. 配置https私有镜像仓库 我假设你现在 ...
- MYSQL数据库备份还原,并还原到最新状态(mysqldump)
启用二进制日志文件 vim /etc/my.cnf 配置文件位置及文件名根据实际情况确定<br>sql_log_bin=on|off:是否记录二进制日志,默认为on 在需要的时候设置为of ...
- 7.22-27MY&MS&ORA等SQL数据库提权
7.22-27MY&MS&ORA等SQL数据库提权 思路:在利用系统溢出漏洞无果情况下,可以采用数据库提权: 前提:数据库服务开启,且获得数据库最高权限账号密码:除Access数据库外 ...
- 【笔记】前端人脸检测之clmtrackr.js的使用
clmtrackr.js使用示例代码 html代码: <div class="video-con"> <video id="video" pl ...
- 小tips:tomcat下JSP页面引用css、js等资源路径404问题
在JSP页面头部添加如下代码: <% String path = request.getContextPath(); String basePath = request.getScheme() ...
- Nodejs+npm详细安装
Nodejs详细安装步骤1.去官网下载nodejs,下载地址:https://nodejs.org/en/download/ 根据自己要求下载,我这里下载的是windows installer的. 2 ...
- freemarker实现导出word复选框可点击效果
记一次java导出word文档,导出的word文档里包含复选框并且能点击,一开始做了个输出字符的,比如这样: □,然而并不能满足需求,网上找了一大堆也都是这种的. 正文开始: 先在word中添加复选框 ...
- iframe嵌套登录页-页面无法加载
背景 活动页面和登录页跨域,过去都是跳转到登录页登录之后再跳转回来,体验不好. 现在需要将登录模块嵌入到活动页,因为懒,不想开发重复的模块,首先我想到的是iframe 刚开始还能正常使用,一段时间后安 ...
- Response状态码
1.数据是否正常 2.文件是否存在 3.地址自动跳转 4.服务提供错误 注:容错处理识别 •-1xx:指示信息-表示请求已接收,继续处理. •-2xx:成功-表示请求已经被成功接收.理解.接受. •- ...
- SD卡的基本知识与选购指南
1.SD卡与TF卡 SD 卡:又叫标准 SD 卡,其尺寸大小为 32 x 24 x 2.1 mm ,一般用于数码相机.声卡和采集卡等设备. TF 卡:又叫 micro SD 卡,其尺寸大小为 15 x ...