
SEH-переполнение буфера в Easy File Sharing Web Server 7.2, доступное через конечную точку восстановления пароля.
Переполнение буфера на основе SEH в Easy File Sharing Web Server 7.2, доступное через конечную точку восстановления пароля.
Этот репозиторий создан как часть материалов, которые я использую при обучении исследованию уязвимостей и разработке эксплойтов, особенно при введении в концепцию переполнений SEH (Structured Exception Handler) и цепочек ROP (Return-Oriented Programming).
Он связан с моим докладом "The Path That Leads to Your First CVE". В этом докладе я объясняю, что существуют разные точки входа в исследование уязвимостей, и что изучение публично задокументированных CVE в устаревшем ПО — один из самых доступных путей для новичков.
Этот CVE был выбран, потому что он демонстрирует полный и реалистичный сценарий эксплуатации:
Цель — использовать этот случай как ступеньку между вводными упражнениями по переполнению буфера и более продвинутыми концепциями разработки эксплойтов.
Эта уязвимость затрагивает Easy File Sharing Web Server 7.2 — лёгкое Windows-приложение для веб-сервера, которое широко использовалось для простого обмена файлами. ПО было написано без учёта современных средств защиты. Что делает этот случай особенно интересным с точки зрения обучения — это комбинация вовлечённых факторов:
Эта комбинация делает CVE-2025-34096 отличным примером для обучения техникам разработки эксплойтов в реалистичном сценарии неаутентифицированной атаки.
Easy File Sharing Web Server 7.2 — это лёгкое Windows-приложение, созданное для обмена файлами по HTTP. Помимо базового просмотра файлов и учётных записей пользователей, оно включает функцию восстановления пароля — форму, которая позволяет пользователям вводить свой адрес электронной почты для получения забытых учётных данных.
Эта форма отправляет POST-запрос к /sendemail.ghp. Обработчик, который обрабатывает поле Email, копирует значение напрямую в буфер стека фиксированного размера без проверки длины. Конечная точка не требует аутентификации, поэтому ничто не мешает удалённому атакующему достичь уязвимого пути кода.
Ключевые технические детали:
Easy File Sharing Web Server обрабатывает HTTP POST-запросы, направленные к /sendemail.ghp, как часть функции уведомлений по электронной почте. Параметр Email, принимаемый этой конечной точкой, копируется в локальный буфер стека без какой-либо проверки длины.
Упрощённая версия уязвимой логики выглядит так:
char email_buffer[256];
strcpy(email_buffer, user_input);
Поскольку целевой буфер имеет фиксированный размер, а длина ввода не проверяется, отправка достаточно длинной строки в поле Email приводит к тому, что копирование записывает данные за пределами буфера.
По мере записи большего количества данных макет стека повреждается. В отличие от простой перезаписи адреса возврата, переполнение достигает цепочки Structured Exception Handler (SEH), хранящейся в стеке. Когда в результате повреждённого стека возникает исключение, ОС проходит по цепочке SEH и передаёт управление на адрес обработчика, контролируемый атакующим.
Таким образом, поток эксплуатации следует технике перезаписи SEH:
Это делает уязвимость более сложной для эксплуатации, чем базовое перезапись EIP, но также и более показательной для реальных сценариев.
Сбой можно воспроизвести, отправив длинную строку в параметре Email POST-запроса к /sendemail.ghp. Аутентификация не требуется. Пример с использованием Python:
import socket
HOST = '127.0.0.1'
PORT = 80
request = (
'POST /sendemail.ghp HTTP/1.1\r\n'
'Email=' + 'A' * 5000 + '&getPassword=Get+Password'
).encode('utf-8')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
При выполнении под отладчиком сбой показывает повреждённую цепочку SEH и нарушение доступа, подтверждая, что контролируемые атакующим данные перезаписали указатель обработчика исключений.
Цель этого репозитория — не только продемонстрировать сбой, но и шаг за шагом провести через полный процесс эксплуатации, следуя методологии, используемой при разработке реальных эксплойтов на основе SEH.
Чтобы сохранить основной README чистым, подробные заметки по эксплуатации, скрипты и шаги отладчика размещены в папке Vulnerability 📂 этого репозитория.
Там вы найдёте полный рабочий процесс, используемый для эксплуатации этого CVE, включая: