libc stdout 주소 관련 질문
stdout_offset = libc.symbols["_IO_2_1_stdout_"]

를 통해 libc에 있는 stdout 주소를 확인할 수 있었습니다.

wsl환경에서 실제로 주소를 확인해보고 싶어서 파이썬 익스플로잇코드가 아닌 wsl환경에서 readelf를 통해 찾아보려고 하였습니다.

  1. readelf -s libc.so.6 | grep 'stdout' -> 는 stdout이 코드 실행 내부에서 실제로 stdout을 가리키는 포인터 주소임으로 이해했는데 맞는지 궁금합니다.
  2. 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
대표 업적 없음
  1. 맞습니다.
  2. 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
2024.09.12. 16:22
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기