NX Stack Relro PIE四种保护

NX 保护 no execute(栈禁止执行)

*******可写的不可执行,可执行不可写(栈段,堆段呢?)****************
(又称DEP)数据执行保护。可写的不可执行,可执行的不可写
栈上的数据没有执行权限,防止攻击手段:栈溢出 + 跳到栈上执行 shellcode。
NX是英语“No eXecute”的简称,中文一般翻译成“禁止运行”,是一种CPU应用技术,用来把存储器区域分隔为只供
存储处理器指令集单元,或只供数据使用单元。任何使用NX技术的存储器,代表仅供数据使用,因此处理器的指
令集并不能在这些区域存储。
这种技术可防止大多数的缓冲溢出攻击,即一些恶意程序,把自身的恶意指令集放在其他程序的数据存储区并运行,
从而控制整台计算机。

Stack Canary(栈中多一个random)

********栈空间加个随机数,以检测是否被覆盖**********
在栈帧中插入一个随机数,函数执行完在返回之前,程序通过检查这个随机数是否改变来判断是否存在栈溢出。

PIE 与 ASLR (地址随机化)

PIE(Position Independent Executable) 位置独立可执行
ASLR stack、mmap以及堆区,这些区间的地址随机化。即便是shellcode打入到这些区域,因不知道地址,无法
跳转到。

在这里插入图片描述

Relro(GOT表重定向只读)

(Relocation Read-Only)重定向只读。*****GOT表只读********
 其实GOT表是一个地址表(数据),只保存地址,PLT表是个代码表。刚开始GOT没有重定向,其指向PLT表,等被
 重定向之后就更改为真是的地址。当然这个过程很复杂的,设计到的细节很多。
 因此如果GOT表被劫持了,会发生什么。
 

RELRO为” Partial RELRO”时,说明我们对GOT表具有写权限。“FULL RELRO”表示我们只有读取权限

GOT(Global Offset Table)全局偏移表,保存了共享库(动态链接库)中函数实际地址(如printf(), gets()
 …),PLT(Procedure Linkage Table)进程链接表,保存了对应GOT表项的地址。got表用于动态链接时候,
 linux下加载使用GOT定位后间接寻址得到函数真实地址,每个got项伴随一个plt项用于跳转到got地址,等到函数
 调用,got表写入真实地址,call函数的时候使用plt跳转到got得到真实地址。
 好像还有个什么plt.got表的,细节忘了,有空再写

当然虽然开启了,还有一些绕过方式的,哈哈

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值