RTL(Return to Libc)

return address 영역에 공유 라이브러리 함수의 주소로 변경해 해당함수를 호출


x64 Calling convention

=> RDI, RSI, RDX, RCX, R8, R9 return=EAX


ROP(Return Oriented Programming)

ret2libc 기법을 사용하기 위해서는 

Return Address 영역에 pop rdi, ret 코드가 저장된 주소값을 저장해야 합니다.

Retrun Address 다음영역에 해당 레지스터에 저장 할 인자 값을 저장합니다.

그 다음 영역에 호출 할 함수의 주소를 저장합니다.


Call 함수


push EIP+4

jmp 주소



Frame faking(Fake ebp)

Frame faking이란 가짜 스택 프레임 포인터(Stack Frame Pointer)를 만들어 실행 흐름을 제어하는 것입니다.

Return Address영역 까지만 덮어쓸수 있을 경우 사용 가능합니다.


LEAVE & RET Instruction

Instruction x86 x64


LEAVE mov esp, ebp mov rsp, rbp

pop ebp pop rbp


RET pop eip pop eip

jmp eip jmp rip


pop 명령어는 주소 안에 있는 값을 넣어준다


overflow로 frame pointer영역에 rtl 코드가 저장되어있는 주소 -0x4 주소를 저장

return address 영역에 leave 명령어가 저장되어 있는 주소를 저장




Frame Pointer Overwrite(One byte Overflow) =>FPO
Frame Pointer Overwrite란 Frame point에 1byte를 덮어써서 프로그램의 실행 흐름을 제어하는 것 입니다.
발생할수있는 상황
- RTL 코드가 저장된 영역과 Frame Pointer 뒤에서 3번째 자리수가 다르면 공격에 성공할 수 없다.


'Pwnable > PWNABLE 끄적끄적' 카테고리의 다른 글

2019.01.19  (0) 2019.01.19
2019.01.10  (0) 2019.01.10
2019.01.10  (0) 2019.01.10

+ Recent posts