RTL(Return To Libc)

공부 2014. 11. 2. 00:56
반응형

RTL

- 개념 : ret를 시스템명령을 내릴 수 있는 함수의 주소를 덮어씌우고 해당 인자값을 넣어 exploit 하는 것(?)

- 보통 system함수를 사용한다.


Libc라는 건 윈도우 환경에서 프로그래밍을 해봤다면 헤더라는 말을 들어봤을 것이고, 그 헤더는 함수들의 집합체라고 할 수 있겠다. RTL ,말 그대로 헤더안의 함수들의 주소로 이동해 메모리 안에 있는 인자값을 이용해 실행하는 것.


예를 들어 LOB에 darkknight문제를 보면


Buf[40byte]+SFP[4byte]+ret[4byte]+---


이런 식으로 기본적인 틀이 잡아지는데, buf의 48번째 값이 bf(스택안의 값) 이 되면 안되기 때문에 RTL을 사용해서 풀어야한다.

가장 많이 사용하는 system함수는 뒤에 4byte 짜리 두개의 인자 값을 가지며,

첫번째에 해당하는 인자값은 실행할 명령어

두번쨰에 해당하는 인자값은 함수를 실행하고 다음으로 진행할 주소값

을 가진다. 그럼 스택에서는 이 값들을 리틀 엔디안 방식으로 넣어야하기 때문에 반대로 들어간다.(진행될 주소값, 명령어 순)


그럼 결과적으로 payload는 이렇다


Buf[40byte]+SFP[4byte]+system+exit+&/bin/sh


여기서는 깔끔하게 쉘을 따기 위해서 exit함수를 사용했다.

/bin/sh의 주소값은 간단하게 memcmp로 확인하자.

'공부' 카테고리의 다른 글

MIPS 명령어  (0) 2014.11.21
새로 알게 된것  (0) 2014.11.02
스택 구조와 sfp 그리고 ret  (0) 2014.11.01
클래스와 네임스페이스  (0) 2014.10.30
FD(File Descriptor) 정리  (0) 2014.10.05
블로그 이미지

KuroNeko_

KuroNeko

,