• 中间件安全之Nginx渗透


    一、概述

    目录结构

    gFLtZ6.png

    默认情况下,网站主目录是在该文件下的html文件中,但是这里使用小皮进行搭建,根目录重新设置了,可以在 ginxconf ginx.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:phpStudyPHPTutorial
    ginx>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:phpStudyPHPTutorial ginxconf ginx.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 概述

    这一漏洞的原理是非法字符空格和截止符()会导致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)

  • 相关阅读:
    服务器运行jupyter,本地浏览器打开
    转载--对batch normalization的理解
    Deep Neural Networks for YouTube Recommendations YouTube的经典推荐框架
    IFrame与window对象(contentWindow)
    vue之watch的理解
    关于npm
    简单的输入法效果(类似百度输入时候的智能检索)
    Js屏蔽网页复制,不能使用右键菜单,禁止复制网页内容,不能选中内容,右键不让用,无法拖拽选择,这么多功能,用JS一句代码就搞定了
    移动端关于计算rem的flexible.js
    解决安卓手机在input获取焦点时候固定定位元素被输入键盘给顶到顶部
  • 原文地址:https://www.cnblogs.com/labster/p/14717805.html
Copyright © 2020-2023  润新知