目录
一、保护机制
1.NX:数据执行保护
即DEP,是进制程序在非可执行的内存区中执行指令。在80x86体系中,操作系统的内存管理是通过页面表存储方式来实现,其最后一位就是NX位,0表示允许执行,1表示禁止执行。NX一般是防止直接在堆和栈上运行shellcode代码,gcc默认开启不可执行栈功能,添加编译选项z -exestack可开启栈可执行功能。
2.ASLR:地址空间随机化
/proc/sys/kernel/randomize_va_space里的值可以控制系统级的ASLR,使用root权限可以进行修改,有三个值可以设置:
(1)0:关闭ASRL
(2)1:mmap base、stack、vdso page将随机化,这里意味着“.so”文件将被加载到随机地址。连接时制定了-pie选项的可执行程序,其代码段加载地址将被随机化。假如配置内核时如果制定了
CONFIG_COMPAT_BRK,则randomize_va_sapce默认为1,此时heap没有随机化。
(3)2:在1的基础上增加了heap随机化。配置内核如果禁用CONFIG_COMPAT_BRK,则randomize_va_sapce默认2,ASLR可以保证在每次程序加载的时候自身和所加载的库文件都会被映射到虚拟地址空间的不同地址处。
(3)PIE:代码段随机化
(4)RELRO:重定位,一般分为partial relro和full relro,具体区别就是前者重定位信息可写,而后者不可写
(5)STACK CANARY:栈溢出保护,gcc编译程序默认开启,添加编译选项-fno-stack-protector会关闭程序的stac canary栈保护。
二、PWN漏洞类型
漏洞类型主要分为栈漏洞、堆漏洞、格式化字符串漏洞、整形漏洞、逻辑漏洞