
22.09.2009, 18:56
|
|
Участник форума
Регистрация: 27.10.2008
Сообщений: 215
С нами:
9230381
Репутация:
90
|
|
Переполнение буфера
Решил попрактиковаться в переполнении буфера. Накатал быстренько уязвимую программу. При передаче такого аргумента `perl -e 'print "A"x100'` в отладчике gdb выдаёт:
Starting program: /home/inflame/prog `perl -e 'print "A"x100'`
Program received signal SIGSEGV, Segmentation fault.
0x08048407 in main()
Вывод команды i r:
eax 0x0 0
ecx 0x41414141 1073745396
edx 0x0 0
ebx 0x4016e800 1075243008
esp 0x4141413d 0x4141413d
ebp 0x41414141 0x41414141
esi 0x40016640 1073833536
edi 0x8048510 134513936
eip 0x8048407 0x8048407 <main+99>
...
Тогда как, на сколько я понимаю, регистр eip должен быть перезаписан на 0x41414141. Но такого не происходит и передать управление на шелл-код не удаётся.
В чём проблема?
Уязвимая программа:
Код:
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
char buf[10];
if (argc > 1)
strcpy(buf, argv[1]);
return 0;
}
Дистрибутив Mandriva 2009.1
Компилятор gcc 4.3.2
Последний раз редактировалось InFlame; 23.09.2009 в 08:28..
|
|
|