본문 바로가기

해킹 공부

[NOOBHACK] off by One (OBO), 취약점

#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));
}

off_by_one 취약점은 함수나 반복문의 의해 반복 횟수를 고려하지 못해 버퍼의 경계를 넘어버리는 취약점이다

위의 코드는 OBO 취약점이 발생하는 코드로 16길이의 버퍼를 꽉 채운다면 copy_buf에서  <= 조건식 때문에 최대버퍼+1

번 작업을 수행하게 된다

 

근데 겨우 버퍼 하나 넘어 버렸다고 뭐가 큰일 이냐고 할 수 있는데 다른 조건만 충족하면 다른 공격 기법으로 연계 할 수 있다

바로 SFP 라는 취약점으로 익스는 쉽지만 이론은 매우 어렵다고 보면 된다