Атака переполнения буфера с помощью gets () - PullRequest
0 голосов
/ 25 июня 2019

Я пытался реализовать атаку переполнения буфера в программе ниже, 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...