버퍼는 지정된 크기의 메모리 공간이라는 뜻이다.

버퍼 오버플로우는 버퍼가 지정한 크기의 데이터 보다 더 많은 값이 저장되서 버퍼가 넘치는 취약점이다.

발생하는 위치에 따라 스택 버퍼 오버플로우, 힙 오버플로우 같이 구분된다.

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>
 
int main(void) {
    char buf[16];
    gets(buf);
    
    printf("%s", buf);
}
cs

위 코드는 16바이트 버퍼를 스택에 할당하고 있고, gets함수를 통해 입력값을 할당한 스택에 저장하고 있다. 이때 gets 함수에서 입력값에 대해 제한을 하고 있지 않기 때문에 16바이트 이상의 값이 들어가게 되면 스택 버퍼 오버플로우가 발생하게 된다.

할당된 크기 이상의 입력값으로 버퍼를 오버플로우 시켜 프로그램의 ret에 쉘 코드를 덮어쓰거나(NX 보호기법이 적용되지 않은 경우), 다른 함수의 주소를 덮어써서 리턴하면서 버퍼 오버플로우 취약점을 이용할 수 있다.

 

'Project H4C Study Group' 카테고리의 다른 글

[Project H4C] PLT, GOT  (0) 2021.03.21
[Project H4C] SFP, RET  (0) 2021.03.21
[Project H4C] pwntools  (0) 2021.03.20
[Project H4C][dreamhack] basic_exploitation_002  (0) 2021.03.19
[Project H4C][dreamhack] basic_exploitation_001  (0) 2021.03.19

+ Recent posts