- 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
01.RTL(Return to Libc) - x86 (0) | 2020.05.05 |
---|
댓글 영역