0
点赞
收藏
分享

微信扫一扫

中间件漏洞渗透与防御

前程有光 2022-04-20 阅读 35

中间件漏洞

1 Apache解析

1.1 漏洞原理

Apache默认一个文件可以有多个以点分割的后缀,当右边的后缀无法时别(不在mime.types规定的后缀名中)时,继续向左识别。

其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,xxx.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

php.ini中有如下语句:

AddType application/x-httpd-php .php

1.2 漏洞利用

1.2.1 源码分析

httpd-php.conf

<FilesMatch "\.php$">
	SetHandler application/x-httpd-php
</FilesMatch>

问题出现在通配符$上,它用来匹配字符串结尾位置

1.2.2 漏洞复现

<?php
if(isset($_FILES['file'])) {
    $name = basename($_POST['name']);
    $ext = pathinfo($name,PATHINFO_EXTENSION);
    if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
        exit('bad file');
    }
    move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
} else {
?>

前端页面如下:

在这里插入图片描述

  • 当用户选择文件并设置好文件名进行上传时,服务器后端就会对文件名进行检验,如果后缀名匹配到黑名单则禁止上传。由源码可知,检验的文件名$name并不是上传的文件名,而是用户设置的文件名。

  • **注意:**这里可以需要使用POST方式上传,因为该方式不会过滤\n

现在上传一个🐎,抓包看一下:

在这里插入图片描述

切换到16进制数据,找到文件名,将后缀修改添加0A

使用蚁剑测试链接成功:

在这里插入图片描述

1.3 漏洞修复

  • 传入文件名时不要使用POST方式,用$_FILES[‘file']['name']函数直接读取。

  • http.confhttpd-vhosts.conf中加入以下语句,从而禁止文件名格式为.php.的访问权限:

    <FileMatch ".(hp.|php3.|php4.|php5.)">
    Order Deny.Allow
    Deny from all
    </FilesMatch>
    
  • 如果需要保留文件名,可以修改程序源代码,替换上传文件名中的".“为”_”:

    $filename = str_replace('.','_',$filename);
    

2 Nginx + PHP CGI解析

2.1 漏洞介绍

当访问域名或IP/xxx.jpg/zzz.php时,如果zzz.php不存在,PHP就会向前解析,如果xxx.jpg存在,就会把其当作PHP文件解析。

2.2 漏洞利用

2.2.1 源码分析

  1. nginx.conf中:

    location ~ \.php($|/) {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        set $script    $uri;
        set $path_info "";
        if ($uri ~ "^(.+\.php)(/.*)") {
            set  $script     $1;
            set  $path_info  $2;
        }
        include       fastcgi_params;
        fastcgi_param SCRIPT_FILENAME   $document_root$script;
        fastcgi_param SCRIPT_NAME       $script;
        fastcgi_param PATH_INFO         $path_info;
    }
    

    通过正则匹配以后, SCRIPT_NAME会被设置为"evil.jpg/gouzao.php", 继而构造成SCRIPT_FILENAME传递给PHP CGI。

  2. PHP的cgi SAPI中的参数, fix_pathinfo,默认值为1,即

    ;该文件截自php.ini
    ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
    ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
    ; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
    ; this to 1 will cause PHP CGI to fix it's paths to conform to the spec.  A setting
    ; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
    ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
    cgi.fix_pathinfo=1
    

    开启后就会触发在PHP中的如下逻辑:

    /*
    * if the file doesn't exist, try to extract PATH_INFO out
    * of it by stat'ing back through the '/'
    * this fixes url's like /info.php/test
    */
    if (script_path_translated &&
        (script_path_translated_len = strlen(script_path_translated)) > 0 &&
        (script_path_translated[script_path_translated_len-1] == '/' ||
    ....//以下省略.
    

    到这里, PHP会认为SCRIPT_FILENAME是evil.jpg, 而gouzao.php是PATH_INFO, 然后PHP就把evil.jpg当作一个PHP文件来解释执行。

2.2.2 漏洞复现

在vulhub中启动nginx路径下的nginx_parsing_vulnerability漏洞,

在这里插入图片描述

在用记事本打开图片aaa.png,在结尾加上一句php代码:

<?=phpinfo();?>

上传成功

在这里插入图片描述

为将图片中的php代码解析,构造urlhttp://192.168.225.138/uploadfiles/eb9fcafce2f193e736c0f60f295b8380.png/.php,解析成功:

在这里插入图片描述

2.3 漏洞修复

  • 在PHP5以下,设置cgi.fix_pathinfo=0;

  • 在PHP5以上,fpm配置里新增了一个额外参数(php-fpm.d/www.conf),
    security.limit_extensions = .php .php3 .php4 .php5 .php7

    专门用来限制PHP脚本引擎只支持解析哪些扩展名的文件

    ; Limits the extensions of the main script FPM will allow to parse. This can
     ; prevent configuration mistakes on the web server side. You should only limit
     ; FPM to .php extensions to prevent malicious users to use other extensions to
     ; execute php code.
     ; Note: set an empty value to allow all extensions.
     ; Default Value: .php
     ;security.limit_extensions = .php .php3 .php4 .php5 .php7
    

    所以在使用nginx+php-fpm时,可以不用修改系统默认的cgi. fix_pathinfo=1设置了。

3 IIS

与Nginx漏洞相同,也是由于cgi.fix_pathinfo=1;导致IIS服务器在解析php文件时会发生漏洞

4 Tomcat

4.1 弱口令

4.1.1 漏洞介绍

4.1.2 漏洞利用

1. 源码分析

启动vulhub的tomcat8靶场后,查看其配置文件

在这里插入图片描述

由此可见,其后台的账号密码未修改,这时可以登录到tomcat的后台ManagerApp

2. 漏洞复现

  1. 先使用暴力破解方式获取登录口令
  • 启动Kali的Msfconsole模块

    msfconsole
    

    在这里插入图片描述

  • 查找与tomcat相关的模块

    search tomcat
    

    在这里插入图片描述

  • 使用auxiliary/scanner/http/tomcat_mgr_login模块,查看需要填写哪些参数

    use auxiliary/scanner/http/tomcat_mgr_login
    show options
    ```![在这里插入图片描述](https://img-blog.csdnimg.cn/bc50aed7ee024c9eb228c78e5cfb9d73.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARmlzcnRCcXk=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
    
    
    
  • rhosts设置为目标机(这里不区分大小写)

    set rhosts 192.168.225.138
    

    在这里插入图片描述

  • 开始爆破

    run
    

    在这里插入图片描述

    其中带有绿色+的即为爆破成功的口令。

  1. 这时发现可以上传.war文件

    在这里插入图片描述

  2. 使用冰蝎构造🐎连接即可。

4.1.3 漏洞修复

  • 更改口令,提高强度🙄

  • 对密码暴力猜解行为进行图灵验证,一旦发现用户口令破解行为及时对账户进行限时封停处理。

  • 下载最新无漏洞版本

4.2 PUT上传

4.2.1 漏洞介绍

4.2.2 漏洞利用

1. 源码分析

  • 与上节同一目录下的配置文档中对readonly描述如下:

    <!--   readonly            Is this context "read only", so HTTP           -->
    <!--                       commands like PUT and DELETE are               -->
    <!--                       rejected?  [true]                              -->
    
  • 所以在其中添加参数,使得PUT方法可以使用:

    <init-param>
        <param-name>readonly</param-name>
        <param-value>false</param-value>
    </init-param>
    

2. 漏洞复现

  • web.xml中添加readonly参数并赋值为false。
  • 重启tomcat服务,利用burp抓包,修改请求方式为PUT /上传的文件名.jsp/,在结尾添加一句话。
  • 上传成功即可。

4.2.3 漏洞修复

配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启tomcat。

5 weblogic弱口令

5.1 漏洞介绍

与tomcat弱口令类似,Weblogic版本:10.3.6(11g)

5.2 漏洞利用

  1. 启动vulhub中的weblogic→weak_password靶场,在浏览器中输入ip:7001/console查看页面

    在这里插入图片描述

  2. 使用弱口令登录

    用户名口令
    systempassword
    adminsecurity
    joepassword
    marypassword
    systemsecurity
    wlcsystemwlcsystem
    wlpisystemwlpisystem
    weblogicOracle@123
  3. 上传文件

    在这里插入图片描述

    点击上载文件:

    首先生成.war

    jar -cvf ceshi.war jsp_custom_script_for_oracle.jsp
    

    点击下一步直至完成。

    浏览器中访问该文件,出现以下页面即可使用工具连接。
    在这里插入图片描述

5.3 漏洞修复

  • 更改口令,提高强度🙄

  • 对密码暴力猜解行为进行图灵验证,一旦发现用户口令破解行为及时对账户进行限时封停处理。

  • 下载最新无漏洞版本

举报

相关推荐

0 条评论