System/System Hacking

RTL (Return to libc)

728x90

https://www.lazenca.net/pages/viewpage.action?pageId=16810038

 

03.RTL(Return to libc) - TechNote - Lazenca.0x0

페이지 … TechNote 02.TechNote 05.Basic exploitation techniques 배너의 맨 끝으로 배너의 맨 처음으로 03.RTL(Return to libc) 메타 데이터의 끝으로 건너뛰기 Lazenca.0x0님이 작성, 4월 11, 2018에 최종 변경 메타 데이�

www.lazenca.net

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

→ NX bit 우회 가능

목표: system함수의 주소와 "/bin/sh"의 주소를 알아내 system함수의 인자로 "/bin/sh"를 전달해 쉘을 따기

RTL x86 (32bit)

Calling Convention - __cdecl (C declaration) -

: 인텔 x86 기반 시스템의 C/C++에서 주로 사용하는 호출 규약

  Linux kernel에서 기본적으로 Cdecl 호출 규약을 사용

▷ 인자 전달 방식

 stack을 이용; 함수의 인자 값을 stack에 저장

 인자 전달 순서

 오른쪽 → 왼쪽의 순서로 stack에 쌓임

 함수의 반환값

 함수의 return 값 4byte 이하: EAX 레지스터에 저장

                       8byte 이하: 상위 4byte EDX + 하위 4byte EAX에 저장 

 stack 정리

 호출한 함수가 사용된 stack 공간을 정리; 호출한 함수가 호출된 함수의 stack frame 공간을 정리한다

 (이유: c언어에는 가변인자 함수가 있어서 stack을 정리할 수 있는 정형화된 routine을 만들기 어려움)

 

RTL x64 (64bit)

Calling Convention - System V AMD64 ABI -

: Unix, Unix 계열 운영체제의 표준 호출규약

  Solaris, Linux, FreeBSD, macOS에서 사용

▷ 인자 전달 방식

 RDI, RSI, RDX, RCX, R8, R9: 정수 및 메모리 주소 인수 전달

 XMM0, XMM1, ..., XMM7: 부동 소수점 인수 전달

 인자 전달 순서

 오른쪽 → 왼쪽의 순서로 레지스터에 저장

 함수의 반환값

 EAX 레지스터에 저장

 stack 정리

 호출한 함수가 호출된 함수의 stack 공간 정리

 

SMALL

'System > System Hacking' 카테고리의 다른 글

SROP x64  (0) 2020.07.24
SROP x86  (0) 2020.07.23
SROP  (0) 2020.07.23
64bit ROP  (0) 2020.06.14
32bit ROP  (0) 2020.06.14