본문 바로가기

System Hacking

Fake EBP

1. Fake EBP란?

  • IP(Instruction Pointer)를 조작하는 공격 기법을 말한다.
  • leave-ret Gadget을 이용하여, 조작할 수 있다.

2. Fake EBP는 언제 사용?

  • RET를 스택주소나 라이브러리 주소로 덮어쓸 수 없을 경우에 사용되는 기법이다.

3. Fake EBP 기법 공부 전, 알고 가기

  • 함수 에필로그에 대해서 알고 있어야 한다. 
    (본 글에서는 함수 에필로그에 대해 자세한 설명을 포함하고 있지 않으며, 알고 있는 것으로 가정하여 작성되었다. )

  • 함수 에필로그는 함수의 끝을 의미하며, 이는 아래 코드로 구성되어 있다.
leave
ret

 

  • leave의 내부 코드는 아래와 같다.
mov esp, ebp
pop ebp

 

  • ret 내부 코드는 아래와 같다.
pop eip
jmp eip

4. Fake EBP 동작원리

  • 본 글에서는 leave-ret gadget을 이용하여, 예를 들었다.
  • 시나리오 : 30byte의 buf가 존재하는데, 입력값은 38byte를 받아와서 BOF취약점이 발생하는 상황이다.(NX 적용안됨)

4-1. 아래와 같은 공격 시나리오로, shellcode를 실행할 수 있다.

shellcode주소(4byte) + shellcode + NOP + (buf-4)주소 + leave-ret gadget주소

4-2. 공격 시나리오 설명

(1) leave

  • mov esp, ebp
    • esp의 값이 ebp와 같아짐으로써, 같은 위치를 가리키게 된다.

 

  • pop ebp
    • ebp는 덮어준 buf-4의 주소를 가르키게 된다.
    • esp는 pop이 실행되기 때문에, ret를 가르키게 된다.

 

(2) ret

  • ret에는 leve-ret gadget의 주소값으로 덮었기 때문에, leave와 ret명령어가 한 번 더 실행된다.
  • esp는 코드가 실행되었으므로, ret 다음 주소를 가리키게 된다.

 

① leave

  • mov esp, ebp
    • esp의 값이 ebp와 같아짐으로써, 같이 쓰레기 값을 가리키게 된다.

 

  • pop ebp
    • ebp에는 쓰레기 값이 들어가게 된다.
    • esp는 pop이 실행되기 때문에, shellcode주소값을 가리키게 된다.

 

② ret

  • pop eip
    • eip안에 shellcode주소값이 들어간다.
  • jmp eip
    • shellcode가 있는 주소로 이동하기 때문에, shellcode가 실행이 된다.

5. Fake EBP를 이용한 문제

'System Hacking' 카테고리의 다른 글

Malloc(2) - Bin (glibc의 ptmalloc2)  (0) 2022.09.14
Malloc(1) - chunk (glibc의 ptmalloc2)  (0) 2022.09.04
RTC (Return To CSU)  (0) 2022.07.04
RTL (Return to Library)  (0) 2022.06.29
PLT & GOT  (0) 2022.06.27