软件安全实验——pre5(缓冲区溢出漏洞预习)

1、解释gcc参数-fno-stack-protector的含义,gcc的参数里面与stack overflow相关的还有哪些?

答:GCC 编译选项 -fno-stack-protector禁用栈保护功能,默认是启用的;
在这里插入图片描述

  gcc 的栈保护机制是指,如果编译器支持堆栈预警,它将发出额外的代码,在输入函数时将预警值插入堆栈框架,并在退出时验证该值。
  在栈的缓冲区(大小通常由程序员给定)写入内容前,在结束地址之后与返回地址之前,放入随机的验证码,由于栈帧是从内存高址段向内存低址段增长的,结束地址在高址段;返回地址在低址段,栈溢出时,会从高址段向低址段覆盖数据,因此如果想要覆盖返回地址的内容,必定先覆盖结束地址,验证码,才能覆盖返回地址,因此可以通过比较写入缓冲区前后的验证码是否发生改变,来检测并阻止溢出攻击。
-fstack-protector:启用栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码。-fstack-protector只保护字符串(缓冲区溢出攻击的主要问题目标),
-fstack-protector-all:启用栈保护,为所有函数插入保护代码。-fstack-protector-all保护所有类型

gcc的参数里面与stack overflow相关的还有
-z execstack:启用堆栈可执行机制,默认是禁用的;
-z noexecstack:关闭堆栈可执行机制
  gcc编译器默认开启了NX选项,如果需要关闭NX选项,可以给gcc编译器添加-z execstack参数,NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,以前的经常用的call esp或者jmp esp的方法就不能使用,但是可以利用rop这种方法绕过。

2、(一定要看)非常仔细地阅读Smashing The Stack For Fun And Profit.

http://www.cs.wright.edu/people/faculty/tkprasad/courses/cs781/alephOne.html

缓冲区溢出,以及它们的漏洞利用是如何工作的

3、阅读下面两篇文章的同时,熟悉一下gdb基本操作,看汇编设断点查看内存之类的基本操作了解一点。

http://seanmurphree.com/blog/?p=157

IO 级别 8 – C++ 中的缓冲区/堆溢出

https://tomasuh.github.io/2015/01/19/IO-Wargame.html Level 3部分

格式化字符串漏洞解决方案级别 1-9

4、解释linux用root执行下面这条命令sysctl -w kernel.exec-shield=1的含义和用途。

答:kernel.exec-shield可执行栈保护,字面含义比较“绕”,实际上就是用来控制能否执行存储在栈中的代码,其值为1时表示禁止;为0时表示允许;默认为1,表示禁止执行栈中的代码,如此一来,即便覆盖了函数的返回地址导致栈溢出,也无法执行shellcode。
在这里插入图片描述

在当前版本的ubuntu中sysctl -w kernel.exec-shield=1已经被禁止使用。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值