공부
RTL(Return To Libc)
KuroNeko_
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로 확인하자.