• RELRO(RELocation Read Only)

    在Linux中有两种RELRO模式:"Partial RELRO" 和 "Full RELRO"。Linux中Partical RELRO默认开启。

     Partial RELRO:

编译命令:
gcc -o test test.c // 默认部分开启
gcc -Wl,-z,relro -o test test.c // 开启部分RELRO
gcc -z lazy -o test test.c // 部分开启

  • 该ELF文件的各个部分被重新排序。内数据段(internal data sections)(如.got,.dtors等)置于程序数据段(program's data sections)(如.data和.bss)之前;
  • 无 plt 指向的GOT是只读的;
  • GOT表可写(应该是与上面有所区别的)。

 Full RELRO:

编译命令:
gcc -Wl,-z,relro,-z,now -o test test.c // 开启Full RELRO
gcc -z now -o test test.c // 全部开启

  • 支持Partial模式的所有功能;
  • 整个GOT表映射为只读的。

 
 

  • NX(windows中得DEP)

    NX:No-eXecute

    DEP:Data Execute Prevention

    也就是数据不可执行,防止因为程序运行出现溢出而使得攻击者的shellcode可能会在数据区尝试执行的情况。

    GCC默认开启(可选项如下)

gcc -o test test.c      // 默认情况下,开启NX保护
gcc -z execstack -o test test.c  // 禁用NX保护
gcc -z noexecstack -o test test.c  // 开启NX保护

绕过方法:

 使用 ROP绕过 (如ret2data、ret2libc、ret2strcpy、ret2gets、ret2syscall)

 gadget:virtualprotect、jmp esp、mona.py

 
 

  • Fority

     
     

  • PIE(ASLR)

    PIE:Position-Independent Excutable

    可执行程序得基址随机,为aslr得编译选项,是aslr得一部分

    ASLR:Address Space Layout Randomization

    地址空间随机化

    GCC默认不开启(可选项如下)

gcc -fpie -pie -o test test.c    // 开启PIE
gcc -fPIE -pie -o test test.c    // 开启PIE
gcc -fpic -o test test.c         // 开启PIC
gcc -fPIC -o test test.c         // 开启PIC
gcc -no-pie -o test test.c       // 关闭PIE

绕过方法:

    1、直接RET替换(一般进程也会加载没有随机化的模块,可以找到JMP ESP指令的跳板直接调用)

    2、替换EIP一部分(找到没有随机化的模块然后使用利息泄漏确定EIP的位置,再算出模块的基地址,最后算出要跳的函数地址)

    3、NOP喷射(DEP没开的情况下,创建一大块NOP+shellcode,Heap Spray是在shellcode的前面加上大量的slide code(滑板指令),组成一个注入代码段。      然后向系统申请大量内存,并且反复用注入代码段来填充。这样就使得进程的地址空间被大量的注入代码所占据。然后结合其他的漏洞攻击技术控制程序          流    ,使得程序执行到堆上,最终将导致shellcode的执行。

      统slide code(滑板指令)一般是NOP指令,譬如0x0C(0x0C0C代表的x86指令是OR AL 0x0C),0x0D等等,不影响程序的执行的。)

    4、暴力(如果漏洞不会造成程序崩溃,可以暴力测试256种模块基地址来测试,只到有满足的)最LOW

 
 

  • Canary(栈保护)

    Canary对于栈的保护,在函数每一次执行时,在栈上随机产生一个Canary值。之后当函数执行结束返回时检测Canary值,若不一致系统则报出异常。

    编译选项:

gcc -o test test.c                       //默认关闭
gcc -fno-stack-protector -o test test.c  //禁用栈保护
gcc -fstack-protector -o test test.c     //启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码
gcc -fstack-protector-all -o test test.c //启用堆栈保护,为所有函数插入保护代码 

 
 

 
 

最新文章

  1. SSRS Reports 2008性能优化案例二
  2. Rails学习笔记二
  3. hibernate(九)多对多关联
  4. Android TextView文字横向自动滚动(跑马灯)
  5. IA32系统级架构总览(一) 实模式和保护模式
  6. 【学习笔记】Xcode常见设置
  7. Getting started with Apache Camel--转载
  8. Zabbix探索:使用msmtp进行邮件告警
  9. 【转】Oracle 10g RAC TAF
  10. PowerDesigner将PDM导出生成WORD文档--温习老知识
  11. ocp11g培训内部教材_051课堂笔记(047)_SQL
  12. [国嵌攻略][100][嵌入式Linux内核制作]
  13. thinkphp5.0 文章详情页 上一篇 下一篇
  14. java入门-day02
  15. Nacos发布0.5.0版本,轻松玩转动态 DNS 服务
  16. fg和bg前后台调度命令
  17. MySQL复制相关参数详解
  18. Linux背背背(2)
  19. 原生js实现图片轮播效果
  20. hook api实现

热门文章

  1. vmware桥接模式-无法内网通-克隆机要删除的文件-ssl
  2. idea中maven下载jar包不完整问题
  3. 百度网盘下载神器 PanDownload v2.0.9(破解版、不限速)
  4. Delphi生成即调用带窗体的Dll
  5. [转]java 的HashMap底层数据结构
  6. sql注入入门--基本命令
  7. Opencv从文件中播放视频
  8. POJ 1847:Tram
  9. MySQL--通过.frm和.ibd对mysql数据恢复
  10. 干货|Kubernetes集群部署
Nginx-ingress Controller