Fake EBP 란 ? Leave / RET 을 사용하여 ebp를 원하는 위치로 옮긴뒤에 공격자가 원하는 RET를 얻어내는 공격이다!


(*이 기법은 RET까지만 덮어쓸 수 있는 상태이고 RET에 스택과 라이브러리 주소등을 못넣도록 막아놨을때 사용하는 방법이다)

위에도 언급했지만 Leave / RET 이 중요하다!




Leave 와 Ret 의 역할입니다!




오버플로우가 일어나지 않은 상태의 스택입니다 


자 Fake Ebp의 공격방법이 무엇이냐 sfp에 buf+4 부분(쉘코드의 주소)을 덮어줍니다.


*여기서 sfp의 의미란? Sfp는 ebp가 복귀되는 주소를 저장하는 역할입니다!

Sfp에 buf-4값을 넣어줌으로써 ebp가 buf-4로 가게 해줘서 buf에 저장한 쉘코드가 온전하게 실행될 수 있도록 해주는 역할을 합니다


그리고 ret에 ret를 덮어줍니다 . 


그렇게 되면 


1차 -  Leave = Mov esp , ebp pop ebp 수행 esp에 ebp가 들어갑니다(esp = ebp)

그 뒤에 pop ebp 때문에 ebp가 스택에서 뽑혀서 buf-4로 갑니다  ..

방금 한 pop ebp 과정에서 pop 명령어 때문에 +4가 되므로 buf+4를 sfp에 넣어주는것입니다

그 뒤 ret 이 실행되는데 ret 에는 ret을 넣어놨기 떄문에 ret이 다시 실행됩니다 


2차 - Leave = Mov esp ,ebp pop ebp 를 다시 수행합니다 . 아까와 같이 esp에 ebp가 들어갑니다 .근데 현재 ebp의 위치는 어디죠? 바로 맨 아래입니다

그 뒤에 pop ebp로 ebp는 어딘가로 숑 사라져버리고 pop 명령어를 수행했기 때문에 +4가 됩니다. 그렇다면 esp는 쉘코드를 가리키게 되고 ret 수행으로 eip 명령으로 쉘 코드가 실행됩니다 .


1차 Leave = Mov esp , ebp pop ebp 에 대한 그림입니다 



Leave Mov esp , ebp 에서 buf 어딘가에 존재하던 esp가 Mov esp ebp 라는 명령어에 의해서 Sfp(&Buf-4)를 가리키고 있던 ebp와 같은 곳에 존재하게됩니다 .

그 뒤에 pop ebp 명령어가 실행이 되면서 sfp에 들어있던 buf-4로 ebp는 이동하게 되고 esp는 Leave/Ret을 가리키고 있는 상태가 됩니다 



pop eip 명령에 의해서 leave - ret의 주소를 가지게 되었고 jmp eip를 함으로써 

다시 한번 leave-ret을 진행합니다



2차 leave - ret이 진행됐습니다. 

leave mov esp , ebp가 진행됨으로써 아까 buf-4부분을 ebp가 가리키고 있기때문에 esp도 마찬가지로 똑같은 위치에 있게됩니다. 그리고 pop ebp를 수행함으로써 esp는 shellcode를 가리키게되고 ebp는 신경안쓰셔도됩니다


그 후에 ret 이 진행이 됩니다 현재 esp가 Shellcode를 가리키고 있는 상태기 때문에 eip 도 Shellcode를 가리키게 되고 pop eip를 함으로써 eip의 &Shellcode가 들어가게됩니다. 

그 후에 jmp eip로 쉘코드가 실행이됩니다 .


LOB - ZOMIBE_ASSASSIN 은 FAKE EBP를 통해서 푸는 문제입니다! 직접 해보고 싶으신 분은 참고 하시길 바랄게요!


'시스템 기법 정리' 카테고리의 다른 글

ROP  (0) 2016.06.06
PLT , GOT [상세히] ,GOT Overwrite  (0) 2016.06.02
Format String Attack (FSB)  (0) 2016.05.30
ASLR를 해제하는 여러가지 방법  (0) 2016.05.29
plt , got , rtl chain , ASLR  (0) 2016.05.28

+ Recent posts