프로그램 로직이 동작하기 위한 인자와 프로세스 상태를 저장하는 데 사용
EBP
: 스택 베이스 주소를 가리키는 레지스터ESP
: 스택 탑 주소를 가리키는 레지스터EIP
: 다음 실행할 명령어를 가리키는 레지스터
- 지정된 버퍼 크기보다 큰 데이터를 버퍼에 쓰는 행위
- 버퍼의 한계를 넘어서는 현상
- 데이터가 인접 메모리 공간으로 넘쳐서 정보를 덮어쓰게 되고, 종종 충돌이나 악용 가능한 상태를 유발
- 내장된 데이터 접근 또는 덮어쓰기 보호 기능이 없고, 어떤 배열에 기록되는 데이터가 범위 안에
포함되는지 자동으로 검사하지 않기 때문에 발생- 로컬 또는 원격에서 Root 권한 획득 목적으로 자주 사용되는 공격기법
- 스택에 저장되어있는 복귀 주소가 지역변수에 의해서 침범되게 만들고 악성코드를 넣는 공격
🔸스택 : 프로그램 로직이 동작하기 위한 인자와 프로세스 상태를 저장하는 데 사용
🔸힙 : 프로그램이 동작할 때 필요한 데이터 정보를 임시로 저장하는 데 사용
<예제>
bugfile.c
int main(int argc, char *argv[]){
char buffer[10]; //지역변수
strcpy(buffer, argv[1]); //스택 버퍼 오버플로우 공격 발생
printf("%s\n", &buffer);
}