728x90
728x90
728x90

bof 문제를 풀다보면 RTL을 사용하기 위해 공유 라이브러리 내의 함수를 이용할 때가 있다.

여기선 system 함수와 필요한 인자인 "/bin/sh" 문자열을 예로 든다.

 

[사진 1]

먼저 system 함수의 주소를 알아내는 방법은 두 가지가 있는데 테스트용 파일은 위와 같다.

 

1. system 함수 주소

 1) gdb

[사진 2]

system 함수 주소를 찾기 위한 첫 번째 방법은 gdb이다. 위와 같이 gdb로 파일을 실행하고 main 함수에 브레이크 포인트를 설정한 후 실행한다. 그리고 p(print) 명령어로 system 함수 주소를 확인할 수 있다.

 

 

 2) ldd

[사진 3]

system 함수 주소를 찾기 위한 두 번째 방법은 ldd이다. ldd 명령어는 어떤 라이브러리를 사용하는지 보여주는 명령어이다. 테스트용 파일이 사용하는 공유 라이브러리는 /lib/libc.so.6이고 해당 공유 라이브러리에 system 함수가 포함되어 있기 때문에 objdump 명령어로 system 함수를 찾으면 된다.

위와 같이 (공유 라이브러리 주소 0x40018000) + (system 함수 주소 0x00040ae0) = 0x40058ae0 값으로 system 함수 주소를 구할 수 있다.

 

 

2. "/bin/sh" 주소

"/bin/sh" 문자열 주소는 system 함수 주소를 이용하여 구할 수 있다.

[사진 4]

위와 같이 system 함수의 주소를 sh 변수에 넣어주고, 해당 주소부터 "/bin/sh" 문자열과 일치하는 주소를 구하면 된다.

그리고 그 주소가 "/bin/sh" 문자열의 주소이다.

728x90
728x90

+ Recent posts