Lluvia의 보안공부 RSS 태그 관리 글쓰기 방명록
2023-11-30 18:00:32

이번 글에서는 흔히 OOB라고 부르는 Out-Of-Boundary 취약점에 대한 글을 써볼 것이다.

 

Out-Of-Boundary

“경계를 벗어난다”뜻의 이름을 가진 이 취약점은 쉽게 말해서
정해진 범위를 벗어나 비정상적 행위를 유발하는 것을 말한다.

 

이러한 취약점은 다음과 같은 간단한 예제로 어떤 취약점인지 확인해보자.

#include <stdio.h>

int main() {
    int index;
    int buf[5] = {0,};
    int check;

    for(int i = 1; i <= 5; i++)
        printf("buf[%d]'s addr : %p\n", i, &buf[i-1]);

    printf("check's addr : %p\n\n", &check);
    printf("Input Index Number : ");

    scanf("%d", &index);
    printf("Input Value : ");

    scanf("%d", &buf[index]);
    printf("buf[%d]'s addr : %p\n", index, &buf[index]);

    if(check == 1111) {
        printf("what? how did you change it?\n”);
    } else {
        printf(“Haha you can’t change it!!\n");
    }

    return 0;
}

 

보호기법은 전부 해제한 상태에서 예제를 진행하였다.

 

 

배열 buf의 인덱스의 주소들과 변수 check의 주소를 보여주고인덱스 값을 입력 받는다. 

해당 인덱스의 위치에 값을 넣은 뒤다시 한번 입력 받은 인덱스의 주소를 출력한다.

 

자료형이 int이기 때문에 각 주소들이 4byte씩 차이 나고 check랑 buf[0]이 4byte만큼 떨어져 이어져 있다.

만약 이때 buf[-1]에 값을 넣으면 어떻게 될까?

 

 

buf[-1]의 주소와 check의 주소가 같음을 볼 수 있으며
1111을 넣어 if문 조건을 충족했을 때의 출력 값을 볼 수 있다.

 

이러한 취약점을 Out-Of-Boundary라고 한다.

'보안 > 시스템 해킹' 카테고리의 다른 글

Off - By - One  (0) 2023.11.28
DreamHack - basic_exploitation_001  (0) 2023.10.22
Dreamhack - basic_exploitation_000  (0) 2023.10.22
[PlaidCTF] ropasaurusrex 문제 풀이  (0) 2023.10.12
ShellCode - Egg Shell.part2  (1) 2023.10.03