Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/bahruzjabiyev/t-reqs
漏洞分析Web安全模糊测试论文与研究
GitHubbahruzjabiyev/t-reqs

t-reqs

基于语法的 HTTP/1 模糊测试器,具备变异能力

查看仓库
2633241年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

T-Reqs HTTP Fuzzer

T-Reqs(两个请求)是一个基于语法的HTTP Fuzzer,作为论文T-Reqs: HTTP Request Smuggling with Differential Fuzzing的一部分编写,该论文发表于ACM CCS 2021。

论文的BibTeX:

root@kitploit:~
@inproceedings{ccs2021treqs,
  title={T-Reqs: HTTP Request Smuggling with Differential Fuzzing},
  author={Jabiyev, Bahruz and Sprecher, Steven and Onarlioglu, Kaan and Kirda, Engin},
  booktitle={Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communications Security},
  pages={1805--1820},
  year={2021}
}

关于

T-Reqs 用于通过发送经过变异的 HTTP 请求(版本 1.1 及更早)来对 HTTP 服务器进行模糊测试。它有三个主要组件:1)生成输入,2)变异生成的输入,3)将输入发送到目标服务器。

生成输入

将 CFG 语法输入 fuzzer,用于生成 HTTP 请求。如下所示的示例语法专为请求行模糊测试而定制,每个请求行组件及其可能的值都明确指定。这使得我们能够生成各种形式的有效请求,并从变异的角度将每个请求行组件视为独立单元。

root@kitploit:~
 '<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)被删除,方法名中的第三个字母(S)被替换为 R,并在 URI 的开头插入了一个斜杠。而如果组件是树可变的,则可以在该组件下的随机位置删除、替换或插入随机组件。下面的示例(右侧)显示了对请求行组件应用的三次树变异:1)method 被替换为 protocol,2)在当前 URI 之后插入了一个额外的 URI,3)现有的 proto 被删除。

变异类型

使用方式

配置

fuzzer 需要了解用户关于输入生成和变异的偏好。具体来说,输入语法、可变组件、变异偏好等应在配置文件中指定(参见示例配置)。

运行模式

为了能够重现每次迭代中生成和变异的输入,使用了一个种子编号。事实上,这个种子编号在输入形成和变异过程中用作随机数生成的种子。根据这些种子如何输入到 fuzzer 中,它有两种运行模式:单次模式和批量模式。在单次模式下,输入基于用户指定的种子生成和变异。在下面的命令中,指定了一个种子(即 505)。或者,可以使用 -f 选项指定一组种子(更多信息请参见帮助页面)。

root@kitploit:~
python3 main.py -i -c config -s 505

而在批量模式(默认模式)下,fuzzer 从种子值 0 开始,并在每次迭代中递增,直到达到结束编号。开始和结束编号可以自定义。

root@kitploit:~
python3 main.py -c config

Dockerfile

我们还提供了一个 Dockerfile,以便您能够运行 t-reqs 代码。您可以运行以下命令开始:

root@kitploit:~
# 在包含 Dockerfile 的目录下运行以下命令
docker build -t test/treqs .

# 使用上述命令构建镜像后,创建一个容器
docker run -ti test/treqs bash

# 在启动的 Docker shell 中运行以下命令
cd t-reqs/
python3 code/main.py -c config -n -i -s90

发现新的 HTTP 请求走私向量

HTTP 请求走私依赖于服务器之间不同的主体解析行为:一台服务器使用 Transfer-Encoding 头部,而另一台服务器偏好使用 Content-Length 头部来决定请求体的边界;或者一台服务器忽略请求体,而另一台服务器处理它。

为了分析服务器对各种变异的 HTTP 请求形式的主体解析行为,我们需要在这些服务器上安装反馈机制,以告知我们主体解析行为。在服务器上安装反馈机制的一种方法是,将服务器以反向代理模式运行,并让它将请求转发到作为服务运行的“反馈提供者”脚本。该脚本测量接收到的请求中主体的长度,并将其保存下来,以便稍后与其他服务器进行比较。

此仓库中提供了一个示例的“反馈提供者”脚本。然而,该脚本在响应中返回主体长度信息,假设该信息存储在客户端。

许可证

T-Reqs 根据 MIT 许可证进行许可。

下载工具