CVE-2021-41773漏洞复现完整过程

1.安装debian系统

首先我选择的系统是debian10版本,也可以在别的系统完成复现,我想一个纯净版,所有重新安装了一个系统,安装步骤简单展示一下。

1.创建虚拟机,点击下一步。

CVE-2021-41773漏洞复现完整过程_第1张图片

导入镜像

CVE-2021-41773漏洞复现完整过程_第2张图片

自己选安装的位置以及虚拟机的名称。

CVE-2021-41773漏洞复现完整过程_第3张图片CVE-2021-41773漏洞复现完整过程_第4张图片

安装过程需要设置管理员密码和新建一个用户,自己设置一下就可以了

CVE-2021-41773漏洞复现完整过程_第5张图片CVE-2021-41773漏洞复现完整过程_第6张图片CVE-2021-41773漏洞复现完整过程_第7张图片

这里选择了第二个。

CVE-2021-41773漏洞复现完整过程_第8张图片

 因为之前我们选择了lvm,那么这里选择是就可以了

CVE-2021-41773漏洞复现完整过程_第9张图片CVE-2021-41773漏洞复现完整过程_第10张图片CVE-2021-41773漏洞复现完整过程_第11张图片CVE-2021-41773漏洞复现完整过程_第12张图片

因为我们需要一个简单系统,所有只选择了下面三个安装软件

CVE-2021-41773漏洞复现完整过程_第13张图片CVE-2021-41773漏洞复现完整过程_第14张图片

 

CVE-2021-41773漏洞复现完整过程_第15张图片

中间少的部分就是一直点击继续就可以了,最后安装好了。

 2.下载靶场,首先找到虚拟终端,打开终端。

CVE-2021-41773漏洞复现完整过程_第16张图片

2.下载靶场、docker以及docker-compose

 首先需要安装git命令,这样我们利用git命令下载靶场CVE-2021-41773漏洞复现完整过程_第17张图片

 下载好git,输入命令下载靶场,靶场地址https://github.com/vulhub/vulhub 如果和下面一样出现错误,就将命令https换成git就可以啦。

CVE-2021-41773漏洞复现完整过程_第18张图片

 下载完成以后,可以自己查看一下。CVE-2021-41773漏洞复现完整过程_第19张图片

 接下来安装docker和docker-compose

CVE-2021-41773漏洞复现完整过程_第20张图片

 CVE-2021-41773漏洞复现完整过程_第21张图片

 下载完成以后可以进入CVE-2021-41773查看readme.zh-cn.md 查看中午,里面会有该漏洞的提示和一些playload.

CVE-2021-41773漏洞复现完整过程_第22张图片

3.漏洞复现

 现在我们输入命令开始启动环境。

CVE-2021-41773漏洞复现完整过程_第23张图片

CVE-2021-41773漏洞复现完整过程_第24张图片

 环境启动以后,我们按照提示访问自己的IP地址8080端口,这个时候我们需要查看自己的ip地址,会发现ifconfig不行,需要输入apt install net-tools 安装工具,这样就可以使用ifconfig

CVE-2021-41773漏洞复现完整过程_第25张图片

 得到ip地址可以在本机浏览器访问http://ip:8080,看到it's work,就代表可以了

CVE-2021-41773漏洞复现完整过程_第26张图片

 现在我们就可以构造playload ,记得回到根目录执行代码

CVE-2021-41773漏洞复现完整过程_第27张图片

 可以看到成功读取了passwd文件内容。也可以读取adduser.conf,其他文件需要自己试试了。CVE-2021-41773漏洞复现完整过程_第28张图片

 在服务端开启了cgi或cgid这两个mod的情况下,这个路径穿越漏洞将可以执行任意命令:

```
curl -v --data "echo;id" 'http://your-ip:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh'
```

CVE-2021-41773漏洞复现完整过程_第29张图片

4.漏洞的条件

穿越的目录允许被访问,比如配置了`Require all granted`。(默认情况下是不允许的)

5.漏洞产生的原理

Apache HTTP Server 2.4.49版本使用的ap_normalize_path函数在对路径参数进行规范化时会先进行url解码,然后判断是否存在../的路径穿越符

当检测到路径中存在%字符时,如果紧跟的2个字符是十六进制字符,就会进行url解码,将其转换成标准字符,如%2e通过url解码之后是一个点(.)对于路径的url解码之后再来判断是否存在../。

如果路径中存在%2e./形式,就会检测到,因为遍历第一个字符是%紧跟2个字符是十六进制那么会被转换成点,这样会和后面的./就会连成../,这样就会被拦截。但是出现.%2e/这种形式时,在遍历到第一个.字符时,此时检测到后面的两个字符是%2而不是./,就不会把它当作路径穿越符处理,也就是说在检测之后%2e进行了转换变成了../。因此可以使用.%2e/或者%2e%2e绕过对路径穿越符的检测。

参考文章:【安全漏洞】CVE-2021-41773和CVE-2021-42013漏洞分析 - 简书(里面有详细过程,大家可以参考)

6.修复建议

增加ap_normalize_path函数的判断条件,对于.%2e或者%2e%2e进行判断,避免绕过


 

你可能感兴趣的:(c++)