-
LEAVE & RET instructionHacking/Pwnable 2019. 7. 11. 22:49
LEAVE
64 bits mov rsp, rbp pop rbp
32 bits mov esp, ebp pop ebp
1. rsp(esp)가 가르키는 위치를 이전 함수 Stack Frame(rbp(ebp))으로 만든 후 <- 다음 명령어(pop rbp(rsp)) 실행을 위해
2. rbp에 이전 함수 Stack Frame 저장
3. LEAVE 과정이 끝나면 rsp(esp)는 함수 종료 후 돌아갈 주소를 가르키고 있음.
RET
64 bits pop rip jmp rip
32 bits pop eip jmp eip
4. rsp(esp)에 저장되어 있던 주소(함수 종료 후 돌아갈 주소)를 rip(eip)에 저장 <- 다음 명령어 실행을 위해
5. 함수 종료 및 호출 되기 전 함수 주소로 jump.
이렇기에, rbp(ebp)를 조작할 수 있다면, LEAVE 과정의 mov rsp, rbp(esp, ebp) 에서 rsp(esp), 즉 이전 함수의 Frame Pointer를 조작 할 수 있게 됨.
이전 함수의 Frame Pointer를 조작하게 되면, LEAVE 과정이 끝날 때 rbp(ebp)에는 조작된 주소가 pop될 것임.
RET 과정의 pop rip 에서 결론적으로 rsp(esp)에 조작된 주소+4가 들어가 있을 것이므로 rip 변조가 가능하게 됨.
'Hacking > Pwnable' 카테고리의 다른 글
Stack Alignment (0) 2019.07.11