BoF(Buffer Overflow):
ASLR(Address Space Layout Randomize):
proc/sys/kernel/randomize_va_space 값이 2라면 heap,stack 둘다, 1이면 stack, 0이면 사용안함
NX(None eXecute) : 실행권한 제거
Stack Guard -> Canary bit
gcc -o bof_auth_auth.c -fno-stack-protector (스택 프로텍터 우회해서 컴파일)
---------------------------------------------------------------------------------------------------------------------
#gdb 명령어
gdb -q hello (hello파일 디버그)
disas main (main함수쪽 디스어셈블)
b (함수이름)
run (실행)
c (다음 breakpoint까지 run)
s 또는 n (한 행씩 실행) s는 함수만나면 함수안으로 진입, n은 그냥 다음줄
u (루프 빠져나가기)
f (함수 수행하고 빠져나가기)
r (함수 수행안하고 중도에 나감)
k (실행종료)
info f (스택프레임 확인)
info registers (레지스터들 값 확인)
info locals (지역변수 확인)
info variables (전역변수 확인)
레지스터 종류
범용(EAX, EBX, ECX, EDX) / 인덱스(ESI, EDI) / 포인터 레지스터(EIP, ESP, EBP)
EAX: accumulator (산술연산)
EBX: base (변수저장)
ECX: count (반복문에서 카운트)
EDX: data (산술연산 보조)
ESI: source(출발지 주소 저장)
EDI: destination(목적지 주소 저장)
EIP: instruction(다음 실행할 명령어 주소) - pc(program counter)
ESP: stack (스택 포인터)
EBP: base (베이스 포인터)
Race condition
Mutual exclusion(상호 배제)/ Deadlock(교착 상태)/ Starvation(기아 상태)
semaphore / mutex