RELRO (ReLocation Read-Only)保护纯新手入门(一)

RELRO,堆栈地址随机化, 是一种用于加强对 binary 数据段的保护的技术。

partial relro (部分开启,got 不可写)

full relro(全部开启,got 可写)

那么这是个什么玩意捏

 

1.基本介绍

堆栈地址随机化:是地址空间布局随机化(ASLR)的一种,它实现了栈帧起始地址一定程度上的随机化,令攻击者难以猜测需要攻击位置的地址。

地址空间布局随机化(ASLR):是一种防范内存损坏漏洞被利用的计算机安全技术。详细一点,就是地址空间配置随机加载是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的一种技术。

binary: sql 中固定长度的 n 个字节二进制数据。N 必须从 1 到 8,000。存储空间大小为 n+4 字节。 在此代表二进制

SQL:结构化查询语言,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,这里不做过多介绍。

GOT:Global Offset Table,全局偏移表/全局函数表,每一个外部定义的符号在这里有相应的条目,GOT位于ELF(一种用于二进制文件 、可执行文件、目标代码、共享库和核心转储格式文件的文件格式)的数据段中,叫做GOT段。

全局函数:定义在类外的函数,可以被其他文件内的函数调用。

PLT:Precedure Linkage Table,过程链接表/内部函数表,linux里的延迟绑定技术,顾名思义它就是一个过度,真正的终点还是在GOT表里。

内部函数:只能被本文件中其他函数所调用,定义内部函数时,在函数名和函数类型的前面加static。

那么这里可能会有疑问:为什么要存在PLT,存在过度,而不是直接到达GOT呢?

这就比如说,你是一个有很多亲戚的人,你每周都需要拜访这些亲戚,所以你将这些亲戚的地址都记在了一个本子上,等你要去拜访的时候就翻出来查找,那么这个本子就是一个PLT表,它里面每一个地址都会跳转到对应的GOT表地址(你的亲戚家)

假如有一天,你觉得每天跑来跑去好麻烦,于是把你所有亲戚全都接到了你家里住,每周只要到对应的房间去拜访就可以了,那个本子也就没用了,你扔掉了它。这时,就是在没有PLT表的情况下,直接把GOT表弄来了。

你觉得是一个登记本占地面积小,还是一屋子亲戚占地面积小呢。

这就是PLT表存在的原因之一,为了更高效的利用内存。

另一个原因就是可以增加安全性。

GOT可写:说明对GOT表具有写权限。

不可写就是没权限呗

(GOT覆写放下章了)

 

手动分割线

介绍完了,后面会出(二)实战

 

 

 

 

 

 

 

 

 

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值