- Return address 영역에 공유 라이브러리 함수의 주소로 변경해, 해당 함수를 호출하는 방식이다.
System V AMD64 ABI
인자 전달 방법 | Register (RDI, RSI, RDX, RCX, R8, R9, XMM0-7) |
인자 전달 순서 | 오른쪽에서 왼쪽의 순서로 레지스터에 저장된다 |
함수의 반환 값 | EAX |
Stack 정리 | 호출한 함수가 호출된 함수의 stack 공간을 정리함 |
[EXAMPLE]
- ret2libc 기법을 사용하기 위해서는 각 레지스터에 값을 저장 할 수 있어야 한다.
stack | 평상시 | ret2libc |
ebx-0x? | BUF | BUF |
ebx | SFP | SFP |
ebx+0x4 | RET | Gadget (POP RDI, ret) |
ebx+0x8 | Argv1 | Argv1 |
ebx+0xC | Argv2 | system() 함수 주소 |
- 다음과 같이 printf, system, /bin/sh의 offset을 구했다.
- pop rdi ; ret 가젯을 구한다.
REF: https://www.lazenca.net/display/TEC/02.RTL%28Return+to+Libc%29+-+x64
02.RTL(Return to Libc) - x64 - TechNote - Lazenca.0x0
Excuse the ads! We need some help to keep our site up. List RTL(Return to Libc) RTL이란 Return address 영역에 공유 라이브러리 함수의 주소로 변경해, 해당 함수를 호출하는 방식입니다.해당 기법을 이용해 NX bit(DEP)�
www.lazenca.net
01.RTL(Return to Libc) - x86 (0) | 2020.05.05 |
---|
댓글 영역