Studying Security

Return to Libc (RTL) 본문

개념 정리

Return to Libc (RTL)

J4guar 2022. 4. 9. 06:37
728x90
반응형

1. Return to Libc(RTL)이란? 

Return address 영역을 공유 라이브러리 함수의 주소로 변경해, 해당 함수를 호출하는 방식

  • NX bit(DEP)를 우회 가능

2. 함수 인자 전달 방식

x86 → 스택에 PUSH해서 전달

stack을 살펴보면 아래와 같은 구조를 지님

ebp-0x4 sfp
ebp ret
ebp+0x4 ???
ebp+0x8 arg1 = 1
ebp+0xc arg2 = 2

ret영역과 4byte 간격을 두고 인자를 차례로 전달하고 있음

x64 → rdi, rsi, rdx, rcx, r8, r9, 스택을 이용 (인자의 개수에 따라 다음의 순서로 전달)

func함수의 register

rdi 1
rsi 2

3. RTL payload 구성

위에서 살펴본 함수의 인자 전달 방식을 토대로 RTL payload작성을 해보자

x86

ex) system("/bin/sh")

ebp-0x4 sfp  
ebp ret system
ebp+0x4 ??? dummy
ebp+0x8 arg1 "/bin/sh"
문자열 주소

위와 같이 overwrite 해주면 return시에 system함수로 넘어가고 인자로 "/bin/sh"이 전달 됨

인자가 2개, 3개 그 이상 되는 함수들도 비슷한 방식으로 그 아래로 인자를 더 전달하면 됩니다.

x64

x64의 경우 레지스터에 값을 전달해야 되기 때문에 gadget을 이용해 인자를 해당 레지스터에 전달한다.

ex) system("/bin/sh")

rbp-0x8 sfp  
rbp ret pop rdi
rbp+0x8   "/bin/sh" 문자열 주소
rbp+0x10   system

위와 같이 overwrite 해주면 rdi에 "/bin/sh"을 넣고 system함수가 동작이 됨

인자가 2개, 3개 그 이상 되는 함수들도 비슷한 방식으로 gadget을 이용하여 해당 레지스터에 값을 넣어주고

해당 함수를 이어서 overwrite함으로써 원하는 동작을 하도록 유도할 수 있음

4. Reference

 

TechNote - TechNote - Lazenca.0x0

Skip to end of banner Go to start of banner TechNote Skip to end of metadata Lazenca.0x0님이 작성, 10월 31, 2019에 최종 변경 Go to start of metadata “html” 매크로 렌더링 오류 Notify your Confluence administrator that "Bob Swift Atlass

www.lazenca.net

 

반응형

'개념 정리' 카테고리의 다른 글

Master Canary  (0) 2022.05.18
__environ  (0) 2022.05.11
_rtld_global  (0) 2022.04.28
SigReturn Oriented Programming (SROP)  (0) 2022.04.14
Return to Shellcode  (0) 2022.04.13
Comments