pwn入门:sploitfun-典型的基于堆栈的缓冲区溢出详解

虚拟机环境:Ubuntu 14.04(x86)

本文是基于sploitfun系列教程的详细解析,sploitfun对于纯新手而言,其中有些东西还是不够详细,新手不能很好的接触到其中原理,故作此文进行补充

编译代码第一行,表示关闭ASLR(地址空间布局随机化)。kernel.randomize_va_space堆栈地址随机初始化,很好理解,就是在每次将程序加载到内存时,进程地址空间的堆栈起始地址都不一样,动态变化,导致猜测或找出地址来执行shellcode 变得非常困难。

编译代码第二行表示,gcc编译时,关闭DEP和栈保护。

当-f-stack-protector启用时(CANNARY栈保护),当其检测到缓冲区溢出时(例如,缓冲区溢出攻击)时会立即终止正在执行的程序,并提示其检测到缓冲区存在的溢出的问题。这是gcc编译器专门为防止缓冲区溢出而采取的保护措施,具体方法是gcc首先在缓冲区被写入之前在buf的结束地址之后返回地址之前放入随机的gs验证码,并在缓冲区写入操作结束时检验该值。通常缓冲区溢出会从低地址到高地址覆写内存,所以如果要覆写返回地址,则需要覆写该gs验证码。这样就可以通过比较写入前和写入后gs验证码的数据,判断是否产生溢出。

NX即No-execute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。

工作原理如下图:

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值