Мне нужно сделать удаленный эксплойт переполнения буфера для класса. Я понимаю МОСТ. Это связано с переписыванием адреса возврата main, поэтому я могу выполнить свой собственный код. Но мы никогда не рассматривали, как найти местоположение адреса возврата в памяти ... я получаю это неправильно и эксплуатируют не работает :(Как найти, где в стеке находится адрес возврата main()?
Я сижу в БГД и у меня есть адрес моего буфера (0xbffff3dc)
Теперь, мне нужно, чтобы выяснить, где в стеке адрес возврата сидит (так что я могу узнать смещение между ним и моим буфером).
Тогда я буду знать, как много места Я должен добавить:
- a NOP (0x90) «санки»
- мой шеллкод
- еще NOPs ???
- адрес для моего буфера (переписывающий обратный адрес)
- "\ r \ n" ???
^Я не уверен, помечены ли вещи «???» полностью необходимы.
Это полезно для адресов коды, но не место, где адрес возврата основных хранятся в стеке. Вот что я нашел с помощью GDB: - 1-й вар в основной @ \t 0xbffff384 - список аргументов \t @ \t 0xbffff798 - ARGV \t \t @ \t 0xbffff834 - местные жители \t @ \t 0xbffff798 - предыдущий кадр \t @ \t 0xbffff7a0 - ЕВР \t \t = \t 0xbffff798 - ОПЗ \t \t = \t 0xbffff79c Обратный указатель должен сидеть прямо перед EBP? – Robert
в стеке вызовов, да. – zzk
Просто альтернативный запуск 'gdb' и' disas function'. Можно указать, какую функцию вы хотите отключить –