本文针对协议模糊测试的边角知识进行总结,简单的介绍了协议,模糊测试,漏洞等基础概念,并总结了协议漏洞挖掘的步骤,以及介绍了一款挖掘工具-Peach。
1. 协议是什么?
作用:远程信息传输
过程:比如,你本机QQ程序要向internet上的另一台主机上的QQ程序发送“你好吗?”,协议保证它可以顺利发到。它是怎么做到的呢?
发送方:
l 首先它在“你好吗”前后加一些标志,假设,当“你好吗?”这个数据到达另一台主机上时,能发送到QQ程序上,还有其它一些作用,比如,当这边没收,那边可以重发等等。这些功能都是通过数据头携带的信息实现的,其中“你好吗?”是协议的数据部分。实现这种功能的协议叫做传输层协议。
l 前面有个前提,是当“你好吗?”到达另一台主机。这个“你好吗?”怎样到达主机,依然是在把前面的应用层协议+“你好吗?”当做数据,在它的头加一些标志,可以使它在万亿台机器中寻找到这台主机,这个标志主要是IP地址,这层协议叫做网络层协议。
l 当网络层包装好的这个数据包知道它要怎样到达那台主机,它应该怎样发送,IP地址是虚拟的,它需要知道MAC地址,和一些硬件相关的参数的协定,这层协议是链路层协议。
l 数据传输最终都是变成01的低高电平传输,这层叫做物理层。
l 应用层则是在传输层上面的协议,距离真实数据更加近的协议,它是实现各个程序的具体功能的协议。比如在数据的头加一个字段,定义这个数据的用途,是直接显示在界面上,还是存到数据库中。
接收方:
l 接收方最终要接受到的首先是带着物理层协议头+链路层协议头+网络层协议头+传输层协议头+“你好吗”的一个数据包。它会层层剥开协议的头,当这个协议达到它的目的地,就把协议的头都给去掉,最终送到另一台主机QQ上的是“你好吗?”,比如,送到这台电脑的时候还剩下应用层+“你好吗”,当这个传输层协议完成它的使命,将“你好吗?”送到QQ程序后就剥离了应用层协议头这部分数据,最后在你的界面只剩下“你好吗?”。
对于以上例举的5层协议的工作过程可以这么概括:你想从本机QQ上发送“你好吗?”到其它主机上,你首先要定位到那台电脑,定位到那台电脑上的QQ程序上。而定位到那台电脑是通过网络层协议实现的,定位程序是通过传输层协议实现,但是当你定位那台电脑后,你要通过网络电缆把数据传送到目的地,这就需要链路层和物理层的协议。而应用层协议,顾名思义,是决定所要传输数据的最终用途,比如发送“你好吗?”,用途就是让它显示在界面上,所以应用层的头中应包含指示应用程序将该数据打印的数据段。想完成传送“你好吗?”这句话,要分几个步骤去做,每个步骤都是用一个协议来实现,步骤的先后决定协议的分层。
其它协议:
以上5层协议可以保证远程数据传输。但是协议很多,协议的本质就是通过协商、议定完成一项工作,其它具体协议都是为完成特定工作而开发。协议具有分层特点,一种协议视它工作情况而定,只能在特定一层完成的工作,所以这些形形色色的协议都会有它特定的工作层。
某个协议的分步工作:
虽说一个协议是完成一小项工作,但是这一小项工作依然需要分步骤处理,每个步骤是该协议的一种数据包。比如某个协议,首先它们得互相say hellow,让对方知道我们在用这个协议交流,就算是建立了协议的会话,然后给对方发送一些自己这边的情况,其次才是约定一些具体事项。
2. 协议模糊测试要做的工作
(1) 利用协议头的各种特定标志来协商议定,是需要代码来处理实现的,这些代码组成协议的C/S端,所有协议都必须有它的处理代码。
(2) 协议的各个字段,都会按照协议的实现流程被处理。这些字段都是C/S两端认可的合法数据,当我们把这些字段变成不合法的,让程序去处理它,这个过程就叫做模糊测试,比如某个协议里有个字段是告诉对方传输数据用什么格式,0代表ASIIC码格式,1代表unicode,但是我们偏把这个字段写成“a”,看它怎样处理这个不认识的意外的字段。
3. 为什么要进行模糊测试?
(1) 查找代码实现的缺陷
针对自己公司实现的代码,发送这些变异数据去试试代码的健壮性,如果代码处理不了,那就是有缺陷,健壮性不好,开发人员就会去查找原因并修改它。
(2) 漏洞挖掘
当这个变异数据导致了程序发生异常,那其它人就可以研究一下发生了什么异常,是不是漏洞,如果是漏洞,是否可利用。如果是可利用漏洞,就可以通过精心构造一些数据去触发漏洞,并让它实现某些功能。
4. 什么是漏洞?
大的方面不讲,就从软件方面讲。
漏洞就是代码实现有缺陷,可以触发这个缺陷,改变代码执行流程,或泄露一些信息或实现其他目的缺陷。比如,你编写了一个需要输入用户名、密码的登陆系统,那正常情况下你是要输入正确的用户名和密码才可以登入系统,输入用户名和密码的代码是一个类似:把用户输入到的数据与数据库里的数据比对的过程,然后有一个if right,then in的过程,漏洞是可以直接跳过if right这行代码,而直接执行then in进入系统,所以就不需要输入正确的用户名和密码,这就是利用漏洞实现跳转流程。
5. 怎样进行模糊测试
(1) 首先你得定义出合法的数据包,目标代码可以识别并会处理的数据包,并且这个数据包某个字段是被变异的
(2) 然后你得将这个数据包送到目标程序那,让目标程序处理数据包
(3) 有一个能实时监督目标程序处理异常数据的功能,当目标程序处理异常会报告
6. 模糊测试工具Peach
Peach就是可以完成模糊测试所需三个主要工作的工具。
Peach的使用:
用户通过编写peach pit模板,来提供完成模糊测试所需信息。然后,peach工具内部代码,会读取这些pit模板里的信息,完成测试工作。
Peach pit模板:
l DataModel
实现数据的格式定义,在协议里即是数据包的格式
l StateModel
定义数据的交互过程,在协议中,即是数据包的交互过程,即是一项工作的分布完成
l Publisher
建立通信信道,讲数据传送到要处理的程序中去
l Monitor
监视程序处理情况,发生异常及时报告,记录异常信息
l Test
组合以上几个模块,形成一个测试组合