libc stdout 주소 관련 질문
stdout_offset = libc.symbols["_IO_2_1_stdout_"]
를 통해 libc에 있는 stdout 주소를 확인할 수 있었습니다.
wsl환경에서 실제로 주소를 확인해보고 싶어서 파이썬 익스플로잇코드가 아닌 wsl환경에서 readelf를 통해 찾아보려고 하였습니다.
readelf -s libc.so.6 | grep 'stdout'
-> 는 stdout이 코드 실행 내부에서 실제로 stdout을 가리키는 포인터 주소임으로 이해했는데 맞는지 궁금합니다.- gdb 내에서
print stdout
을 통해(FILE *) 0x7ffff7fa65c0 <_IO_2_1_stdout_>
를 확인하였고 IO_2_1_stdout 임을 확인했는데 이 것을 wsl 내부 경로에서readelf -s libc.so.6 | grep '_IO_2_1_stdout_'
로 했을 때 뜨는게 아무것도 없습니다. 이유가 뭔지 궁금합니다.
#pwnable
작성자 정보
답변
1
qwerty_io
대표 업적 없음
- 맞습니다.
- readelf는
--wide
옵션을 주지 않으면 symbol내용이 잘려 나옵니다. 따라서 아래와 같은 명령어로 확인하셔야 합니다.
user@host:~/dreamhack$ readelf -s --wide /usr/lib/x86_64-linux-gnu/libc.so.6 | grep "_IO_2_1_stdout_"
1601: 00000000002045c0 224 OBJECT GLOBAL DEFAULT 31 _IO_2_1_stdout_@@GLIBC_2.2.5
user@host:~/dreamhack$ readelf -s --wide /usr/lib/x86_64-linux-gnu/libc.so.6 | grep "stdout"
1570: 00000000002046a8 8 OBJECT GLOBAL DEFAULT 31 stdout@@GLIBC_2.2.5
1601: 00000000002045c0 224 OBJECT GLOBAL DEFAULT 31 _IO_2_1_stdout_@@GLIBC_2.2.5