Canary学习
Canary即系统压入的值,用00结尾截断字符串,用xor比较检测栈是否被破坏。
泄露canary
条件:
* 有合适输出函数
* 函数不会崩溃
🌚这是教学关卡,就别在意为啥有现成的shell地址了。
你也能发现,这种方法局限性挺大的,因为你要用到能输出的函数
;并且还要保证这个程序不会轻易退出(不然在leave之前就会检测了)
爆破canary
条件:
* 这个要求函数中有fork()函数,并且还不能崩溃能while的那种。
这让我想起写时拷贝技术。也就是为了省内存空间,将fork+exec适配地更好。
当然,这里主要是因为每个进程canary是确定的,你可以用pwndbg输入canary --all
,会发现全都是一样的。
因为有fork函数(这个题目有点为了出题而出题,哈哈),相当于每次失败就立马再while一个新fork,保证每次的canary都是一样的。
这里值得说的是如何在fork中追蹤子进程,可以用pwngdb的set follow-fork-mode child
。
此处附上链接,帮助我许多。
本文来自博客园,作者:muyiGin,转载请注明原文链接:https://www.cnblogs.com/muyiGin/p/18361897