728x90
아직 완성되지 않은 글입니다. 경험이 많이 없거든요
stdout, stdin의 주소나 어떠한 libc안의 함수의 주소가 노출되었을때, libc_base의 주소를 구할 수 있습니다.
libc_base의 주소를 구하면, offset을 안다는 가정하에 libc내의 함수를 사용할 수 있습니다.
이걸 왜 알아야 하냐면, 모든 프로그램은 라이브러리 함수를 사용할때, ASLR이라는 기법이 사용되어 주소가 랜덤으로 바뀐다고 합니다. (libc덩어리 자체가 랜덤으로 움직입니다.) 이게 우회되는 이유는, 모든 주소가 랜덤으로 바뀌는게 아니라 전체가 하나의 랜덤값으로 움직이기 때문에 offset을 안다면 우회할 수 있습니다.
예를 들어 stdout의 주소값이 노출되었다고 하면,
libc_base_addr = stdout_addr - libc.symbols['_IO_2_1_stdout_']
이처럼 구할 수 있습니다.
참고 글
stdout의 주소가 이상하게 생겼는데 저걸 어떻게 아냐고요?
현재 제가 하는 공부들은 모두 오픈소스로도 가능한 난이도입니다. 구글링으로 해결됩니다!
objdump -D [libc] | grep "키워드"
objdump 명령어 참고 글
ASLR은 따로 해제를 할 수 있는 보호기법이지만, 지금 제가 푸는 문제들은 왠만하면 걸려있더라구요.
ASLR을 우회하는 방법은 libc_base 입니다. 명심하겠습니다!
728x90
'pwnable' 카테고리의 다른 글
바이너리 파일을 다른 버전의 libc로 실행 (pwntool) (0) | 2021.04.01 |
---|---|
one_gadget (0) | 2021.04.01 |
ROP(64bit) (0) | 2021.03.31 |
ROP(32bit) (0) | 2021.03.30 |
ROP에 대하여 (0) | 2021.03.30 |