Canary机制 -格式化字符串漏洞

一.
canary相当于一个标志当修改程序时,会发现程序是否被修改。
注: 找到canary偏移地址,填充打印出canary的值
1.程序源码:

图片.png

2.编译:gcc -m32 -ggdb -z execstack -fstack-protector -no-pie -o pwnme Cannary.c生成pwnme程序
3.查看偏移地址是否一直在变动:ldd pwnme
注:关闭地址随机化echo 0 > /proc/sys/kernel/randomize_va_space
4.运行pwnme
OK!
二.调试
1.
图片.png

2.进入汇编窗口layout asm
图片.png

3.输入ni执行下一条指令,回车快捷方式
4.一直往下xor %gs:0x14,%eax 异或进行比较
图片.png

三.
canary泄露
1.canary是一直变化的值,每运行一次就发生一次变化。eax的值变,也就说明canary的值也发生变化。比较如下图:
图片.png
实际情况,跟自己的eax的值.
2.所以说canary的值具有不可预测性
但是,eax的值来源于gs:0x14,而gs:0x14存在于栈空间上,所以我们只要找到它栈空间上的位置,就可以泄露它的值。接下来我们就利用格式化字符串漏洞泄露Canary
3.格式化字符串漏洞在printf在下断点。
图片.png

4.运行 输入值
5.然后查看栈空间内容,esp = 0xffffcf80,指向字符串起始位置 =0xffffcfec
图片.png

注:由此可知格式化字符串偏移为 = (0xffffcfec - 0xffffcf80) / 4 = 27

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容