libc stdout 질문
안녕하세요. 이번 문제를 풀면서, stdout
의 주소를 통해 libc_base
를 leak하여 풀었는데,
libc의 stdout
의 offset은 libc_base = libc_stdout - libc.symbols['stdout']
가 아닌, libc_base = libc_stdout - libc.symbols['_IO_2_1_stdout_']
인 것을 어떻게 알아낼 수 있나요..?
readelf -s ./libc.so.6 | grep stdout
으로도 stdout
밖에 안나와서 stdout
으로 했는데,
왜 이 offset으로 하면 안되는지와, 문제를 풀 때 _IO_2_1_stdout_
을 symbol으로 어떻게 찾을 수 있는지 궁금합니다.
감사합니다.
#pwnable
작성자 정보
답변
1
mini-chip
Perfect 10
안녕하세요, leak하신 부분은 실행 파일 내부에 존재하는 전역 변수 stdout
에 들어 있는 값을 leak 하신 겁니다. 전역 변수 stdout
은 libc에 있는 stdout
심볼을 가리키는 것이 아니라 _IO_2_1_stdout_
를 가리키는 포인터이므로, 해당 변수에 있는 값을 leak하셨으면 leak한 값은 libc의 _IO_2_1_stdout
을 의미하게 됩니다.