WEB开发网
开发学院网络安全黑客技术 破坏力依然不可小视 缓冲区溢出攻防 阅读

破坏力依然不可小视 缓冲区溢出攻防

 2006-11-07 20:09:59 来源:WEB开发网   
核心提示: 如果你还注意到cpu执行完“ret 4”指令后,esp指向“szComputer+24”处,破坏力依然不可小视 缓冲区溢出攻防(4),那么你已经看到该在哪拐弯了,绝大多数情况下,stubstubcode非常短,只有20个字节左右,我们能在进程

如果你还注意到cpu执行完“ret 4”指令后,esp指向“szComputer+24”处,那么你已经看到该在哪拐弯了。绝大多数情况下,我们能

在进程的地址空间中找到一条拥有固定地址“jmp esp”指令,我们只需在“szComputer+16”处填上这条指令的地址,然后再从“szComputer+24”开始填入攻击指令就可以了。这样,ShowComputerName返回时,cpu执行“ret 4”指令,再执行“jmp esp”指令,控制权就转移到我们手里了。怎么样?很简单吧!

不过你还不要高兴得太早,上面所说的只是缓冲区溢出攻击的基本原理。而理论与实际永远是有一段距离的。要真正完成攻击,我们还有好几个棘手的问题需要解决。

首先是是如何处理一些不允许出现在字符串中的字符。在上面的代码中,如果我们构造的字符串的某个字节是0或者“”,GetComputerName就会拒绝拷贝后面的数据,所以在我们的“计算机名”中不能有任何一个字节是0或“”。“”可能还好说一点,但一段“真正能做点事情”的代码不包括0几乎是不可能的。怎么解决这个矛盾呢?最简单的方法是异或。先写好真正的代码并编译得到结果,我称它为stubcode。然后找一个数字n,要求①0≤n≤255;②n是允许出现在字符串中的字符;③n与stubcode的任何一个字节异或后都是允许出现的字符。用n与stubcode逐字节进行异或,得到异或结果。很明显,要找到这样一个n,stubcode就不能太长,只是做一些简单的准备工作,然后加载后续代码完成更多的工作,这也是我把它称为stubcode的原因。其实stubcode代码也需要一个stubcode,我们就把它称为stubstubcode吧,它的任务是用n与异或结果再逐字节异或一次来恢复stubcode的原貌,然后把控制权交给stubcode。stubstubcode非常短,只有20个字节左右,通过精心设计就可能避免在其中出现不允许的字符。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:破坏力 依然 不可

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接