ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LEAVE & RET instruction
    Hacking/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

    댓글

Designed by Tistory.