Консольное приложение Windows с использованием () ROP эксплойта - PullRequest
3 голосов
/ 17 марта 2012

Я пытаюсь (в учебных целях) воспользоваться уязвимостью функции gets (), используя технику ориентированного на возврат программирования (ROP). Целевая программа - это консольное приложение Windows, которое в какой-то момент запрашивает некоторый ввод, а затем использует get () для сохранения ввода в локальном массиве длиной 80 символов.
Я создал файл, содержащий 80 символов «a» в начале + некоторые дополнительные символы + адрес 0x5da06c48 для перезаписи старого указателя EIP.
Я открываю файл в текстовом редакторе и копирую содержимое в консоль в качестве ввода. Я использовал IDA Pro (или OllyDbg) для установки точки останова сразу после возврата из функции gets () и заметил, что адрес был поврежден - он был установлен на 0x3fa03f48 (две 3f замены).
Я пробовал и другие адреса - часть из них работает хорошо, но в большинстве случаев адрес поврежден (иногда символы отсутствуют или заменены, иногда урезаны).
Как преодолеть эту проблему? Любое предложение будет высоко оценено!

Ответы [ 2 ]

1 голос
/ 08 января 2013

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

0 голосов
/ 11 июля 2012

Прежде всего следите за Endianness вашей платформы. Если вы считаете, что ваши биты находятся в правильном порядке, но вы по-прежнему получаете некорректный ввод, возможно, ваш shell / текстовый редактор не является бинарно-безопасным. Вам лучше написать эксплойт для этого недостатка на языке сценариев, таком как Python, используя библиотеку Subprocess , которая позволяет записывать данные непосредственно в канал stdin произвольного процесса.

...