![]() |
Вопросы: buffer overflow
Итак, купил вумную книжку "The Shellcoders Handbook: Discovering and Exploiting Security Holes". Пытаюсь разобраться с примерами из книжки на практике. Возникла проблема с первым же примером.
PHP код:
Потом (если я прав), смотрю результат дизассемблирования функции return_input(), для того, чтобы понять сколько места резервируется в стеке, вижу: Код:
0x08048594 <return_input+0>: push %ebpВ общем пишу программулинку, которая тупо переписывала бы адреса: PHP код:
Смотрю состояние регистров, ebp переписался значением 0x8048594, а в eip лежит 0x1. Почему? Что я не так делаю? |
Цитата:
(Потрейсил ща олькой и убедился, что это и правда так. У тебя, правда, никсы, но вроде ничего меняться не должно тут) |
Даже в таком случае, как я понимаю, eip должен переписаться на нужное мне значение, т.к. я просто переписываю лишнее.
|
Хм.. ну я составил шеллкод, который вырубает уязвимую программу. (под вин32)
char shellcode[] = "111111111111111111111111111111111111\x34\xff\x13\ x00" "\xe8\xa1\xce\x6d\x7c"; 0013FF34 - адрес места в стеке, сразу после этих четырех байт E8A1CE6D7C - код по адресу 0013FF34 - вызов ExitProcess: E8 A1CE6D7C CALL kernel32.ExitProcess |
а у кого нить в электронке есть эта книга?
|
Цитата:
|
Цитата:
Работает на ура :) А разве перезапись других данных кадра стека может за собой повлечь такое изменение EIP? че-та я в твою мысль не врубил%) |
сплоит: 0000000000000000000000000000000000(Alt+251)(Alt+18 )@
Если у кого есть в электронном варианте скинте плиз, тоже интерестно почитать |
Я б тоже почитал. Ни разу ее не видел
|
_http://slav0nic.xss.ru/books/hack_sec/THE%20SHELLCODER'S%20HANDBOOK.zip
+ сорсы к книге внутри. |
2Go0o$E, Спасибо, за книжку...
Кстате немного поигрался, и вот что получилось :), это врядли было задуманно ;) 1└PГь&PН|$$WWPИG∙ш4r-AAAAAAAhiddenN(Alt+255)(Alt+18) |
Хмм.. ну а как тогда узнать точно по дизассемблированной функции сколько места в стеке под массив резервируется?
Код:
0x08048597 <return_input+3>: sub $0x28,%espКогда я начинаю переписывать с 36го байта по 40й, ни eip ни ebp не переписываются. И ещё вопрос, перенаправил вывод с програмки которая генерирует строку ввода в файл "(./a.out : cat) > 1.txt" В конце файла откудато взялись байты "01 0A", откуда они взялись? З.Ы. Книжку я купил на русском языке в магазине "буквоед" в Питере (рядом с м. Площадь Восстания за 830 руб), на озоне вроде тоже продаётся, но блин дорогая. |
Ты знаешь, я не знаю откуда ты взял эти значения и темболее не понимяю, как ты помещаешь разницу константы и esp обратно в константу.
Код:
0x08048597 <return_input+3>: sub $0x28,%espКод:
004012D4 >/$ 55 PUSH EBP |
Цитата:
GDB поддерживает синтаксис AT&T, а OllyDbg синтаксис Intel. По сути sub $0x28,%esp в записи AT&T эквивалентно sub esp, 28 в Intel. В синтаксисе AT&T операнды пишутся как "источник, приёмник", а в Intel наоборот + есть ещё кое какие различия. |
Цитата:
Цитата:
Цитата:
|
Прошу разъяснить мне на пальцах. Написал небольшую програмку на си
Код:
#include "stdio.h"Код:
#include "stdlib.h"Работает нормально, т.е вывод spyder@l33t:~/c> ./eip text AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA?? text Теперь хочу передать управление шеллкоду. Вот тут я немогу понять. Где то пишут что нужно передать управление коду jmp esp. Вопрос1 - Где мне взять его, система nix. Так же пишут что шеллкод нужно передавать сразу после адреса возврата или до него, заполняя остальное место в буфере нопами, в таком случае как узнать адрес куда мне нужно передать управление? Читал статьи, вникнуть немогу Заранее спасибо |
Cылка битая. Вот на русском http://letitbit.net/download/fd46de141051/iskustvo-vzloma-i-zashitu-system.rar.html
|
| Время: 07:19 |