pwn题目中常见的保护机制

做pwn题目的时候一般拿到题目都是要checksec一下看看开了什么保护机制,如下图

第一个是在gdb里面的checksec,第二个是在命令行直接使用的checksec

先简单介绍一下第二种的含义,然后再详细介绍第一种里面的含义:

RELRO : Partial RELRO 这个是让程序到处跑,让它位置不固定

Stack: No canary found 这个就是有没有开启栈上面的保护

NX: NX enabled 不让栈上面的数据执行,就算你把eip寄存器的值指向了栈,我也不让你去执行。我一检测你指过去,我就报错,然后退出

PIE: No PIE (0x400000) 原理和RELRO差不多,就是不让你猜到我的程序在哪

Canary(cookie)

注:我括号cookie的原因是本来就是cookie只不过在linux里面cookie叫canary。用cookie更好理解一点,就是用cookie来验证身份保证安全性。

Canary保护即栈保护

Canary保护主要是用来防护栈溢出的,在开启Canary保护程序调用函数的时候,会在栈中压入一个随机的Canary值,在函数结束的时候程序会判断Canary的值是否发生变动,如果发生变动就认为是程序遭到了攻击,程序就会直接异常退出。

Canary值通常和函数返回地址在栈中相连 ,所以攻击者在覆盖返回地址的时候往往也会将 Canary值给覆盖掉,导致栈保护检查失败而阻止 shellcode的执行,避免漏洞利用成功。

Fortify

防止缓冲区溢出攻击(不常见)

NX

NX即No-execute(不可执行)的意思,限制一块内存区域不可执行。

PIE

如果程序开启了PIE保护的话,在每次加载程序时都变换加载地址


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!