티스토리 뷰

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)

'리버싱 > 정리' 카테고리의 다른 글

자바스크립트 난독화 야매로 풀기  (0) 2017.01.21
pydbg 설치  (0) 2016.11.13
Universal 쉘코드(cmd)  (0) 2016.10.31
WinDbg 사용법  (0) 2016.10.30
ShellCode 생성과정(cmd)  (0) 2016.10.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함