溢出,顾名思义,就是容器已经满了,东西从里面跑了出来。
在计算机领域中,溢出通常指的是内存中的“栈”结构溢出。“栈”是内存中一个类似于瓶子的数据结构,里面按照“先进后出”的规则保存各种变量和指令。
正常的代码,在栈满了的时候,就会进行判断,然后进行相应处理,不会在其满了之后,还继续向其中压入数据,而是会停止压入,或者清空栈里面的数据,再继续压入。
而很多程序员在编写程序的时候,往往会对这一步进行忽略,或者忘记了对这一步进行检查。
大家都知道溢出的危害,但是还是存在着很多这样的例子,原因就在于这个过程是编程函数自动进行的,例如c语言,只要程序员自己编写一个函数,那么肯定就会有一个“栈”结构被建立起来,这个函数里面的变量和数据全部压入这个栈中,然后再按照执行的顺序,一步一步弹出。
函数是程序中必然会用到的,并且是大量用到,也就是说,栈这个结构也是随处可见,可是要是不对其中的边界条件做严格的检查的话,很有可能就会产生溢出漏洞,尤其是一些涉及到操作核心数据的函数。
林鸿对这种漏洞的利用简直是得心应手,当初他破解德州仪器的计算器的时候,使用的方式就是缓冲区溢出破解,成功让计算器的一个缓冲器溢出,然后执行他的破解代码。
而这一次,他想要做的事情也是一样,既然已经发现了这样的溢出可能,他接下来要做的,便是想办法将自己的代码插入进去,然后通过溢出的方式,执行自己的未授权代码。
这种方式。有点像是给一个瓶子不停地压入东西,然后再对方满了的时候,另外在瓶口处接一个弯弯的管子,将数据流引导从自己的管子里过一遍。然后再将数据流引回瓶中。
linx有个好处,很多东西都可以以插件的形式进行安装,为了能够让apache运行起来,林鸿直接将兼容unix的文件系统挂载进来,然后再将和蓝军相同的版本的apache安装在本地,再使用调试工具进行跟踪调试。
这是一个细致活,从调试工具中所看到的内容。都是十六进制的机器码,要想读懂其中的关键代码,必须对汇编和机器码相当熟悉。
林鸿有针对性地对这个溢出漏洞进行调试,相对来说进展还是很快的,一步一步接近他想要得到的结果。
林鸿在调试代码的时候,其他人也没闲着。
刘辉继续对蓝军的目标进行洪水攻击,不但自己的机器上安装了这个软件,他还给其他几台运行windows系统的机器也安装了这个软件。增加一下攻击的力度。
可惜的是,他的这个方法,实在是过于简陋了点。持续使用相同的机器进行攻击。对方很容易将其ip加入过滤黑名单,对他的所有伪造请求都不语响应,这样的话,他所做的只能是无用功。
并且,林鸿大概了解了一下他所使用的软件,他的大数据洪水攻击,实在是过于原始了,这么点机器攻击,效果肯定不佳。
真正想要达到让对方拒绝服务的效果,必须使用ddos。也就是分布式拒绝服务攻击,使用成百上千台机器同时对目标进行数据风暴轰炸,这样,对方无法识别正确的ip来源,才能够有一些效果。
此外,洪水攻击实际上也是有很多种的。刘辉所使用的这种,是最基本最简单的一种,是单纯的syn洪水,也就是在第一次握手的时候就是个虚假的申请,没有有效的源地址。
这种情况,有点类似于,突然有个人打个电话过来挂断,当服务器端回拨过去的时候,却发现对方的电话号码根本不存在。
而偏偏服务器端的脑子并不是很聪明,或者说,涉及他的人暂时没有考虑到这一点,于是他便真的以为是有人打电话给他,于是拿着电话一直不挂,等着对方接听。而他本身同时只能接听一定数量的电话,当这样的人数一多,他所有的电话都给拿了起来,别人便打不进来了,相当于他拒绝服务了。
刘辉的软件所实现的功能,就是这个伪造打电话的过程。
这个原理是正确的,但是在现在这种场合中却并不适合使用,几个电话号码而已,只要服务器端的管理员跟他说,这几个号码是假的,别管他,就能避免拒绝服务的情况出现。
刘辉自己也应该知道这个情况,但是他也没办法,他能够做的事情有限,对方使用的系统,大部分都是非windows系列的,他根本没有用武之地,只能通过这个方式来凸显自己的存在和重要性。
小蒋已经将自己的系统也配置完毕,他现在开始执行钱队长交给他的任务,将蓝军那边的网络拓扑结构给绘制出来,好让大家有个参考。
网络拓扑结构,其实就是电脑的连接方式,看看对方的电脑,到底是星形连接,还是环形,亦或者是交叉连接。
每一台电脑,可以看做是一个点,中间的网线就是一条连接的线段,这样将整个结构抽象出来,便形成了网络的拓扑结构。
要想探知这个结构,可以去实地查看,当然也可以通过技术手段来实现。