카테고리 없음

[8월 27일] 버퍼 오버플로우(BoF)

ljm 2025. 8. 27. 09:33
Stack BoF / Heap BoF

 

[root@localhost ~]# vi bof_auth.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int check_auth(char *password) { // 패스워드가 맞는지 확인하는 함수
    int auth = 0;
    char temp[16]; // 16바이트만큼 temp 크기 할당
    strncpy(temp, password, strlen(password));
    // temp에 password의 길이만큼 저장하고 길이가 16 이상이면 버퍼오버플로우 발생

    if (!strcmp(temp, "SECRET_PASSWORD"))
        auth = 1;
    // auth가 temp 뒤에 존재하므로 temp의 값을 길게 해서 조작하면
    // auth의 값을 0 말고 다른 숫자로 만들 수 있다

    return auth;
}

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: ./sbof ADMIN_PASSWORD\n");
        exit(-1);
    }

    if (check_auth(argv[1])) 
        printf("Hello Admin\n");
    } else {
        printf("Access Denied\n");
    }
}

 

메모리 보호 기법

ASLR(Address Space Layout Randomize)

NX(None eXecute) bit

Stack Guard -> Canary

 

[root@localhost ~]# cat /proc/sys/kernel/randomize_va_space
2

 

[root@localhost ~]# cat /proc/self/maps | grep stack

 

[root@localhost ~]# gcc -o bof_auth bof_auth.c -fno-stack-protector

 

 

GDB

[root@localhost ~]# vi hello
#include <stdio.h>

int main() {
        char str[] = "Hello World";
        printf("%s",str);
        return 0;
}

[root@localhost ~]# dnf install gdb
[root@localhost ~]# gdb hello

 

dnf install glibc-2.34-168.e19_6.23.x86_64

 

 

Assembly Language
Intel / AT&T

Opcoe | Operand1 | Operand2
  ADD         EAX           EBX

범용(EAX, EBX, ECX, EDX)
인덱스(ESI, EDI)
포인터 레지스터(EIP, ESP, EBP)
vi add.c
gcc -o add add.c
./add

어셈블리어로 변환 가능

 

 

 

vi add.assem
vi name.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main(void) {
        char secret[16] = "secret message";
        char barrier[4] = {};
        char name[8] = {};
        memset(barrier, 0, 4);
        printf("Your Name : ");
        read(0, name, 12);
        printf("Your Name is %s.", name);
}

 

[root@localhost ~]# gcc -o name name.c -fno-stack-protector

[root@localhost ~]# ./name

 

Race Condition  

> Mutual exclusion(상호 배제) / Deadlock(교착 상태) / Starvation(기아 상태)

>> 세마포어(Semaphore) / 뮤텍스(Mutex)