中间件安全之Nginx渗透

一、概述

目录结构

gFLtZ6.png

默认情况下,网站主目录是在该文件下的html文件中,但是这里使用小皮进行搭建,根目录重新设置了,可以在\nginx\conf\nginx.conf文件中查看

gFLNdK.png

gFLUIO.png

版本查看

Linux下

gFXyUf.png

二、Nginx漏洞分析及复现

1、文件解析漏洞

文件上传,绕过

0x01 概述

该漏洞是由于Nginxphp配置不当而造成的,Nginx版本无关,但在高版本的php中,由于security.limit_extensions的引入,使得该漏洞难以被成功利用。

在已经上传了恶意1.jpg文件后,访问/1.jpg/xxx.php,(路径修复cgi.fix_pathinfo=1后)使得Nginx将其解析为php文件传给php-cgi程序(传给路径位于_SERVER["SCRIPT_FILENAME"],修复去除路径位于_SERVER["PATH_INFO"]),但cgi程序将其解析为1.jpg并执行。

0x02 环境搭建

使用Win7phpstudy进行搭建复现环境,下载安装即可,切换版本为

gFLxSJ.png

// Nginx版本
C:\phpStudy\PHPTutorial\nginx>nginx -v
nginx version: nginx/1.11.5

IP192.168.112.139

0x03 复现操作

1)创建1.jpg文件

<?php
	phpinfo(); 
?>

2)网站访问该文件

http://192.168.112.139/1.jpg

gFLOFU.png

3)修改访问URI

http://192.168.112.139/1.jpg/xxx.php

gFLXYF.png

成功解析

0x04 漏洞原理分析

Nginx的处理程序和FastCGI处理程序不同导致

Nginx拿到URI/1.jpg/xxx.php后,识别处后缀是.php,认为是php文件,转交给PHP FastCGI处理程序去处理。PHP FastCGI处理程序识别该URI/1.jpg/xxx.php不存在,按照PHP FastCGI处理程序自己的规则,删去最后的/xxx.php,又看/1.jpg存在,就将/1.jpg当成要执行的文件,就成功解析。

Nginx传送给PHP FastCGI处理程序的路径可以在phpinfo中查看【传送路径查看】

gFLoyn.png

cgi.fix_pathinfo为php中的一个选项,默认开启为1,作用为修理路径,也就是对路径URI的处理规则

gFLHe0.png

当php遇到文件路劲为/1.jpg/xxx.php/ss.001时,该文件不存在,会删除最后的/ss.001,再判断/1.jpg/xxx.php是否存在,若存在则将/1.jpg/xxx.php当作/1.jpg/xxx.php/ss.001文件,若不存在,则继续删除最后一个路径。删除的多余路径会存在PATH_INFO中,在这里为ss.001

gFLTLq.png

0x05 参考

文件解析漏洞总结-Nginx

备注:高版本的情况还没复现,高版本PHP提供security.limit_extensions参数,不允许将jpg文件当作php解析

IIS在这一点和Nginx是一样的,同样存在这一问题

2、目录遍历漏洞

0x01 概述

也是类似解析漏洞,是nginx配置问题导致的

0x02 环境搭建

文件解析漏洞环境

0x03 复现操作

1)在网站根目录下创建一个文件夹test

2)访问该文件夹

回显403

gFLbwV.png

3)修改nginx.conf配置文件,访问即可

autoindex off改为autoindex on

gFLqoT.png

0x04 参考

https://www.cnblogs.com/yuzly/p/11208842.html

3、空字节代码执行漏洞

0x01 概述

在使用PHP-FastCGI执行php的时候,URL里面在遇到%00空字节时与FastCGI处理不一致,导致可在非php文件中嵌入php代码,通过访问url+%00.php来执行其中的php代码。如:http://local/robots.txt.php会把robots.txt文件当作php来执行。

影响版本:

nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37

一般需要配合文件上传进行

0x02 复现操作

复现环境信息:

ip:192.168.112.140
Nginx:0.7.65
php:5.3.2

1)开启Nginx

gFORn1.png

2)在网站目录下添加1.jpg文件

gFOW0x.png

3)访问该文件

gFOf76.png

4)抓包,添加%00

这里由于该图非正常,在抓包时最后面添加..,可以让burpsuite抓到

gFOrhF.png

将请求修改为:

/1.jpg..php

gFO61J.png

5)发包即可

gFOyp4.png

4、CRLF注入漏洞

0x01 概述

漏洞成因:Nginx将传入的url进行解码,对其中的%0a%0d替换成换行符,导致后面的数据注入至头部,造成CRLF注入漏洞

环境:

Nginx
php5.2.17

0x02 复现操作

1)设置

设置https跳转,这样就可以接收到url,进而进行处理。在C:\phpStudy\PHPTutorial\nginx\conf\nginx.conf文件中添加下面一行话。

location / { 
	return 302 https://$host$uri;
}

gFOcc9.png

2)构造url,访问

http://192.168.1121.140/%0ASet-cookie:JSPSESSID%3D3

抓包发送

gFOgXR.png

3)恶意利用

%0D%0A%0D%0A%3cscript%3ealert(123)%3c%2fscript%3e

gFOz4S.png

不过这里没有弹窗成功,有相关函数进行了过滤

参考:
https://www.leavesongs.com/PENETRATION/bottle-crlf-cve-2016-9964.html
https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html

5、文件名逻辑漏洞(CVE-2013-4547)

绕过访问限制(目录跨越)、代码执行

0x01 概述

这一漏洞的原理是非法字符空格和截止符(\0)会导致Nginx解析URI时的有限状态机混乱,此漏洞可导致目录跨越及代码执行,其影响版本为:nginx 0.8.41 – 1.5.6

环境:

此次实验在vulhub中复现

0x02 复现操作

1)创建1.jpg 文件,并上传

抓包,在该文件最后添加一个空格

gFXp9g.png

可以看到上传成功

gFOxN8.png

2)访问该文件,burpbuite抓包处理

访问URL:http://192.168.112.111/1.jpg...php

在burp的hex页面中将第一个点.改成20,第二个改为00

gFX93Q.png

发送即可

gFXCcj.png

参考:
CVE-2013-4547 Nginx解析漏洞深入利用及分析_91Ri.org
14.Nginx 文件名逻辑漏洞(CVE-2013-4547) - bmjoker - 博客园 (cnblogs.com)

0x03 解析漏洞小结

这篇文章中介绍了三个解析漏洞

文件解析漏洞		   配置问题
%00解析漏洞			nginx 0.5、0.6、<0.7.65、<0.8.37
空格和截止符解析漏洞 	nginx 0.8.41 – 1.5.6

参考:文件解析漏洞总结-Nginx | 若水斋 (werner.wiki)

6、整数溢出漏洞(CVE-2017-7529)

0x01 概述

在 Nginx 的 range filter 中存在整数溢出漏洞,可以通过带有特殊构造的 range 的 HTTP 头的恶意请求引发这个整数溢出漏洞,并导致信息泄露。

影响程度:

攻击成本:低
危害程度:低
影响范围:Nginx 0.5.6 – 1.13.2

参考:

Nginx 整数溢出(CVE-2017-7529)漏洞分析 (seebug.org)

posted @ 2021-04-29 14:23  labster  阅读(4804)  评论(0编辑  收藏  举报