|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.11.2011, 00:39 | #1 |
Новичок
Джуниор
Регистрация: 14.11.2011
Сообщений: 4
|
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets
Здравствуйте!
Помогите решить такую задачу: Нужно подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функцию gets. Код:
Последний раз редактировалось dmitrii6120; 14.11.2011 в 00:43. |
14.11.2011, 01:03 | #2 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
А зачем тебе? )
Сначала почитать какую-то статью о том, что вообще такое 'переполнение буфера'. Из нее понять, что адрес, которым нужно подменять, зависит от компилятора, версии операционной системы, ее настроек, прочего окружения. Узнать, каким будет этот адрес на целевой системе, воспользовавшись отладчиком (если к ней есть доступ) или установив аналогичное окружение в виртуальной машине; если точно узнать по той или иной причине не удается - подбирать его экспериментально. Узнать, какое расстояние будет от буфера до адреса возврата в стеке у нужного бинарного файла (оно от компилятора и его ключей зависит, в частности). И только тогда сесть и составить строку, которую нужно передать в gets, зная эти две величины. |
14.11.2011, 01:44 | #3 |
Новичок
Джуниор
Регистрация: 14.11.2011
Сообщений: 4
|
при прогоне программы которая ниже:
если ввести 12 символов - напр "111122223333" прога виснет - значит я порчу адрес возврата функции. здесь "1111" уже заполнили buf полностью. далее 2222 затирает значение EBP. ну а остальные "3333" портят уже адрес возврата функции func. дак вот что мне писать после "11112222" (если после них уже идёт адрес возврата, я даже адрес функции f вычислил - 0x40138c), а точнее как записать адрес 0x40138c в строку после "11112222"? про переполнение буфера читал здесь: http://www.codenet.ru/progr/asm/overflow.php Код:
|
14.11.2011, 02:19 | #4 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Записать этот адрес символами, помня о том, что архитектура x86 является little-endian. Символ с кодом 8c, символ с кодом 0x13 и символ с кодом 0x40.
|
14.11.2011, 18:16 | #5 |
Новичок
Джуниор
Регистрация: 14.11.2011
Сообщений: 4
|
получилось. вся проблема бы в символе с кодом 0, я в место него лепил пробел поэтому и вылетало.
|
14.11.2011, 19:08 | #6 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Он там не нужен фактически, в конце строки же автоматически добавляется.
Кстати, рекомендую книжку "hacking: the art of exploitation, second edition". Там такие базовые вещи объясняются буквально на пальцах. |
14.11.2011, 20:10 | #7 |
Новичок
Джуниор
Регистрация: 14.11.2011
Сообщений: 4
|
так то да. но если просто писать в файл то там не будет этого символа и файл будет весить 3 байт. так что запилил небольшую програмку вывел адрес задом наперёд с символом с кодом ноль (файл 4 байта весить - ок). ну и добавил потом к другому файлу эту строку и всё ок.
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Получить адрес функции в классе | coNsept | Общие вопросы C/C++ | 3 | 02.03.2011 02:43 |
как правильно прописать адрес в функции? (формула) | coldis | Microsoft Office Excel | 3 | 18.02.2009 09:47 |
Адрес и размер функции | Ivan_32 | Общие вопросы C/C++ | 3 | 11.02.2009 19:58 |
как определить адрес значения, полученного с помощью функции ВПР? | profik777 | Microsoft Office Excel | 5 | 21.11.2008 14:59 |
адрес не активной ячейки при вызове функции | skachkovgd | Microsoft Office Excel | 4 | 06.12.2007 09:50 |