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

你可能感兴趣的:(Canary机制 -格式化字符串漏洞)