lib = ELF("라이브러리")


lib.symbols['함수명'] 으로 offset값을 얻어올 수 있다.


여기서 stdout이나 stdin의 offset을 구할때 그냥 lib.symbols['stdout']이나 lib.symbols['stdin']으로 해서 offset을 구해서 stdout,stdin의 위치를 계산하면 굉장히 엉뚱한 값이 나오므로 주의하자 ㅡㅡ; 이것때문에 꽤나 삽질했다. stdin이나 stdout의 offset은 아래와 같이 해서 구하자.


stdout_offset = lib.symbols['_IO_2_1_stdout_']

stdin_offset = lib.symbols['_IO_2_1_stdin_']


함수명은 그냥 함수명으로 찾아주면 된다.

system_offset =  lib.symbols['system']



참고로 문제풀때 바이너리와 라이브러리까지 함께 주어졌다면 process에 LD_PRELOAD로 라이브러리를 설정해주는게 심적으로 좋음...

아래는 pctf shop문제에서 env값으로 LD_PRELOAD 설정예시


1
2
env = {"LD_PRELOAD": os.path.join(os.getcwd(), "libc.so.6")}
= process("./shop", env=env)
cs


+ Recent posts