-
BOF 막기Hack/Pwnable 2015. 2. 23. 13:20
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char buffer[10]; if (argc < 2) { fprintf(stderr, "사용법: %s 문자열\n", argv[0]); return 1; } strcpy(buffer, argv[1]); return 0; }
해당 코드는 strcpy함수를 사용하여 buffer overflow가 발생할수있는 코드이다.
하지만 위와같은코드를 strcpy함수의 SDL버전인 strncpy를 사용하면 bof를 방지할수있다..
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char buffer[10]; if (argc < 2) { fprintf(stderr, "사용법: %s 문자열\n", argv[0]); return 1; } strncpy(buffer, argv[1], sizeof(buffer)); buffer[sizeof(buffer) - 1] = '\0'; /* 문자열의 끝을 분명히 맺는다 */ return 0; }
strncpy함수를 사용하면 인자가 하나 더 추가되며, 입력받을크기를 세팅할수있다.
buffer변수 크기만큼 입력을 받을수있다는소리로, 버퍼 오버플로우를 의도한 나머지의 오버플로우는 모두 막힌다.
'Hack > Pwnable' 카테고리의 다른 글
[Pwnable.kr]Echo (0) 2015.03.24 [Pwnable.kr]mistake (0) 2015.03.16 원격서버에서 로컬로 파일 담아오기 (0) 2015.03.15 부트킷 (0) 2015.02.25 Integer Overflow (1) 2015.01.18