Переполнение буфера в стеке. Часть 1

kas1e

Xakep, номер #050, стр. 050-062-7


strcpy(little_buffer,argv[1]);

}

/* strcpy является одной из функций, которая не заботится о размере буфера */

# gcc -w test.c -o test

# ./test aaaaaaaabbbb

Segmentation fault

Вот! Программа попыталась вернуться на bbbb (62626262 в hex). Т.е. мы перезаписали то, что нам надо, и в EIP оказалось 62626262. Чтобы подтвердить информацию, проверим это в отладчике:

# gdb -q ./test

(gdb) set args aaaaaaaabbbb

(gdb) run

Starting program: /a.out aaaaaaaabbbb

Program received signal SIGSEGV, Segmentation fault.

0x62626262 in ?? ()

(gdb)

Заключение

Мы подошли к логическому завершению одной из двух частей нашей темы. Что мы получили? А получили мы самое натуральное переполнение буфера в стеке. Главное, освой этот теоретический материал. Дальше я буду описывать, каким образом мы можем подсунуть наш код, и как этот код сделать. Как написать программу, которая будет всем этим заниматься. А на этом, к сожалению, пока все. Изучай ссылки и жди следующей статьи.

Назад на стр. 050-062-6  Содержание