SH1R0_HACKER
003. Off-by-one 본문
Off-by-one 취약점은 경계 검사에서 하나의 오차가 있을 때 발생하는 취약점입니다.
// off-by-one-1.c
#include <stdio.h>
void copy_buf(char *buf, int sz) {
char temp[16];
for(i = 0; i <= sz; i++)
temp[i] = buf[i];
}
int main(void) {
char buf[16];
read(0, buf, 16);
copy_buf(buf, sizeof(buf));
}
main 함수에서 16byte의 문자열을 사용자로부터 입력받은 후 buf에 저장하고
copy_buf 함수의 인자로 buf와 sizeof(buf) 값을 전달합니다.
copy_buf 함수에서 for문이 실행되는데 여기서 문제가 있습니다.
범위를 0부터 15까지로 제한했어야 하지만 <= 작거나 같다 구문 때문에 16까지 인덱스를 참조하게 됩니다.
실제로 temp[16]과 buf[16]은 존재하지 않기 때문입니다.
'System > System Exploitation' 카테고리의 다른 글
006. 초기화되지 않은 메모리 (0) | 2021.02.07 |
---|---|
005. Double Free & Use After Free (0) | 2021.02.07 |
004. Format String Bug (0) | 2021.02.07 |
002. OOB (Out Of Boundary) (0) | 2021.02.03 |
001. 스택 버퍼 오버플로우 (Stack Buffer Overflow) (0) | 2021.02.01 |