
20.03.2012, 09:27
|
|
Новичок
Регистрация: 18.03.2012
Сообщений: 5
С нами:
7448726
Репутация:
0
|
|
Меня интересуют не гомики, а специалисты по эксплоитам.
Проблема в данном случае в нулевых байтах адреса функции system() 0xb7ead100.
При переполнении буфера, адрес возврата переписываем этим адресом 0xb7ead100, но из-за нулевых байтов, переход осуществляется по адресу 0x46b7ead1. Т.к. функция strcpy обрабатывает входную строку, до тех пор, пока не встретит нулевой байт (символ конца строки). Таким образом, функция strcpy просто не копирует последний нулевой байт, считая его концом строки, но это не конец строки, а составляющая часть адреса возврата. По этому осуществляется переход по неверному адресу. Кто его знает, что находится там (0x46b7ead1), вот потому и Segmentation fault.
Если изменить адрес 0xb7ead100 на 0xb7ead101, то выполнится переход по указанному адресу (0xb7ead101).
В общем проблема заключается в нулевых байтах адреса возврата, как передать управление на такой адрес? Как его правильно переписать?
|
|
|