缓冲区溢出攻击原理

当我们不知道程序的代码是,当然不好进行缓冲区溢出攻击。但是可以使用DEBUG来进行,然后查看CPU的寄存器,主要是查看EIP(PC)寄存器是否变成了我们攻击中使用的字符。
第一步,使用重复字符来判断EIP中出现的地址是否是我们攻击字符的ASCII码,由于使用重复字符如,AAA...所以很好判断
第二步,使用递增或有规律的字符如ABCDEFG...来确定是那一部分进入了EIP,假如是EFGH。
第三步,使用EF00,EF01...来代替原来的EFGH,然后就会发现是哪个EFGH进入了EIP,这样就能确定具体的溢出攻击代码长度!
    但是,现在我们知道了应该在输入字符串中的什么位置放入返回地址,但是我们怎么保证这个地址就会跳转到我们想要执行的程序处呢?这个概率非常之小。但是我们可以使用CPU的NOP指令来帮忙,如果我们在一段内存中存入一长串NOP,后面跟上我们要执行的代码,然后只要我们输入的返回地址能够跳到NOP中,那么机器就一定会顺序执行到我们想要执行的恶意代码!这就大大提高了准确率。当然,想一下就知道,别人的程序在运行,我们只有从输入处才能输入我们的代码,所以我们的输入中应该包含一堆NOP和想要执行的代码,但是程序在执行时,栈空间乃至程序空间数据空间都是我们不知道的,所以我们将NOP在内存(也就是栈)中的地址写入返回地址中的概率还是很小的。当然,如果写不成功,将不会执行我们想要执行的代码,但是会导致程序崩溃!因为返回地址不是该程序正确执行的地址。
    还需要考虑的是,缓冲区大小的问题,如果缓冲区特别小,放入NOP也就特别少,否则返回地址都被NOP覆盖了。这里NOP要根据特定CPU的类型来写。当然,当有很多NOP在网络中传输时,会被IDS检测到,但是可以使用变相的NOP指令,如跳转到下一条指令处执行的指令,对某个寄存器加0的指令,对某个寄存器乘以1的指令等,只要结果如NOP指令这样让程序顺序执行到我们想要执行的代码处就可以了。
    常见的缓冲区溢出攻击程序的结构如下
            NOP
            NOP
            NOP
             :
             :
        执行一个shell的机器代码
         指向NOP区的返回地址              

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值