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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2024-30051 — Магистерское исследование CVE-2024-30051 (переполнение кучи в Windows DWM). Отличается высоконадежным эксплойтом с автоматической оптимизацией heap spray, ведением журнала в реальном времени и эмпирическим анализом частоты успеха. Портфолио, демонстрирующее продвинутую эксплуатацию двоичных файлов Windows, манипулирование компоновкой кучи и LPE через Desktop Window Manager. | Kitploit
Инструменты/GitHubGitHub/devianntsec/cve-2024-30051
Повышение привилегийКриминалистика памятиАнализ уязвимостейЭксплуатацияОбратная инженерияСтатьи и ИсследованияОбучение и ОбразованиеРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов

Популярное

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

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

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

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

Смотреть все инструменты →

Описание

Магистерское исследование CVE-2024-30051 (переполнение кучи в Windows DWM). Отличается высоконадежным эксплойтом с автоматической оптимизацией heap spray, ведением журнала в реальном времени и эмпирическим анализом частоты успеха. Портфолио, демонстрирующее продвинутую эксплуатацию двоичных файлов Windows, манипулирование компоновкой кучи и LPE через Desktop Window Manager.

GitHubdevianntsec/cve-2024-30051

CVE-2024-30051

Репозиторий
1124 месяцев назадЕщё не проверено
Поделиться

CVE-2024-30051 — Windows DWM Heap Overflow EoP · Исследование магистерской диссертации

Platform Language License: MIT Research CVSS

Heap-based Buffer Overflow в Windows Desktop Window Manager (dwmcore.dll)
Локальное повышение привилегий → Уровень целостности SYSTEM через процесс DWM
Целевая сборка: Windows 11 22H2 (10.0.22621.3447) · Патч: KB5037771


Описание

Этот репозиторий содержит моё исследование магистерской диссертации по CVE-2024-30051, уязвимости повышения привилегий высокой степени серьезности (CVSS 7.8) в основной библиотеке диспетчера окон Windows (dwmcore.dll).

Уязвимость возникает из-за ошибки вычисления размера при целочисленном делении в CCommandBuffer::Initialize. Размер, используемый для new(), и размер, используемый для memcpy(), расходятся из-за этой ошибки, что приводит к переполнению кучи на 0x8F байт. Успешная эксплуатация заставляет dwm.exe загрузить управляемую злоумышленником DLL, выполняя произвольный код под учетной записью window manager\dwm-1 с уровнем целостности SYSTEM.

Мой вклад

АспектОписание
Patch diffingПолный анализ BinDiff с идентификацией CCommandBuffer::Initialize как точного локуса уязвимости (оценка схожести 0.32 против глобальной 0.98 по 14 062 сопоставленным функциям)
Динамический анализ WinDbgПошаговая верификация всех 4 хуков, перезаписи поля размера и конструирования полезной нагрузки
Эмпирический анализ heap spray50 контролируемых сессий в двух конфигурациях ОЗУ (8 192 МБ и 4 096 МБ) с формальными статистическими тестами
Статистические выводыU-критерий Манна-Уитни (p = 0.031) и t-критерий Уэлча (p = 0.011) подтверждают влияние ОЗУ; наблюдаемые средние значения в 12.9–19 раз лучше теоретического прогноза ~64 попыток
Централизация пути DLL полезной нагрузкиИзвлечен жестко заданный путь в константу препроцессора #define PAYLOAD_DLL_PATH
Журналирование сессийПолный журнал с метками времени для каждой сессии записывается в %TEMP%\cve_30051_log.txt
Академическая документацияПервопричина, анализ heap spray за 50 сессий и временная шкала CVE

Структура репозитория

CVE-2024-30051-Masters-Thesis/
├── README.md
├── LICENSE
├── setup.bat                        # Копирует s11.dll в требуемое расположение
│
├── exploit/
│   ├── C21.sln                      # Решение Visual Studio 2022
│   ├── exploit_src/
│   │   ├── c26f.vcxproj
│   │   ├── c26f.filters
│   │   └── main.cpp                 # Эксплойт — heap spray + хукинг + переполнение
│   └── payload/
│       ├── payload.vcxproj
│       ├── payload.vcxproj.filters
│       ├── dllmain.cpp              # DLL полезной нагрузки — запуск оболочки SYSTEM + очистка
│       ├── framework.h
│       ├── pch.h
│       └── pch.cpp
│
└── docs/
    ├── screenshots/                 # Снимки patch diffing, WinDbg и криминалистические копии
    └── analysis/
        ├── 01-root-cause.md         # Ошибка целочисленного деления в CCommandBuffer::Initialize
        ├── 02-heap-spray.md         # Эмпирические данные 50 сессий и статистические выводы
        └── 03-timeline.md           # Хронология обнаружения, раскрытия и патча

Быстрый старт

Предварительные требования

  • Windows 11 22H2 (сборка 22621.3447, без патча — без KB5037771)
  • Visual Studio 2022 с рабочей нагрузкой C++ Desktop
  • ВМ с моментальным снимком рекомендуется (требуется для воспроизводимости состояния кучи)

Шаг 1 — Сборка DLL полезной нагрузки

Откройте C21.sln в Visual Studio 2022. Соберите проект payload в конфигурации Release x64.

Шаг 2 — Размещение DLL

Запустите setup.bat из корня репозитория. Он копирует s11.dll в C:\Users\Public\Documents\s11.dll (путь, определенный PAYLOAD_DLL_PATH).

⚠️ DLL обязательно должна находиться по этому точному пути перед запуском C26f.exe. Размещение рядом с исполняемым файлом не сработает.

Шаг 3 — Сборка эксплойта

Соберите проект C26f в конфигурации Release x64.

Шаг 4 — Запуск

x64\Release\C26f.exe

Запускайте из стандартной (не повышенной привилегиями) командной строки. Эксплойт автоматически повторяет попытки до 10 раз. В случае успеха dwm.exe загружает s11.dll и запускает командную строку с уровнем целостности SYSTEM. Журнал сессии записывается в %TEMP%\cve_30051_log.txt.


Конфигурация эксплойта

#define MAX_ATTEMPTS        10      // Максимум автоматических повторных попыток за сессию
#define SPRAY_STEP          0x10    // Индекс шага для дырок (1024 дырки)
#define SPRAY_RANGE_START   0x3000  // Начальный индекс диапазона распыления
#define SPRAY_RANGE_END     0x7000  // Конечный индекс диапазона распыления
#define SLEEP_POST_SPRAY    0xC8    // Ожидание в мс после распыления (200 мс)
#define SLEEP_POST_HOLES    0xC8    // Ожидание в мс после освобождения дырок (200 мс)
#define PAYLOAD_DLL_PATH    "C:\\Users\\Public\\Documents\\s11.dll"

Технический обзор

Первопричина уязвимости

В CCommandBuffer::Initialize (dwmcore.dll 10.0.22621.3447) CD2DSharedBuffer::GetBufferSize вызывается дважды. Размер, передаваемый в new(), подвергается целочисленному делению на 0x90 перед умножением, в то время как memcpy() использует исходное значение:

buffer_size = GetBufferSize()   → например 0x23F

size_new    = (0x23F / 0x90) * 0x90  = 0x1B0   ← выделено
size_memcpy = 0x23F                             ← скопировано

overflow    = 0x23F - 0x1B0 = 0x8F байт

Результаты patch diffing

Сравнение BinDiff между сборками 10.0.22621.3447 (уязвимая) и 10.0.22621.3593 (исправленная):

МетрикаЗначение
Глобальное сходство0.98
Уверенность0.99
Сопоставленные функции14 062 (99.1%)
Сходство CCommandBuffer::Initialize0.32
Базовых блоков — уязвимая версия4
Базовых блоков — исправленная версия20 (добавлено 16 блоков проверки)

Аномальная оценка 0.32 на фоне глобального сходства 0.98 является прямой сигнатурой локуса уязвимости.

Цепочка эксплуатации

1. Хук RtlCreateHeap                → перехватить дескриптор кучи dwmcore
2. Хук RtlAllocateHeap              → перехватить адрес базового блока
3. Хук NtDCompositionCreateChannel  → перехватить MappedAddress (разделяемая область памяти)
4. Хук NtDCompositionCommitChannel  → перезаписать поле размера (0x120 → 0x23F)
                                      внедрить дополнительные команды пакета
5. Heap spray 0x10000 объектов CHolographicInteropTexture (размер=0x1B0)
6. Освободить дырки через каждые 0x10 индексов → создать промежутки для попадания переполнения
7. Записать полезную нагрузку в буфер переполнения → KCBTable+0x388 + LoadLibraryA + путь DLL
8. Освободить все объекты распыления    → вызвать переполнение → LoadLibraryA("s11.dll")
9. dwm.exe загружает DLL полезной нагрузки → запускает командную строку с целостностью SYSTEM

Эмпирический анализ heap spray (50 сессий)

Исследовательский вопрос

Влияет ли доступный объем ОЗУ на количество попыток, необходимых для успешного heap spray?

Дизайн эксперимента

Два блока по 25 сессий каждый. Протокол на сессию: восстановление чистого моментального снимка после загрузки → ожидание 100 секунд для стабилизации → запуск эксплойта → запись попытки успеха.

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