FUZZ工具—Boofuzz框架实际使用

news2024/12/23 6:12:42

接着上一篇文章FUZZ工具—Boofuzz框架来对框架进行实际的使用;
官方提供了很多案例模板,且网上关于boofuzz的使用介绍很多,也比较成熟,在各个领域都有,可以通过官方提供的案例也看得出来,然后覆盖的面也非常的全,目前也就只有ble、zigbee这种无线电通信协议的覆盖不了,下面用一个简单的测试来学习一下boofuzz的使用,来挖掘一下漏洞;

Vulnserver

Vulnserver是一个多线程的基于Windows的TCP服务器,它侦听端口9999上的客户端连接(默认情况下),并允许用户运行许多不同的命令,这些命令容易受到各种类型的可利用缓冲区溢出的攻击。它在github的地址为https://github.com/stephenbradshaw/vulnserver

下载对应程序,启动vulnserver
请添加图片描述

使用nc命令,连接服务端9999端口即可。发出HELP命令(区分大小写),查看程序有哪些功能

请添加图片描述

查看服务的请求和返回内容,然后构建FUZZ脚本;

请添加图片描述

Fuzzing Vulnserver

根据服务地址和请求头构造简单的FUZZ脚本;

from boofuzz import *

def main():
    session = Session(
            target=Target(
                connection = TCPSocketConnection("172.25.64.1", 9999),
            ),
    )

    s_initialize("trun")
    s_string("TRUN", fuzzable=False)
    s_delim(" ", fuzzable=False)
    s_string("FUZZ")
    s_static("\r\n")

    session.connect(s_get("trun"))
    session.fuzz()

if __name__ == "__main__":
    main()

请添加图片描述

简单看一下执行日志结果,可以看到case1的执行结果日志,发送的数据,但是看不到返回的结果情况;

用脚本跑了一会,就中断了,直接挂掉了,到脚本所在目录下的boofuzz-results中查看FUZZ结果;用数据库软件打开文件;

请添加图片描述

通过过滤is_truncated字段,可以观察到只有send的超长数据包才会truncated,根据经验应该是缓冲区溢出了;

请添加图片描述

通过这里如果想要完整构造fuzz脚本需要解决几个问题

  1. 打印返回数据,并记录log文档里以方便排查问题;
  2. 程序如果遇到存在问题的playload会存在中断的问题,如果要继续跑完剩下的playload就需要在执行之前对程序进程的状态进行监听,如果没有对应进程需要重新启动;

这里先增加返回数据打印看看;

from boofuzz import *

def main():
    session = Session(
            target=Target(
                connection = TCPSocketConnection("172.25.64.1", 9999),
            ),
    )

    s_initialize("trun")
    s_string("TRUN", fuzzable=False)
    s_delim(" ", fuzzable=False)
    s_string("FUZZ")
    s_static("\r\n")

    session.connect(s_get("trun"), callback=get_banner)
    session.fuzz()

def get_banner(target, my_logger, session, *args, **kwargs):
    banner_template = "Welcome to Vulnerable Server! Enter HELP for help."
    try:
        banner = target.recv(10000)
    except:
        print("Unable to connect. Target is down. Exiting.")
        exit(1)

    my_logger.log_check('Receiving banner..')
    if banner_template.encode() in banner:
        my_logger.log_pass('banner received')
    else:
        my_logger.log_fail('No banner received')
        print("No banner received, exiting..")
        exit(1)
        
if __name__ == "__main__":
    main()

通信新增打印返回函数,以接受程序打印的数据;

请添加图片描述

boofuzz也提供本地服务以查看进度和执行结果,访问http://127.0.0.1:26000可以看到结果;但是只能是程序在跑的时候,程序结束后进程结束服务也会关闭,其展示的内容除了进度详细的日志跟输出的内容是一致的,但是本地存的数据库文件也不包含我们设置的banner信息,所以这里我们需要将打印的日志内容输出到excel中,方便排查;

然后上图可以看到,在跑一段时间后程序会挂掉,为了方便测试要监控程序进程然后检测到进程中没有我们需要的程序时就启动它;

请添加图片描述

然后发现boofuzz提供了监控进程的脚本,把脚本和对应程序放到一个目录下,然后对26002端口进行监控;

boofuzz/process_monitor.py at master · jtpereyda/boofuzz · GitHub

请添加图片描述

boofuzz api target中提供了进程监控的能力:Target — boofuzz 0.4.1 documentation

procmon = pedrpc.Client(host, 26002),
procmon_options = {
                        "proc_name" : "vulnserver.exe",
                        "stop_commands" : ['wmic process where (name="vulnserver") delete'],
                        "start_commands" : ['vulnserver.exe'],
                }

最终fuzz脚本;

from boofuzz import *
from sys import exit

def get_banner(target, my_logger, session, *args, **kwargs):
    banner_template = "Welcome to Vulnerable Server! Enter HELP for help."
    try:
        banner = target.recv(10000)
    except:
        print("Unable to connect. Target is down. Exiting.")
        exit(1)

    my_logger.log_check('Receiving banner..')
    if banner_template.encode() in banner:
        my_logger.log_pass('banner received')
    else:
        my_logger.log_fail('No banner received')
        print("No banner received, exiting..")
        exit(1)

def main():
    s_initialize("Vulnserver")
    s_group("verbs", values=["TRUN", "GMON", "KSTET"])

    if s_block_start("test", group="verbs"):
        s_delim(" ")
        s_string("AAA")
        s_string("\r\n")

    s_block_end("test")

    # csv_log = open('fuzz_results.csv', 'wb') 
    # my_logger = [FuzzLoggerCsv(file_handle=csv_log)]   
    logger = FuzzLoggerCsv(file_handle = open("fuzz_results.csv","wb"))
    session = Session(
            target = Target(
                connection = SocketConnection("172.25.64.1", 9999),
                procmon = pedrpc.Client("127.0.0.1", 26002),
                procmon_options = {
                        "proc_name" : "vulnserver.exe",
                        "stop_commands" : ['wmic process where (name="vulnserver") delete'],
                        "start_commands" : ['vulnserver.exe'],
                }
            ),
    )

    session.add_logger(logger)
    session.connect(s_get("Vulnserver"), callback=get_banner)
    session.fuzz()

if __name__ == "__main__":
    main()

但是我这里process_monitor.py在监控的时候会报错,从而连接不上,没有找到原因。。。

请添加图片描述

请添加图片描述

不过第二个要求已经是进阶要求了,日常的fuzz一般不需要如此,或者有其他的办法,基本上能覆盖;

Boofuzz衍生

学习了解这个工具是因为在参与安全认证过程中机构要求提供相关资料,然后我们现有的流程也确实缺少了这一步操作,所以就了解了一下;

因为boofuzz目前已经可以fuzz多种协议,自然就想到了ble、zigbee等多种物联网协议,然后查看了api文档Connections — boofuzz 0.4.1 documentation,发现这些是不支持的,串口也只是uart交互之类fuzz,没有dongle或者usb的交互能力,不过倒是可以借助boofuzz框架自己实现一个;思路是

  1. 实现一个类似SerialConnection的函数,比如叫DeviceConnection之类的,用于连接蓝牙或者zigbee dongle;
  2. 连上目标mac的设备,然后进行设备认证,或者也可以不进行认证直接fuzz,使用boofuzz的能力;
  3. 当然后面部分还是要定制化处理,通用的部分也只能针对通用协议来进行,非通用私有的部分还是只能手动过了认证之后一点点fuzz;

找了一下看看有没有大神已经实现了

https://github.com/Charmve/BLE-Security-Attack-Defence

BlueFuzz/bluetooth_scanner.py at master · lucaboni92/BlueFuzz (github.com)

发现直接用脚本实现跟dongle的交互,然后fuzz也是可以,只是fuzz的playload就需要自己整理,或者可以拿boofuzz的来用。

参考

初探BooFuzz - 先知社区

IoT 设备网络协议模糊测试工具boofuzz实战_江下枫的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西门子变频器G120XA的快速调试方法分享

以西门子变频器G120XA为例,接着为大家介绍一下G120X和G120XA系列变频器的快速调试方法。 西门子发布的Sinamics G120X和G120XA系列变频器,专为风机和泵的应用而设计,实现高效节能、可靠稳定和简单易用。以G120XA为例,通过下面的调…

locust学习教程(9)- event 事件

目录 1、对请求的测试前置、后置处理 2、在web界面添加新内容 3、监听测试的失败率或阀值 4、汇总总结 ​🎁更多干货 1、对请求的测试前置、后置处理 请求有一个上下文参数,通过数据有关的请求(之类的用户名,标签等&#xff…

双路高速 DA 实验

目录 双路高速 DA 实验 1、简介 2、实验任务 3、程序设计 3.1、hs_dual_da顶层模块代码 3.2、ROM 波形存储模块(rom_1024x10b) 创建单端口 ROM IP核 3.2、DA 数据发送模块(da_wave_send)代码 4、硬件设计 4.1、添加.xdc…

MongoDB数据库安装

MongoDB数据库 MongoDB数据的特点: 面相文档存储的分布式数据库 具有很强的扩展性 支持丰富的查询表达式,很接近于关系性数据库 使用类似于json的结构保存数据,可以轻易的查询到文档中内嵌的对象及数组 下载安装包 首先去官网下载安装…

用JAVA写一个下载器第2集

文章目录 一、开发环境及工具二、包名概览三、项目结构四、使用步骤1.编写代码Constant.java:Downloader.javaDownloaderTask.javaDownloadInfoThread.javaFileUtils.javaHttpUtils.javaLogUtils.javaMain.java 2.运行程序 总结 一、开发环境及工具 开发环境及工具…

如果开发说这不是Bug,你会怎么处理?

在项目过程中,如果开发说这个不是Bug,你的第一反应是什么? 不同的人有不同的处理方式,也许是如下几点:相信开发说的,开发说什么就是什么,问题关闭;自己不能决定,啥都上升…

GP232RNL——USB到UART桥接控制器

GP232RNL是一款高度集成的USB到UART桥接控制器,提供了一种简单的解决方案,可以使用最少的元器件和PCB空间,将RS232接口转换为USB接口。GP232RNL包括一个USB 2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整的调制解调器控制信号的异…

日撸java三百行day69-70

文章目录 说明day69-70 矩阵分界1.基于矩阵分解的推荐系统(Funk-SVD算法)2.随机梯度下降(SGD)2.1 导数2.2 偏导数2.3 方向导数2.4 梯度2.5 随机梯度下降,与损失函数之间的关系 3.代码理解3.1 train() 方法3.2 mae方法&…

神经网络原理(2)

斯坦福大学的印度学生、机器学习爱好者 PararthShah 在2012年12月22日的使用买芒果的例子解释了神经网络,简单来说就是:如果你需要选芒果,但不知道什么样的芒果最好吃,一个简单粗暴的方法是尝遍所有的芒果,然后总结出个…

窗口函数之-前后函数(lag/lead)

窗口函数之-前后函数 应用:求同比增长、环比增长 lead(expression,n):返回当前行的后n行 > shift(-n) 数据超前n阶,与之对齐的就是后n行的数据lag(expression,n):返回当前行的前n行> shift(n)数据滞后n阶,与之对齐的就是前n行的数据 …

人工智能轨道交通行业周刊-第49期(2023.6.12-6.25)

本期关键词:设备智能维修、故障诊断、无人机巡查、车站联锁、LangChain、腾讯大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMe…

高效进行接口测试,简单易懂!

目录 前言 正文 1.Api文档导入 2.后端接口测试 3.mock数据 4.测试集接口自动化 总结 前言 日常测试过程中,常常需要多种工具来接力完成自己的接口测试任务。 比如说, 使用swagger查看接口文档, 使用mock编造接口数据对前端页面做测试…

面对高速PCB设计,你是否也有这些疑问?

在现代电子产品设计中,高速PCB设计是很重要的组成部分,然而由于高速信号的特殊性和复杂性,很多电子工程师在进行高速PCB设计时难免面临各种挑战及问题,那么面对这些挑战及问题,该如何解决? 1、添加测试点是…

管线业务模块实现

文章目录 1 .配电线路轨迹图2 )单线图存储功能3. 设备接线图1 )剖面绘制 电力管线业务模块是系统的电力业务功能,主要维护电气设备的电力连接关系以及电 缆在GIS 地图和工井内部的位置和走向。管线业务模块由配电线路的轨迹图、单线图、接 线…

介绍智能照明系统在绿色建筑中的应用与产品选型

【摘要】:智能照明系统应用在智能建筑中不仅能营造出舒适的生活、工作环境以及现代化的管理方式而且要具有一定的节能效果。给出了智能照明和传统照明系统的比较并分析了智能照明系统的节能。 【关键字】:智能建筑;智能照明;节能…

蓝库云:企业绩效管理对公司成长的重要性,被很多企业主所忽略

什么是绩效管理 绩效管理是一种管理方法,通过衡量和评估员工的工作绩效,来提高企业的效率和效益。它涉及一个系统性的过程,包括设定、评估和反馈员工目标,制定和实施成长计划和发展计划,以及与员工进行持续的沟通和反…

MacOS 中 ARM64 汇编 ldr =address 伪指令导致运行时崩溃的原因及解决

0. 概览 我们知道在 MacOS 的 as 汇编器中有一条 ldr 伪指令,使用它我们可以非常方便的将立即数加载到寄存器中。 不过,当 ldr 的源操作数是一个标签(Label)时,就会导致在运行时发生崩溃: 如上图所示&…

179_自动生成 千万级 Power BI 示例数据

179_自动生成 千万级 Power BI 示例数据 在早一些是时候,我曾写过一个示例数据《赠送300家门店260亿销售额的零售企业Power BI实战示例数据》,本次我们对该示例数据做了一些调整。 一、更新内容 针对有一些朋友不会使用 vba 模块,我们增加了…

RHEL CentOS Debian Ubuntu 如何刷新 DNS 缓存

RHEL CentOS Debian Ubuntu 如何刷新 DNS 缓存 全文:如何刷新 DNS 缓存 (macOS, Linux, Windows) Unix Linux Windows 如何刷新 DNS 缓存 (macOS, FreeBSD, RHEL, CentOS, Debian, Ubuntu, Windows) 请访问原文链接:https://sysin.org/blog/how-to-fl…

【YOLO】目标识别模型的导出和opencv部署

文章目录 0 前期教程1 什么是模型部署2 怎么部署 0 前期教程 【YOLO】朴实无华的yolov5环境配置 【YOLO】yolov5训练自己的数据集 1 什么是模型部署 前期教程当中,介绍了yolov5环境的搭建以及如何利用yolov5进行模型训练和测试,虽然能够实现图片或视频…