SH1R0_HACKER

003. Off-by-one 본문

System/System Exploitation

003. Off-by-one

SH1R0_HACKER 2021. 2. 3. 22:58

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]은 존재하지 않기 때문입니다.