Просмотр полной версии : ret2libc проблема с адресом
Danila_N
19.03.2012, 01:24
Всем привет!
Изучаю метод ret2libc и столкнулся с проблемой, которая заключается в адресе функции system().
В Ubuntu 11.10 адрес функции system() такой 0x16db20.
В BackTrack 5 адрес функции system() такой 0xb7ead100.
Если в первый адрес добавить "00" (0x0016db20), программа всё равно падает по ошибке сегментации. Т.е, это не выход.
Во втором случае, программа так же падает по ошибке сегментации по адресу 0x46b7ead1.
Как передать управление на такие адреса (и им подобные)?
Danila_N
19.03.2012, 10:53
Неужели здесь нет специалистов по эксплоитам, способных проконсультировать по данному вопросу?
Danila_N
20.03.2012, 00:31
Очень жаль, что даже здесь нет квалифицированных специалистов.
Спасибо "за помощь", тему можно закрывать.
Га-Ноцри
20.03.2012, 02:08
Segmentation fault? У вас память "потекла".
http://rghost.ru/private/37116159/1db9f50f716c177dc540ba9cb925d0b0/image.png
P.S. А вообще самый лучший способ получить конкретный ответ - это задать конкретный вопрос. Включите фантазию. Здесь нет ясновидящих. И вообще вопрос лучше было бы задать в разделе C++ c конкретными выдержками участка кода, где происходит ошибка сегментации. И, да, в 99.9% случаев это вызвано неправильно манипуляцией с указателями, на мой скромный взгляд.
А ты что хотел найти на форуме "гомосексуалистов"?
Danila_N
20.03.2012, 09:27
Меня интересуют не гомики, а специалисты по эксплоитам.
Проблема в данном случае в нулевых байтах адреса функции system() 0xb7ead100.
При переполнении буфера, адрес возврата переписываем этим адресом 0xb7ead100, но из-за нулевых байтов, переход осуществляется по адресу 0x46b7ead1. Т.к. функция strcpy обрабатывает входную строку, до тех пор, пока не встретит нулевой байт (символ конца строки). Таким образом, функция strcpy просто не копирует последний нулевой байт, считая его концом строки, но это не конец строки, а составляющая часть адреса возврата. По этому осуществляется переход по неверному адресу. Кто его знает, что находится там (0x46b7ead1), вот потому и Segmentation fault.
Если изменить адрес 0xb7ead100 на 0xb7ead101, то выполнится переход по указанному адресу (0xb7ead101).
В общем проблема заключается в нулевых байтах адреса возврата, как передать управление на такой адрес? Как его правильно переписать?
Danila_N
20.03.2012, 22:56
Народ, если никто не может помочь, скажите сразу.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot