리눅스 환경에서 공유 라이브러리 내의 함수 주소와 필요한 인자 주소 알아내기
bof 문제를 풀다보면 RTL을 사용하기 위해 공유 라이브러리 내의 함수를 이용할 때가 있다.
여기선 system 함수와 필요한 인자인 "/bin/sh" 문자열을 예로 든다.
먼저 system 함수의 주소를 알아내는 방법은 두 가지가 있는데 테스트용 파일은 위와 같다.
1. system 함수 주소
1) gdb
system 함수 주소를 찾기 위한 첫 번째 방법은 gdb이다. 위와 같이 gdb로 파일을 실행하고 main 함수에 브레이크 포인트를 설정한 후 실행한다. 그리고 p(print) 명령어로 system 함수 주소를 확인할 수 있다.
2) ldd
system 함수 주소를 찾기 위한 두 번째 방법은 ldd이다. ldd 명령어는 어떤 라이브러리를 사용하는지 보여주는 명령어이다. 테스트용 파일이 사용하는 공유 라이브러리는 /lib/libc.so.6이고 해당 공유 라이브러리에 system 함수가 포함되어 있기 때문에 objdump 명령어로 system 함수를 찾으면 된다.
위와 같이 (공유 라이브러리 주소 0x40018000) + (system 함수 주소 0x00040ae0) = 0x40058ae0 값으로 system 함수 주소를 구할 수 있다.
2. "/bin/sh" 주소
"/bin/sh" 문자열 주소는 system 함수 주소를 이용하여 구할 수 있다.
위와 같이 system 함수의 주소를 sh 변수에 넣어주고, 해당 주소부터 "/bin/sh" 문자열과 일치하는 주소를 구하면 된다.
그리고 그 주소가 "/bin/sh" 문자열의 주소이다.
'ETC > Security' 카테고리의 다른 글
리눅스 환경에서의 메모리 보호 기법 (0) | 2019.08.02 |
---|---|
PLT & GOT (0) | 2019.08.01 |
RTL / Return To Library (0) | 2019.08.01 |
리눅스 환경에서 환경변수로 저장한 shellcode 주소 알아내기 (0) | 2019.07.23 |