canary保护

本文介绍了Canary保护机制,用于防止栈溢出攻击。主要内容包括:Canary的设置与验证过程,如何利用Canary泄露shellcode,堆栈执行权限的重要性,函数地址随机化,以及在不同情况下的Canary保护效果。通过实例分析了如何计算偏移量以绕过Canary保护,以及在实际操作中需要注意的细节。

在这里插入图片描述
1.在函数刚开始执行时会设成一个标志,这个标志会入栈,当程序执行完之后,他会校验canary值是不是会发生变化,如果发生变化,说明程序被改过,发生异常,如果没改过就正常

这个在突破时我们用canary去泄露,canary是一个随机的值,每次程序执行他都是一个变量,核心就是每次执行时泄露一下,然后去拼接我们的shellcode

2.正常情况下能够在堆栈中加上我们shellcode的代码,但如果堆栈没有执行权限,shellcode就不能执行

3.函数地址随机化

堆喷射就是在堆栈里加很多shellcode,程序执行到任何一个shellcode都会执行获取shell

4.got表不可改

Canary保护
在这里插入图片描述在这里插入图片描述第一行参数:所有程序都会加上canary保护
第二行:只有函数中有char这样数组的才会给你加上canary保护
第三行:禁止canary保护
-m32:编译成32位程序
-o0:不进行任何优化
Canary.c:我们要编译的文件
-o:要输出文件
B:打断点
第三行:查看寄存器的值(ebp)
第四行:查看栈里的数据

目标程序
在这里插入图片描述
不加保护时在这里插入图片描述
第二句做内存对齐用
可以减少读取次数
如下图:一次读取四个字节,对齐之前我们先读取a,再读取三个b,最后b还有再读最后一个字节;如果时对齐之后,直接分两次读完a和b
在这里插入图片描述
第一行和第三行是为了保护main方法的,确保main执行完后返回到哪里
调试看一下

反汇编主函数后在最开始的地方下断点
R、n起来
在这里插入图片描述
现在esp的地址相当于栈里的ret,覆盖就要覆盖它
执行前三行代码对我们的esp是没有影响的,第一行和第三行是为了保护我们的esp的,避免受第二行的影响
在这里插入图片描述
加canary后:+17,+23
此时eax已经是我们的canary值了

在这里插入图片描述发现尾号1300的canary值
在这里插入图片描述
xor异或比较,如果正常则下一命令,如果错误跳转到call那里执行异常程序在这里插入图片描述输入东西动态调试看看canary的值

它这个默认printf打印format+4的位置

在这里插入图片描述在这里插入图片描述
%08x被加入到前面的format变成字符串了
在这里插入图片描述
第二个程序
在这里插入图片描述
看我们输入的字符串在栈中距离canary有多远,从而读取其值
在这里插入图片描述
往下取到第十五个就是canary的值即尾号d5dc的位置
在这里插入图片描述
获取内存地址
在这里插入图片描述
Canary地址,08x是取8位
在构造payload前还要计算偏移量

在这里插入图片描述从d5bc的输入开始覆盖,先覆盖dc的canary的值,再覆盖ret值

写脚本时忘了函数可以写入print dir(开头字母)

在这里插入图片描述Canary要翻转改成小端序

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值