Я пытался реализовать атаку переполнения буфера в программе ниже, isThisGood.c, используя входные данные, см. Gets (). Без изменения программы. Создавая злонамеренный ввод, который приводит к успешной эксплуатации. Успешный эксплойт вызывает функцию oopsIGotToTheBadFunction, хотя эта функция явно не вызывается в isThisGood.c! Я читал о них, но кажется, что во всех примерах используется scanf или strcpy ()
Вот что я пробовал:
cc -ggdb isThisGood.c
gdb a.out
break goodFunctionUserInput
Breakpoint 1 at 0x4007ec: file isThisGood.c, line 13.
(gdb) run
Breakpoint 1, goodFunctionUserInput () at isThisGood.c:13
13 gets(buf);
(gdb) backtrace
#0 goodFunctionUserInput () at isThisGood.c:13
#1 0x0000000000400824 in main () at isThisGood.c:19
print /x *buf@40
$1 = {0x0, 0x0, 0x0, 0x0, 0x60, 0x57, 0x60, 0x0, 0x8, 0x0, 0x0, 0x0,
0x50, 0xeb, 0xff, 0xff, 0xff, 0x7f, 0x0, 0x0, 0x24, 0x8, 0x40, 0x0, 0x0,
0x0, 0x0, 0x0, 0x98, 0x3c, 0xd2, 0x70, 0xe8, 0x16, 0xd3, 0x16, 0x0, 0x0,
0x0, 0x0}
(gdb) print oopsIGotToTheBadFunction
$2 = {int (void)} 0x4007b0 <oopsIGotToTheBadFunction>
echo -e "farmacodependientes\x0\xb0\x07\x40" | ./a.out
warning: this program uses gets(), which is unsafe.
Ошибка шины (ядро сброшено)
Я не уверен, куда идти отсюда, любая помощь приветствуется.
#include <stdio.h>
#include <stdlib.h>
int oopsIGotToTheBadFunction(void)
{
printf ("Gotcha!\n");
exit(0);
}
int goodFunctionUserInput (void)
{
char buf[12];
gets(buf);
return(1);
}
int main(void)
{
goodFunctionUserInput ();
printf("Overflow failed\n");
return(1);
}