RTL / Return To Library
시스템 해킹에서 shellcode는 스택에 적재되어 실행되는데, 스택에서 shellcode를 실행할 수 없는 경우 RTL 기법을 사용할 수 있다.
RTL 기법은 공유 라이브러리 내의 함수를 이용하는 것인데, 공유 라이브러리는 printf, strcpy 함수 등 자주 사용되는 함수들을 별도 파일로 만들어둔 것이다. 쉘을 실행하는 함수들로는 system, execl 함수 등이 있는데 이 함수들의 주소로 ret를 변조하여 공유 라이브러리 영역으로 점프한 후 쉘을 실행하는 것이다.
실습을 해보자.
사용할 테스트 파일은 위와 같다. strcpy 함수가 길이를 검사하지 않기 때문에 버퍼 오버플로우가 발생하는 것을 확인할 수 있다. 그리고 setuid를 설정하였다.
실습을 위해 test 계정을 생성하였다.
main 함수의 어셈블리어 코드를 보면 strcpy 함수를 호출하기 전에 ebp-0x10 주소를 eax 레지스터에 저장한다. 즉, 이 곳이 buf 변수의 시작점이다.
따라서 스택은 위와 같이 형성될 것이고, buf 변수부터 20bytes를 입력하면 ebp까지 변조할 수 있다.
RTL 기법을 이용하여 root 권한으로 쉘을 실행하려면 위와 같이 변조해야 한다. 여기선 system 함수를 예를 들어서 설명한다. system 함수와 필요한 인자인 문자열 "/bin/sh" 주소를 찾는 방법은 다음 링크를 참고하면 된다.
참고 링크: https://jade9reen.tistory.com/72
리눅스 환경에서 공유 라이브러리 내의 함수 주소와 필요한 인자 주소 알아내기
bof 문제를 풀다보면 RTL을 사용하기 위해 공유 라이브러리 내의 함수를 이용할 때가 있다. 여기선 system 함수와 필요한 인자인 "/bin/sh" 문자열을 예로 든다. 먼저 system 함수의 주소를 알아내는 방법은 두..
jade9reen.tistory.com
위 링크를 참고하여 system 함수와 문자열 "/bin/sh" 주소를 찾으면 각각 0x40058ae0, 0x400fbff9이다.
따라서 위와 같이 임의의 값 "\x90" 20bytes로 ebp까지 변조하고 system 함수 주소로 ret를 변조한 후 dummy 4bytes(이 곳은 사실 system 함수의 ret이다. 깔끔하게 하기 위해선 exit 함수의 주소를 이 곳에 입력하면 된다.)를 입력하고 system 함수의 인자인 "/bin/sh" 주소를 입력하면 root 권한의 쉘이 떨어지고 /etc/shadow 파일을 볼 수 있다.
'ETC > Security' 카테고리의 다른 글
리눅스 환경에서의 메모리 보호 기법 (0) | 2019.08.02 |
---|---|
PLT & GOT (0) | 2019.08.01 |
리눅스 환경에서 공유 라이브러리 내의 함수 주소와 필요한 인자 주소 알아내기 (0) | 2019.08.01 |
리눅스 환경에서 환경변수로 저장한 shellcode 주소 알아내기 (0) | 2019.07.23 |