攻防世界 Mary_Morton 关于canary
由于格式化字符串我总是忘记,而且也没做过关于canary相关的题目,特此做此笔记
首先检查文件:

开了canary保护,拖进ida看看源码



其实就是两个漏洞,一个格式化字符串,一个栈溢出,这里可以考虑通过格式化字符串去泄露canary的值,然后再用栈溢出覆盖回去,本题提供了一个后门函数

这里复习一下Canary保护,就是在栈里再添加一个变量,赋予随机值,这里看汇编fs:28h,这里好像是fs段寄存器0x28里存放着一个随机的保护值,如果这个变量在执行最后的leave ret的操作之前被修改了,则会调用__stack_chk_fail,直接报错

那么第一步我们先通过格式化字符串看buf的偏移,这里偏移是6,那么偏移canary的变量v2就可以算了,首先buf是rbp-0x90,v2是rbp-0x8,那么buf和v2的之差就是0x88,又因为这个是64程序,一个单位占8字节,那么0x88除以8等于17,那么格式化字符串距离v2的偏移就是17+6=23个单位

那么就有
1 | |