引入
Ctf中的pwn题,在利用gcc编译的时候,保护是如何开启的,如何编译出来的,保护都有什么由于在ctf中,大部分都是linux pwn,Windows pwn很少见,所以我这里以linux pwn来举例。
PWN的保护
在pwn里,保护一共是四种分别是RELRO、Stack、NX、PIE。
1.RELRO(ReLocation Read-Only):分为两种情况,第一种情况是Partial RELRO,这种情况是部分开启堆栈地址随机化,got表可写,第二种,Full RELRO是全部开启,got表不可写,Got表是全局偏移表,里面包含的是外部定义的符号相应的条目的数据段中,PLT表,是过程链接表/内部函数表,linux延迟绑定,但是最后还是要连接到Got,PLT表只是为一个过渡的作用。
2.Stack(canary):这个保护其实就是在你调用的函数的时候,在栈帧中插入一个随机数,在函数执行完成返回之前,来校验随机数是否被改变,来判断是否被栈溢出,这个我们也俗称为canary(金丝雀),栈保护技术。
3.NX(no execute):为栈不可知性,也就是栈上的数据不可以当作代码区执行的作用。
4.PIE(Position Independent Executable):PIE的中文叫做,地址无关可执行文件,是针对.text(代码段),.data(数据段),.bss(未初始化全局变量段)来做的保护,正常每一次加载程序,加载地址是固定的,但是PIE保护开启,每次程序启动的时候都会变换加载地址。
编译
在gcc中,利用默认参数进行生成,默认生成的是RELRO、PIE、NX保护是全开的情况,但是有一些题,会针对题型的不同,来更变所开启的保护机制。
从头开始,关闭所有的保护开始关闭所有保护开始gcc -z e

本文详细介绍了PWN中的四种保护机制:RELRO、Stack、NX和PIE,并通过实例展示了如何在GCC中启用或禁用这些保护措施。通过对比分析不同保护级别的二进制文件,帮助读者理解每种保护机制的具体作用。
最低0.47元/天 解锁文章
1270

被折叠的 条评论
为什么被折叠?



