canary_pie

Stack Canaries (取名自地下煤矿的金丝雀,因为它能比矿工更早地发现煤气泄漏,有预警的作
用)是一种用于对抗栈溢出攻击的技术。

其原理是在的入口处,从fs/gs寄存器中取出一个4字节(eax)或者8字节(rax)的值存到栈上,当函数结束时会检查这个栈上的值是否和存进去的值一致。

image-20231218203251503

Canary bypass的姿势

格式化字符串绕过canany

通过格式化字符串读取canary的值

Canary爆破(针对有fork函数的程序)

fork作用相当于自我复制,每一次复制出来的程序,内存布局都是一样的,当然canary值也一样。那我们就可以逐位爆破,如果程序崩溃了就说明这一位不对,如果程序正常就可以接着跑下一位,直到跑出正确的canary

Stack smashing(故意触发canary_ssp leak)

劫持_stack_chk_fail

修改got表中 stack chk fail函数的地址,在栈溢出后执行该函数,但由于该函数的地址被修改,所以程序会跳转到我们想要执行的地址