스택 버퍼오버플로우 Exploit 종류
Direct EIP Overwrite
- 버퍼오버플로우에 취약한 함수를 사용하고 있을 때 발생되는 취약점으로 RET 변조를 통해 임의의 주소를 실행시킴
* 버퍼 보안 검사(GS), DEP, ASLR 기능을 제외하고 컴파일시에 성공
Trampoline Technique
- ASLR 기능으로 실행 시마다 코드 주소 및 스택 주소 등이 모두 변경되었을 때 직접 쉘코드의 주소를 써넣는 Direct EIP Overwrite 기법과 다르게 JMP ESP를 이용하여 동적으로 버퍼 주소로 이동하도록 하는 기법
* JMP ESP 주소를 찾는 방법
- 디버거를 통해 메모리(Ctrl+M)로 들어간 후 바이너리 검색(Ctrl+B)을 이용해 'JMP ESP(FF E4)'를 사용하는 주소를 찾음
SEH Overwrite
* 스택 쿠키 : RET, SFP 이전에 랜덤한 4바이트의 쿠키값을 삽입하는 것이며, 컴파일러는 함수가 종료되기 전 해당 쿠키값이 기존의 값과 동일한지 검사하는 코드를 추가.
* Next SEH Record에는 쉘코드로 점프하는 코드, Handler는 POP POP RET 코드의 주소를 넣어주면됨
* !search pop r32\npop r32\nret
- Immunity Debugger의 기능으로 pop pop ret 를 메모리 안에서 빠르게 찾아줌
변조된 SEH Chain
변조된 0018FF78(Next SEH Record) 와 0018FF7C(Handler)
Shift+F8 을 통해 004012D9(POP POP RET) 주소로 가게됨
POP POP RET를 통해 EB 06(JMP SHORT)이 나타나며 0018FF80(쉘코드 주소)이 실행됨
[ 힙 버퍼오버플로우 종류 ]
* 힙 메모리는 스택보다 큰 메모리를 필요로 할 때, 그리고 전역변수가 필요할 때 사용하며 객체를 생성할 때에도 대부분 힙을 사용.
Function Pointer Overwrite - 공격대상(함수 포인터)
Vtable Overwrite - 공격대상(객체(Object)와 Vtable)
정수 오버플로우 - 공격대상(변수 타입)
Use-After-Free - 공격대상(Free된 포인터(Dangling pointer))
참고 : 윈도우 시스템 해킹 가이드(hyunmini)