2013-03-08 3 views
0

Мне нужно сделать удаленный эксплойт переполнения буфера для класса. Я понимаю МОСТ. Это связано с переписыванием адреса возврата main, поэтому я могу выполнить свой собственный код. Но мы никогда не рассматривали, как найти местоположение адреса возврата в памяти ... я получаю это неправильно и эксплуатируют не работает :(Как найти, где в стеке находится адрес возврата main()?

Я сижу в БГД и у меня есть адрес моего буфера (0xbffff3dc)

Теперь, мне нужно, чтобы выяснить, где в стеке адрес возврата сидит (так что я могу узнать смещение между ним и моим буфером).

Тогда я буду знать, как много места Я должен добавить:

  • a NOP (0x90) «санки»
  • мой шеллкод
  • еще NOPs ???
  • адрес для моего буфера (переписывающий обратный адрес)
  • "\ r \ n" ???

^Я не уверен, помечены ли вещи «???» полностью необходимы.

ответ

1

Возможно, вы можете использовать objdump.

просто попробовать objdump -d your-executable и это даст вам сборочный код, а также адрес

+0

Это полезно для адресов коды, но не место, где адрес возврата основных хранятся в стеке. Вот что я нашел с помощью 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

+0

в стеке вызовов, да. – zzk

+0

Просто альтернативный запуск 'gdb' и' disas function'. Можно указать, какую функцию вы хотите отключить –

Смежные вопросы