
프로그램 로직이 동작하기 위한 인자와 프로세스 상태를 저장하는 데 사용
EBP : 스택 베이스 주소를 가리키는 레지스터ESP : 스택 탑 주소를 가리키는 레지스터EIP : 다음 실행할 명령어를 가리키는 레지스터
➡ 메인 함수 내에서 함수 호출 시, EBP는 함수가 실행되는 동안만 함수가 호출된 위치로 옮겨짐
➡ 함수가 정상적으로 종료되면 EBP는 main 함수의 첫 시작 위치로 돌아오고 함수에서 사용한 스택의 공간은 연결이 해제되어 없어진다.(메모리 상엔 남아있으나 더이상 사용하지 않음)
- 지정된 버퍼 크기보다 큰 데이터를 버퍼에 쓰는 행위
- 버퍼의 한계를 넘어서는 현상
- 데이터가 인접 메모리 공간으로 넘쳐서 정보를 덮어쓰게 되고, 종종 충돌이나 악용 가능한 상태를 유발
- 내장된 데이터 접근 또는 덮어쓰기 보호 기능이 없고, 어떤 배열에 기록되는 데이터가 범위 안에
포함되는지 자동으로 검사하지 않기 때문에 발생- 로컬 또는 원격에서 Root 권한 획득 목적으로 자주 사용되는 공격기법
- 스택에 저장되어있는 복귀 주소가 지역변수에 의해서 침범되게 만들고 악성코드를 넣는 공격

🔸스택 : 프로그램 로직이 동작하기 위한 인자와 프로세스 상태를 저장하는 데 사용
🔸힙 : 프로그램이 동작할 때 필요한 데이터 정보를 임시로 저장하는 데 사용
<예제>
bugfile.c
int main(int argc, char *argv[]){
char buffer[10]; //지역변수
strcpy(buffer, argv[1]); //스택 버퍼 오버플로우 공격 발생
printf("%s\n", &buffer);
}
