반응형
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 |