pwntools를 이용해서 libc에서 함수 및 stdin,stdout 오프셋구하기
2018. 5. 22. 23:21
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")} p = process("./shop", env=env) | cs |
'Pwnable!!' 카테고리의 다른 글
64bit ROP & 64bit BOF (0) | 2018.05.24 |
---|---|
Pwntool gdb attach 및 debug모드 + LD_PRELOAD (0) | 2018.05.23 |
libc-database를 이용한 함수 주소 구하기 (0) | 2018.05.21 |
리눅스 Command Injection 공백 필터우회 (0) | 2018.05.18 |
Memory Leak 기법 (0) | 2018.05.15 |