WAF自动化Fuzz工具-WAFNinja

WAFNinja是一款Python命令行工具,旨在帮助渗透测试人员进行WAF自动化Fuzz测试,以绕过输入验证。它支持HTTP连接、GET/POST请求,内置多种载荷和模糊字符串,并可通过设置代理和自定义模糊测试载荷。用户可以通过简单安装和使用命令来执行模糊测试、绕过WAF等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

零基础学黑客,搜索公众号:白帽子左一

前言

在我们平时做渗透测试的时候,难免会遇到各种WAF的阻挡。这时一款良好的绕过WAF的渗透测试工具就显得很受渗透测人员欢迎,在这里我们推荐一款绕过WAF的实用渗透工具,希望对大家平时做渗透有所帮助。

简介

WAFNinja是一款用python写的命令行工具,它可以帮助渗透测试人员免去部分手动输入的烦恼。此外,WAFNinja强大的扩展性,在团队协作中显得非常适用。

通过自动化步骤来帮助渗透测试者来绕过WAF,而这些步骤对于绕过输入验证来说是必需的。该工具的编写目标是方便扩展、易于使用和在团队环境下也可使用。

众多的载荷和模糊字符串是存储在本地的数据库,并且伴随着该工具一同发布出来。 WAFNinja 支持HTTP连接、GET/POST请求、可以使用cookie去访问那些只限于授权用户的页面。

当然,必要的时候,我们还可以设置代理。

下载安装

下载方式:
github下载地址:https://github.com/khalilbijjou/WAFNinja
在这里插入图片描述

可用git clone https://github.com/khalilbijjou/WAFNinja
在这里插入图片描述

或者直接用浏览器下载并且解压到本地文件。

安装

直接进入该文件夹,输入如下命令:

python wafninja.py -h

如果出现正常的文档说明,该结果证明安装成功;

作者:k0shl ####一些环境说明: 编译环境:Windows 10 x64 build 1607 项目IDE:VS2013 测试环境:Windows 7 x86、Windows 10 x86 build 1607 参数介绍: "-l" :开启日志记录模式(不会影响主日志记录模块) "-s" :驱动枚举模块 "-d" :打开设备驱动的名称 "-i" :待Fuzz的ioctl code,默认从0xnnnn0000-0xnnnnffff "-n" :在探测阶段采用null pointer模式,该模式下极易fuzz 到空指针引用漏洞,不加则常规探测模式 "-r" :指定明确的ioctl code范围 "-u" :只fuzz -i参数给定的ioctl code "-f" :在探测阶段采用0x00填充缓冲区 "-q" :在Fuzz阶段不显示填充input buffer的数据内容 "-e" :在探测和fuzz阶段打印错误信息(如getlasterror()) "-h" :帮助信息 ####常用Fuzz命令实例: kDriver Fuzz.exe -s 进行驱动枚举,将CreateFile成功的驱动设备名称,以及部分受限的驱动设备名称打印并写入Enum Driver.txt文件中 kDriver Fuzz.exe -d X -i 0xaabb0000 -f -l 对X驱动的ioctl code 0xaabb0000-0xaabbffff范围进行探测及对可用的ioctl code进行fuzz,探测时除了正常探测外增加0x00填充缓冲区探测,开启数据日志记录(如增加-u参数,则只对ioctl code 0xaabb0000探测,若是有效ioctl code则进入fuzz阶段) kDriver Fuzz.exe -d X -r 0xaabb1122-0xaabb3344 -n -l 对X驱动的ioctl code 0xaabb1122-0xaabb3344范围内进行探测,探测时采用null pointer模式,并数据日志记录
### 使用 GDB 调试 WAF 运行过程 为了有效地使用 GDB 来调试由 `waf` 构建并运行的应用程序,需遵循特定流程来确保能够捕获到必要的调试信息。以下是具体方法: #### 1. 确保编译时加入 `-g` 参数 当通过 `waf` 编译项目时,务必加上 `-g` 参数以便生成带有调试符号的信息。这可以通过修改构建配置或直接在命令行中指定完成。 对于大多数基于 `waf` 的项目来说,在执行构建之前应该先清理旧的构建产物以防止残留文件干扰新一次带调试信息的编译: ```bash ./waf clean --enable-debug ``` 接着再进行实际的编译操作,并开启调试支持: ```bash ./waf configure build --enable-debug ``` 以上命令假设所使用的 `waf` 支持 `--enable-debug` 配置项;如果该选项不可用,则可以在调用 `configure` 或者 `build` 命令前手动设置环境变量 CFLAGS 和 LDFLAGS 添加 `-g` 标志[^3]。 #### 2. 启动 GDB 并加载目标可执行文件 一旦拥有了包含调试信息的目标二进制文件(通常是 `.out`, `.elf` 或其他扩展名),就可以利用 GDB 加载它来进行交互式的调试会话了。假定最终生成的是名为 `program_name` 的可执行文件,那么启动方式如下所示: ```bash gdb ./program_name ``` 此时进入了 GDB 控制台界面,准备就绪等待进一步指令输入[^5]。 #### 3. 设置断点与开始调试 为了让调试更加高效,通常会在感兴趣的位置预先设定好若干个断点。例如要在某个源码文件内的第 N 行暂停执行,可以这样操作: ```plaintext (gdb) break filename.c:N ``` 也可以针对具体的函数入口创建断点: ```plaintext (gdb) break function_name ``` 一切准备好之后便可通过发出 `run` 指令让程序按照正常逻辑向前推进直到遇到第一个匹配上的断点为止: ```plaintext (gdb) run arguments... ``` 这里需要注意的是,如果是打算跟踪 `waf` 自身的行为而非其产生的应用程序的话,则应当直接对 `./waf` 下手而不是后者生成出来的任何东西。不过考虑到题目背景更倾向于关注于经由 `waf` 构建后的成果物之行为模式分析,因此上述指导方针已经足够适用了。 #### 4. 利用 GDB 功能探索内部状态 每当到达一个断点处停下后,即可运用诸如 `print` (`p`)、`backtrace` (`bt`) 等众多内置工具去探究当前上下文中各个局部/全局变量的具体取值情况或是回溯整个调用栈的历史轨迹等等有用情报。这些手段有助于快速定位潜在缺陷所在位置及其成因。 另外值得一提的是,除了基本的手工逐条下达命令外,还可以考虑编写批处理脚本来自动化部分重复性的任务,比如每次启动都要重新建立相同的几个固定断点之类的动作都可以事先录制成一段简单的宏定义供后续随时调用[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值