시스템 해킹 & 보안
Stack Buffer Overflow(BOF) - stack0 문제 해결
ahhyun98
2025. 7. 6. 17:34
stack0 문제는 스택 기반 버퍼 오버플로우(Stack Buffer Overflow)의 가장 기초적인 개념을 이해하기 위한 실습이다.
사용자 입력을 제한 없이 받아서 변수 값을 조작하는 구조이다.
코드 분석
stack0.c
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv){
volatile int modified;
char buffer[64];
modified = 0;
gets(buffer);
if(modified != 0){
printf("you have changed the 'modified' variable\n");
} else {
printf("Try again?\n");
}
}
- buffer는 64바이트 크기의 버퍼이고, gets() 함수는 길이 제한이 없어 버퍼 오버플로우를 발생시킬 수 있는 취약점이 있다.
- 입력이 buffer 크기를 초과하면 그 다음 변수인 modified의 값을 덮을 수 있다.
- modified의 초기값은 0이지만, 값이 0이 아닌 경우 "you have changed the 'modified' variable"이라는 문구가 출력된다.
익스플로잇
buffer가 64바이트이고 modified가 바로 다음에 있기 때문에 A를 65개 이상 넣으면 버퍼 오버플로우가 발생하게 된다.
결과
modified 값 변경 성공!!
이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.
모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.