一.
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_space4.运行
pwnmeOK!
二.调试
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存在于栈空间上,所以我们只要找到它栈空间上的位置,就可以泄露它的值。接下来我们就利用格式化字符串漏洞泄露Canary3.格式化字符串漏洞在
printf在下断点。
图片.png
4.运行 输入值
5.然后查看栈空间内容,esp =
0xffffcf80,指向字符串起始位置 =0xffffcfec
图片.png
注:由此可知格式化字符串偏移为 =
(0xffffcfec - 0xffffcf80) / 4 = 27















网友评论