canary
嘤嘤,不仅NX打开了,栈里面还有canary,这是什么鬼。。。。。
Canary保护机制的原理,是在一个函数入口处从fs段内获取一个随机值,一般存到EBP - 0x4(32位)或RBP - 0x8(64位)的位置。如果攻击者利用栈溢出修改到了这个值,导致该值与存入的值不一致,__stack_chk_fail函数将抛出异常并退出程序。Canary最高字节一般是\x00,防止由于其他漏洞产生的Canary泄露
需要注意的是:canary一般最高位是\x00,64位程序的canary大小是8个字节,32位的是4个字节,canary的位置不一定就是与ebp存储的位置相邻,具体得看程序的汇编操作
泄漏canary:先通过覆盖Canary最后一个”\x00″字节,来防止0截断,进而通过printf等函数打印出4/8位的Canary,又或者通过格式化字符串泄漏输出canary,之后,计算好偏移,将Canary填入到相应的溢出位置,实现为所欲为的栈溢出
这是这次题目用到的方法,关于canary还有爆破啥的,还需要深入