溢出,顾名思义,就是容器已经满了,东西从里面跑了出来。
在计算机领域中,溢出通常指的是内存中的“栈”结构溢出。“栈”是内存中一个类似于瓶子的数据结构,里面按照“先进后出”的规则保存各种变量和指令。
正常的代码,在栈满了的时候,就会进行判断,然后进行相应处理,不会在其满了之后,还继续向其中压入数据,而是会停止压入,或者清空栈里面的数据,再继续压入。
而很多程序员在编写程序的时候,往往会对这一步进行忽略,或者忘记了对这一步进行检查。
大家都知道溢出的危害,但是还是存在着很多这样的例子,原因就在于这个过程是编程函数自动进行的,例如c语言,只要程序员自己编写一个函数,那么肯定就会有一个“栈”结构被建立起来,这个函数里面的变量和数据全部压入这个栈中,然后再按照执行的顺序,一步一步弹出。
函数是程序中必然会用到的,并且是大量用到,也就是说,栈这个结构也是随处可见,可是要是不对其中的边界条件做严格的检查的话,很有可能就会产生溢出漏洞,尤其是一些涉及到操作核心数据的函数。
林鸿对这种漏洞的利用简直是得心应手,当初他破解德州仪器的计算器的时候,使用的方式就是缓冲区溢出破解,成功让计算器的一个缓冲器溢出,然后执行他的破解代码。
而这一次,他想要做的事情也是一样,既然已经发现了这样的溢出可能,他接下来要做的。便是想办法将自己的代码插入进去。然后通过溢出的方式,执行自己的未授权代码。
这种方式,有点像是给一个瓶子不停地压入东西。然后再对方满了的时候,另外在瓶口处接一个弯弯的管子,将数据流引导从自己的管子里过一遍。然后再将数据流引回瓶中。
linx有个好处,很多东西都可以以插件的形式进行安装,为了能够让apache运行起来,林鸿直接将兼容unix的文件系统挂载进来,然后再将和蓝军相同的版本的apache安装在本地,再使用调试工具进行跟踪调试。
这是一个细致活,从调试工具中所看到的内容,都是十六进制的机器码,要想读懂其中的关键代码。必须对汇编和机器码相当熟悉。
林鸿有针对性地对这个溢出漏洞进行调试,相对来说进展还是很快的,一步一步接近他想要得到的结果。
林鸿在调试代码的时候。其他人也没闲着。
刘辉继续对蓝军的目标进行洪水攻击。不但自己的机器上安装了这个软件,他还给其他几台运行windows系统的机器也安装了这个软件。增加一下攻击的力度。