通过工具checksec可以查看ELF文件保护机制
gcc编译参数
NX:-z execstack / -z noexecstack (关闭 / 开启)
Canary:-fno-stack-protector /-fstack-protector / -fstack-protector-all (关闭 / 开启 / 全开启)
PIE:-no-pie / -pie (关闭 / 开启)
RELRO:-z norelro / -z lazy / -z now (关闭 / 部分开启 / 完全开启)
RELRO (RELocation Read Only)
重定位表只读,重定位表即为.got
和.plt
两个表。此项技术针对对GOT(Global Offset Table)的攻击。linux下RELRO有Partial RELRO
和Full RELRO
两种模式 。区别于:Partial RELRO
模式下,GOT的非plt部分是只读的,而got.plt可写; Full RELRO
模式下 ,整个GOT被标记为只读。
Canary(栈保护)
Canary 的意思是金丝雀,来源于英国矿井工人用来探查井下气体是否有毒的金丝雀笼子。工人们每次下井都会带上一只金丝雀。如果井下的气体有毒,金丝雀由于对毒性敏感就会停止鸣叫甚至死亡,从而使工人们得到预警。在技术上表示最先的测试。
程序在初始化时会生成一个随机值(以