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 |