本节书摘来自异步社区《Metasploit渗透测试手册》一书中的第8章8.7节 使用Metasploit进行模糊测试,作者【印度】Abhinav Singh,更多章节内容可以访问云栖社区“异步社区”公众号查看。
8.7 使用Metasploit进行模糊测试
Metasploit渗透测试手册
模糊测试是一种软件测试技术,包括使用随机的数据注入检测软件中的漏洞。模糊测试脚本生成畸形数据时,将其传送给特定的目标软件以验证其是否会导致溢出。Metasploit提供中包含某些模糊测试模块,可用于漏洞利用代码开发。下面探索一下模糊测试的基础,以及怎样将Metasploit模块用作潜在的模糊测试器。
准备
在介绍Metasploit模糊测试模块之前,首先对模糊测试及其类型进行简单的了解。
模糊测试被视为是一种黑盒测试技术,用于发现软件中的溢出问题,这一技术广泛地应用于应用程序漏洞挖掘。
模糊测试器可用于测试软件、协议和文件格式中的漏洞,可自动化实现测试数据生成和注入的过程,用户可控制用于注入的数据或数据包的大小。
模糊测试器一般测试如下攻击组合。
数字(有符号/无符号证书、浮点数等)
字符(URL和命令行输入)
元数据:用户输入的文本(id3标签)
纯粹的二进制序列
根据待测试的应用程序或协议的类型,可以相应地建立模糊测试器,以生成数据/数据包测试其是否导致溢出。Metasploit中包含了一些模糊测试模块,可以利用黑盒测试方法测试应用程序和协议。这些模块存储在modules/auxiliary/fuzzers目录中。
怎样实现
下面运行一个基于协议的模糊器模块,Metasploit中包含一个名为client_ftp.rb的FTP模块,其作用是充当FTP服务器,并向FTP客户端发送回应信息。
msf > use auxiliary/fuzzers/ftp/client_ftp
msf auxiliary(client_ftp) > show options
Module options:
Name Current Setting Required Description
---- --------------- -------- -----------
CYCLIC true yes Use Cyclic pattern instead..
ENDSIZE 200000 yes Max Fuzzing string size.
ERROR false yes Reply with error codes only
EXTRALINE true yes Add extra CRLF's in..
FUZZCMDS LIST.. yes Comma separated list..
RESET true yes Reset fuzzing values after..
SRVHOST 0.0.0.0 yes The local host to listen on.
SRVPORT 21 yes The local port to listen on.
SSL false no Negotiate SSL for incoming..
SSLVersion SSL3 no Specify the version of SSL..
STARTSIZE 1000 yes Fuzzing string startsize.
STEPSIZE 1000 yes Increment fuzzing string..
从结果可以看到该模块包含很多有用的参数,下面看一下每个参数代表的功能。
CYCLIC选项用于建立模糊测试数据的循环模式,确保每隔4个字节的偏移量。如果该选项设置为false,则模糊器将使用字母A组成的字符串作为模糊测试数据。
ENDSIZE选项用于定义返回给FTP客户端的模糊测试数据的最大长度。默认情况下,该数值设置为20000字节。
ERROR选项如果被设置为true,将使用错误代码对FTP客户端进行响应。
EXTRALINE选项用于模糊测试目录列表。在收到过多的目录名请求时,有些FTP客户端会崩溃。
FUZZCMDS选项用于定义对哪些响应信息进行模糊测试,可能的请求包括LIST、NLST、LS和RETR,也可以将其设置为*,以便对所有命令进行模糊测试。
SRVHOST选项用于指定模糊测试器将使用哪个IP地址与FTP服务器进行绑定。对于本地机器,这个值可以设置为0.0.0.0。
SRVPORT选项用于定义FTP服务器端口,默认值为21。
STARTSIZE选项用于定义模糊测试数据的初始化数据长度。
STEPSIZE选项用于定义溢出失败时,模糊测试数据每次的增量。
在使用模糊测试器时,需要注意如果没有传递正确的参数值,可能会导致模糊测试失败。要对模糊器有更深入的理解,可以查看模块的源代码。下面运行FTP客户端模糊测试器,并查看其返回结果。
msf auxiliary(client_ftp) > run
[*] Server started.
[*] Client connected : 192.168.56.102
[*] - Set up active data port 20
[*] Sending response for 'WELCOME' command, arg
[*] Sending response for 'USER' command, arg test
[*] Sending response for 'PASS' command, arg test
[*] - Set up active data port 16011
[*] Sending response for 'PORT' command, arg 192,168,0,188,62,139
[*] Handling NLST command
[*] - Establishing active data connection
[*] - Data connection set up
[*] * Fuzzing response for LIST, payload length 1000
[*](i) Setting next payload size to 2000
[*] - Sending directory list via data connection
输出信息中有几点需要特别注意,首先,FTP服务器在攻击机器上启动,之后回连FTP客户端,并向客户端机器发送不同的响应命令。模糊测试过程从NLST命令开始,之后是LIST等命令。
上面是模糊测试模块工作方式的一个小示例,下节中我们将构建自己的模糊测试模块,并对协议模糊测试进行深入理解。
怎样工作
模糊测试器会根据目标应用程序创建不同的测试用例,在上面的示例中,FTP服务器的模糊测试是通过发送随机数据包之后对响应消息进行分析实现的,数据包可以对网络流量中的如下属性进行模糊测试。
数据包头:模糊测试器可以将任意长度和取值的随机数据插入到数据包头部,并对响应消息进行分析。
数据校验和:使用模糊测试器可以在特定的条件下对校验和值进行操纵。
数据包大小:可以将任意长度的数据包发送给网络应用程序以判断是否会引发崩溃。
发生溢出或崩溃后,模糊测试器可以返回测试用例当做溢出数据使用。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。