FEBP(Fake EBP) 공격이란?
- 시스템해킹/시스템
- 2020. 4. 10. 18:20
LOB 풀이를 옮기다가 FEBP를 사용하는 문제가 나와서 여기에 정리한다. EBP를 조작해 원하는 코드가 실행되게끔 하면 되기 때문에 한가지 방식이 정해져있지는 않은 것 같다.
/* 틀린 부분 지적 및 댓글 환영합니다 */
FEBP 공격 페이로드
FEBP 공격을 위해 buffer에 &(shellcode)를, SFP에 &(buffer)-4를, RET에 &(leave-ret 가젯)을 넣어보고, 어떻게 쉘코드가 실행될 수 있는지 순서대로 확인해보자.
buffer (44) &(shellcode) |
SFP <--ebp &(buffer)-4 |
RET &(leave-ret gadget) |
leave 실행 후
위 상황에서 levae 명령어가 실행되면 <mov esp, ebp; pop ebp> 이기 때문에 먼저 mov esp, ebp로 인해 ebp값(&(buffer)-4)이 esp에 저장된다. 즉, esp와 ebp가 가리키는 곳이 같아지게 된다.
(mov esp, ebp)
buffer (44) &(shellcode) |
SFP &(buffer)-4 <--ebp,esp |
RET &(leave-ret gadget) |
그리고나서 pop ebp로 인해 esp에 저장되어있는 값(&(buffer)-4)이 ebp에 저장되고 esp는 +4가 된다. 즉, ebp는 esp에 저장되어있는 값을 가리키게 되기 때문에 아래와 같이 쉘코드가 저장되어있는 주소의 -4 위치를 가리킨다.
(pop ebp)
&(buffer)-4 | XXXXXXXX <--ebp |
buffer (44) &(shellcode) |
SFP &(buffer)-4 |
RET &(leave-ret gadget) <--esp |
ret 실행 후
여기서 ret이 실행되면 esp가 가리키고 있는 값을 eip에 넣고 점프하기 때문에 leave-ret 가젯이 있는 곳으로 점프하게 된다.
&(leave-ret gadget) | leave <--eip |
... |
&(buffer)-4 | XXXXXXXX <--ebp |
buffer (44) &(shellcode) |
SFP &(buffer)-4 |
RET &(leave-ret gadget) |
RET+4 <--esp |
leave-ret 가젯의 leave 실행 후
다시 가젯으로 인해 leave가 실행되면, esp가 ebp쪽으로 움직인 후,
(mov esp, ebp)
&(buffer)-4 | XXXXXXXX <--ebp,esp |
buffer (44) &(shellcode) |
SFP &(buffer)-4 |
RET &(leave-ret gadget) |
RET+4 |
... |
XXXXXXXX | YYYYYYYY <---ebp |
ebp가 esp가 가리키는 곳의 값이 되고 esp+=4가 되므로 아래와 같은 상황이 된다. 참고로 여기서 XXXXXXXX의 위치는 임의로 잡은 것이다.
(pop ebp)
&(buffer)-4 | XXXXXXXX |
buffer (44) &(shellcode) <--esp |
SFP &(buffer)-4 |
RET &(leave-ret gadget) |
RET+4 |
... |
XXXXXXXX | YYYYYYYY <---ebp |
leave-ret 가젯의 ret 실행 후
이제 마지막 단계이다. ret명령 실행으로 인해 esp에 저장되어있는 값인 &(shellcode)로 점프하게 되고 따라서 쉘코드가 실행된다.
&(buffer)-4 | XXXXXXXX |
buffer (44) &(shellcode) |
SFP &(buffer)-4 |
RET &(leave-ret gadget) |
RET+4 |
... |
&(shellcode) | shellcode <--eip !!!!! |
... |
XXXXXXXX | YYYYYYYY |
'시스템해킹 > 시스템' 카테고리의 다른 글
윈도우에서 DBI pintool 설치, 예제파일 컴파일 및 사용하기 (0) | 2020.03.31 |
---|---|
(작성중) ROP (Return Oriented Programming) (0) | 2020.03.30 |
RTL(Return to Library) Chaining 이란? (0) | 2020.03.26 |
WinAFL 빌드 과정 (Windows10) (0) | 2020.02.08 |