关于T-Reqs

T-Reqs全称为Two Requests,T-Reqs是一款基于语法的HTTP模糊测试漏洞挖掘工具,该工具可以通过发送版本为1.1或更早版本的变异HTTP请求来对目标HTTP服务器进行模糊测试以及漏洞挖掘。该工具主要通过下列三大步骤实现其功能:(1)生成输入;(2)对生成的输入进行变异处理;(3)将变异后的数据发送至目标服务器;

生成输入

工具会使用输入的CFG(上下文无关文法)语法来生成HTTP请求。由于下面所示的示例语法是为请求行模糊处理而定制的,因此每个请求行组件及其可能的值都已经明确指定了。此时,我们将能够使用各种形式的请求行生成有效的请求,并从变异的角度将每个请求行组件视为一个单独的单元。

'<start>':

     ['<request>'],

 '<request>':

     ['<request-line><base><the-rest>'],

 '<request-line>':

     ['<method-name><space><uri><space><protocol><separator><version><newline>'],

 '<method-name>':

     ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'],

 '<space>':

     [' '],

 '<uri>':

     ['/_URI_'],

 '<protocol>':

     ['HTTP'],

 '<separator>':

     ['/'],

 '<version>':

     ['0.9', '1.0', '1.1'],

 '<newline>':

     ['\r\n'],

 '<base>':

     ['Host: _HOST_\r\nConnection:close\r\nX-Request-ID: _REQUEST_ID_\r\n'],

 '<the-rest>':

     ['Content-Length: 5\r\n\r\nBBBBBBBBBB'],

输入变异

每个组件都可以用两种方式进行标记:字符串变异和树变异(具体参见示例配置)。如果组件为字符串变异,那么我们就可以删除、替换或在随机位置插入随机字符。

在下面的示例(左侧)中,删除了协议版本(1)中的最后一个字符,用R替换方法名称中的第三个字母(S),并在URI的开头插入正斜杠。然而,如果一个组件是树变异,那么我们就可以随机、替换或插入到该组件下的一个随机位置。

下面的示例(右侧)显示了应用于请求行组件的三个树变异:(1)方法被协议替换;(2)在当前URI之后插入一个额外的URI;(3)删除现有的proto。

工具下载&安装&配置

该工具基于Python开发,因此我们首先需要在本地设备上安装并配置好Python环境。

源码获取

广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/bahruzjabiyev/T-Reqs-HTTP-Fuzzer.git

工具使用

工具配置

测试工具应该了解用户对输入的生成和变异的偏好。更具体地说,应该在配置文件中指定输入语法、突变组件和突变首选项等(具体参见示例配置)。

运行模式

为了能够复现在每次迭代中生成和变异的输入,工具使用了一个种子编号。实际上,在输入的生成和变异的过程中,这个种子编号会作为一个随机的变异种子来使用。根据这些种子提供给工具的方式,它将以下列两种模式中的其中一种运行:单独模式和集体模式。

在单独模式下,工具将根据用户指定的种子来生成和变异输入。在下面的命令中,指定了一个种子(即505)。或者,也可以使用-f选项指定种子列表。

python3 main.py -i -c config -s 505

在集体模式(默认)下,工具将从零开始作为种子值,并在每次迭代中递增,直到结束,其中种子的开始和结束编号是可以自定义配置的。

python3 main.py -c config

许可证协议

本项目的开发与发布遵循MIT开源许可证协议。

项目地址

T-Reqs:GitHub传送门

参考资料

https://bahruz.me/papers/ccs2021treqs.pdf

https://www.sigsac.org/ccs/CCS2021/accepted-papers.html

https://github.com/bahruzjabiyev/T-Reqs-HTTP-Fuzzer/blob/main/config

https://github.com/bahruzjabiyev/T-Reqs-HTTP-Fuzzer/blob/main/code/feedback-server.py

本文作者:Alpha_h4ck, 转自FreeBuf