목록System/System Exploitation (12)
SH1R0_HACKER
OOB (Out Of Boundary)는 버퍼의 길이 범위를 벗어나는 인덱스에 접근할 때 발생하는 취약점 입니다. 다음은 첫 번째 예제입니다. // oob-1.c #include int main(void) { int win; int idx; int buf[10]; printf("Which index? "); scanf("%d", &idx); printf("Value: "); scanf("%d", &buf[idx]); printf("idx: %d, value: %d\n", idx, buf[idx]); if(win == 31337){ printf("Theori{-----------redacted---------}"); } } scanf 함수로 idx 값을 저장하고 buf[idx]에 입력한 값을 저장합니다. ..
첫 번째 예시입니다. // stack-1.c #include #include int main(void) { char buf[16]; gets(buf); printf("%s", buf); } 위 코드를 볼 때 gets() 함수에 별도의 길이 제한이 없기 때문에 16바이트를 넘는 데이터를 입력한다면 스택 버퍼 오버플로우가 발생합니다. 버퍼에 16byte만큼 A를 입력하고 추가로 BBBBCCCC를 입력하자, SFP가 0x42424242로, RET가 0x43434343로 바뀐 모습을 볼 수 있습니다. 이와 같이 스택 버퍼 오버플로우는 프로그램이 스택에 위치한 버퍼에 할당된 것보다 더 많은 데이터를 쓸 때 발생합니다. 버퍼 오버 플로우 취약점은 길이 제한이 없는 API 함수들을 사용하거나 버퍼의 크기보다 입력받는..