AFLNet入门教学——测试RTSP协议实现Live555(Ubuntu)

news2024/12/26 11:32:51

1、简介

  • 本文旨在使用AFLNet对RTSP协议实现Live555进行模糊测试。
  • 实验环境为:Ubuntu22.04.4
  • AFLNet安装参考:AFLNet入门教学——安装(Ubuntu22.04.4)-CSDN博客

2、安装Live555

  • 本次实验采取的是live555在2018年8月28日上传的版本,版本号为ceeb4f4。
  • 克隆Live555。
    • # Clone live555
      git clone https://github.com/rgaufman/live555.git
  • 切换版本号。
    • # 进入live555目录
      cd live555
      # 切换live555版本
      git switch -c ceeb4f4
  • 打补丁。
    • # 使用补丁
      patch -p1 < $AFLNET/tutorials/live555/ceeb4f4.patch
    • 【注】ceeb4f4.patch补丁除了生成使用afl-clang-fast++执行覆盖反馈启用检测的Makefile之外,还进行了一个小改动,以禁用Live555中的随机会话ID生成。在未修改的Live555版本中,每个连接都会生成一个会话ID,后续从客户端发送的请求中必须包含该会话ID,否则请求会被服务器很快拒绝。这会导致模糊测试时路径不确定性增加,因为同一消息序列可能会执行不同的服务器路径,原因是会话ID在变化。通过修改Live555使其始终生成相同的会话ID,可以解决这个特定问题。
  • 生成makefile文件并编译。
    • # 生成Makefile
      ./genMakefiles linux
      # 编译
      make clean all
  • live555源代码编译成功后,所需要的被测服务器(testOnDemandRTSPServer)和RTSP客户端(testRTSPClient)都处于testProgs文件夹中。
  • 将测试中所用的资源复制到testProgs文件夹中。
    • # 去到服务器和客户端的文件目录下
      cd testProgs
      # 复制相同的媒体资源到服务器文件目录下
      cp $AFLNET/tutorials/live555/sample_media_sources/*.* ./
  • 启动服务器
    • ./testOnDemandRTSPServer 8554
  • 启动客户端
    • # 在另一个终端中启动客户端
      ./testRTSPClient rtsp://127.0.0.1:8554/wavAudioTest

3、开始实验

3.1、准备初始种子
  • AFLNet是基于变异的fuzzer,需要初始种子作为输入,即消息序列。
  • 因此我们首先捕获示例客户端 (testRTSPClient)和被测服务器 (testOnDemandRTSPServer)之间的真实通信流量。例如,捕获下面常见的真实流量作为初始种子:服务器根据请求将WAV格式的音频文件流式传输到客户端。
  • 启动被测服务器。
    • # 去到服务器和客户端的文件目录下执行
      ./testOnDemandRTSPServer 8554
  • 打开新的终端,使用tcpdump捕获服务器和客户端之间的通信流量。
    • sudo tcpdump -i lo -w rtsp.pcap port 8554
  • 打开新的终端,启动客户端。
    • ./testRTSPClient rtsp://127.0.0.1:8554/wavAudioTest
  • 在客户端运行结束后,ctrl+c停止tcpdump捕获。
  • 客户端与服务器之间的消息序列将被保存在rtsp.pcap文件中。该文件可以使用wirehsark打开,并提取客户端发给服务器的消息序列(请求),并将请求序列作为AFLNet的种子输入。
  • 使用wireshark打开rtsp.pcap文件。
    • # 打开rtsp.pcap文件
      wireshark rtsp.pcap
  • 提取请求序列。
  • Wireshark将以纯文本形式显示所有请求和响应。

  • 只保留客户端向服务器发送的请求。
  • 以二进制的形式保存请求序列,单击“另存为”并将其保存到文件中,例如rtsp_requests_wav.raw。保存到 /RTSP/live555/testProgs/in-rtsp下。
3.2、Fuzz
  • 运行模糊测试。
    • cd $workspace./RTSP/live555/testProgs
      # 使用AFLNet的afl-fuzz进行模糊测试
      afl-fuzz -d -i ./in-rtsp/ -o out-live555 -N tcp://127.0.0.1/8554 -x $AFLNET/tutorials/live555/rtsp.dict -P RTSP -D 10000 -q 3 -s 3 -E -K -R ./testOnDemandRTSPServer 8554
      
  • 报错:
    • [-] Hmm, your system is configured to send core dump notifications to an
          external utility. This will cause issues: there will be an extended delay
          between stumbling upon a crash and having this information relayed to the
          fuzzer via the standard waitpid() API.
      
          To avoid having crashes misinterpreted as timeouts, please log in as root
          and temporarily modify /proc/sys/kernel/core_pattern, like so:
      
          echo core >/proc/sys/kernel/core_pattern
      
      [-] PROGRAM ABORT : Pipe at the beginning of 'core_pattern'
               Location : check_crash_handling(), afl-fuzz.c:8340
  • 解决办法:
    • # 获得管理员权限
      sudo su root
      # 修改配置
      echo core >/proc/sys/kernel/core_pattern
      # 退出
      exit
  • 重新运行。
    • afl-fuzz -d -i ./in-rtsp/ -o out-live555 -N tcp://127.0.0.1/8554 -x $AFLNET/tutorials/live555/rtsp.dict -P RTSP -D 10000 -q 3 -s 3 -E -K -R ./testOnDemandRTSPServer 8554

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

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

相关文章

数据库怎么同步

数据库要怎么同步呢&#xff0c;有很多方法&#xff0c;看你用什么数据库&#xff0c;如果是Sqlserver,你要数据库同步&#xff0c;那么可以使用自带的订阅发布&#xff0c;订阅发布应该是不错的方法&#xff0c;但是我上次要配置双向同步&#xff0c;它的对等发布好像没部署成…

【LeetCode】四、栈相关:有效的括号 + 下一个更大的元素

文章目录 1、栈结构2、Java中的栈3、leetcode20&#xff1a;有效的括号4、leetcode496&#xff1a;下一个更大元素 1、栈结构 和队列相反&#xff0c;栈先进后出 时间复杂度&#xff1a;访问、插入、删除都在栈顶进行操作&#xff0c;时间复杂度为O(1)&#xff0c;搜索需要遍…

【自监督-MIM】系列方法学习二

Masked image modeling 是一种训练深度学习模型的技术,尤其是在视觉领域,类似于自然语言处理中的掩码语言建模(Masked Language Modeling)。它通过在输入图像中随机遮挡(或称为掩码)部分区域,然后训练模型来预测这些被遮挡部分的内容,从而提高模型的视觉理解能力。 Ma…

常见的字符串函数(包含头文件string.h)和字符函数(2)

八. strstr函数 1.strstr的定义 char *strstr( const char *str1, const char *str2 ); ->1. strstr查找子串(str2)在字符串(str2)中第一次出现的位置&#xff0c;记录并返回该位置的指针&#xff0c;如果找不到&#xff0c;则返回NULL ->2. str1&#xff1a;查找字符…

Java毕业设计 基于SSM vue药店管理系统小程序 微信小程序

Java毕业设计 基于SSM vue药店管理系统小程序 微信小程序 SSM 药店管理系统小程序 功能介绍 用户 登录 注册 首页 药品信息 药品详情 加入购物车 立即购买 收藏 购物车 立即下单 新增收货地址 我的收藏管理 用户充值 我的订单 留言板 管理员 登录 个人中心 修改密码 个人信息…

【深度学习】python之人工智能应用篇--跨模态生成技术

跨模态生成技术概述 跨模态生成技术是一种将不同模态的数据&#xff08;如文本、图像、音频、视频等&#xff09;进行融合和转换的技术。其目标是通过将一个模态的数据作为输入&#xff0c;生成与之对应的另一个模态的输出。这种技术对于突破单一模态的局限性&#xff0c;提高…

【九】【QT开发应用】WebRTC的sigslot源码和使用WebRTC的sigslot使用编写信号槽

WebRTC&#xff08;Web Real-Time Communication&#xff09; 是一个开源项目&#xff0c;提供实时通信能力&#xff0c;广泛应用于视频、音频和数据传输。在WebRTC的实现中&#xff0c;sigslot库用于信号和槽机制&#xff0c;以实现事件驱动的编程模型。 WebRTC的sigslot部分…

如何精准分析人形机器人运动数据?

全球“机器换人”进程加速,人形机器人有望成为AI下一个重要落地应用场景;EtherCAT-Analyzer具备分析人形机器人所有关节和电池与主站的通讯信息,快速掌握节点网络状态! 前言 随着人形机器人行业的发展及《中国制造2025》的全面实施,传统的脉冲模式控制很大程度上制约了机…

一个例子理解傅里叶变换的计算过程

假设我们有一个简单的信号&#xff0c;由两个不同频率的正弦波组成&#xff0c;我们希望通过傅里叶变换来分析其频谱。 示例信号 假设我们有一个信号 &#xff1a; 这个信号由两个频率成分组成&#xff1a;一个50 Hz的正弦波和一个120 Hz的正弦波&#xff0c;后者的振幅是前者…

用一个实例看如何分享大量照片 续篇二,关于Exif (Exchangeable Image File) - 可交换图像文件

续篇二&#xff1a;说说关于照片隐含的 Exif (Exchangeable Image File) 可交换图像文件 数码照片的Exif 参数有很多&#xff0c;重要的Exif信息&#xff1a;拍摄日期、时间、拍摄器材、GPS信息。 当然这主要对自己的档案有意义&#xff0c;如果放到网上还是建议抹去这些信息。…

微服务框架中的Eureka和Ribbon的个人理解

微服务框架需要学习的东西很多&#xff0c;基本上我把它分为了五个模块&#xff1a; 第一&#xff1a;微服务技术模块 分为三个常用小模块&#xff1a; 1.微服务治理&#xff1a; 注册发现 远程调用 配置管理 网关路由 2.微服务保护&#xff1a; 流量控制 系统保护 熔断降级 服…

数据转换 | Matlab基于R对称点模式(symmetric dot pattern, SDP)一维序列信号转二维时频图象

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 数据转换 | Matlab基于R对称点模式(symmetric dot pattern, SDP)一维序列信号转二维时频图象 SDP常被用于信号分析和深度学习模式识别。 SDP是一种基于极坐标系的图像表示方法&#xff0c;可以直接将原始信…

ECMAScript6介绍及环境搭建

这实际上说明&#xff0c;对象的解构赋值是下面形式的简写。 let { foo: foo, bar: bar } { foo: ‘aaa’, bar: ‘bbb’ }; 也就是说&#xff0c;对象的解构赋值的内部机制&#xff0c;是先找到同名属性&#xff0c;然后再赋给对应的变量。真正被赋值的是后者&#xff0c;而…

基于sivaco设计仿真PT型IGBT和NPT型IGBT结构

本项目基于使用仿真软件SIVACO来仿真研究PT型和NPT型的IGBT结构特点&#xff0c;并且通过仿真研究对于不同的掺杂浓度、沟道宽度等对器件的特性产生不同的影响。 资料获取到咸&#x1f41f;&#xff1a;xy591215295250 \\\或者联系wechat 号&#xff1a;comprehensivable &…

IND83081芯片介绍(二)

七、典型应用 上面显示了独立的CAN收发器&#xff0c;而下面则显示了多个iND83081可以共享同一个CAN收发器的应用场景。通过这些连接&#xff0c;iND83081可以实现对多个LED的驱动和控制&#xff0c;同时与外部MCU进行通信 。 八、ELINS接口 1.ELINS简介 ELINS是一种从接口&a…

PHP 网络通信底层原理分析

大家好&#xff0c;我是码农先森。 引言 我们日常的程序开发大多数都是以业务为主&#xff0c;很少会接触到底层逻辑。对于我们程序员来说&#xff0c;了解程序的底层运行逻辑&#xff0c;更有助于提升我们对程序的理解。我相信大多数的人&#xff0c;每天基本上都是完成业务…

利用labelme制作自己的coco数据集(labelme转coco数据集)

最近刚接触学习mmdetection&#xff0c;需要用到coco格式的数据集。 1.安装labelme 建议在conda(base)环境下安装&#xff08;前提是需要下载anaconda&#xff09;,下面是我已经装过的情况。 2.进入labelme环境下 中间可能会提示安装其它库&#xff0c;自行装上就行。 这里的…

5种u盘加密技巧分享,保护保护您的数据隐私

怎么给电脑U盘加密呢&#xff1f;U盘作为一种便携式存储设备&#xff0c;常常用于传输和存储敏感信息。由于U盘的易于丢失或被盗的特点&#xff0c;U盘加密显得尤为重要。今天教大家如何给电脑U盘加密&#xff0c;推荐3款优秀的U盘加密软件&#xff0c;并提供操作方法和注意事项…

51单片机看门狗定时器配置

测试环境 单片机型号&#xff1a;STC8G1K08-38I-TSSOP20&#xff0c;其他型号请自行测试&#xff1b; IDE&#xff1a;KEIL C51&#xff1b; 寄存器配置及主要代码 手册中关于看门狗的寄存器描述如下&#xff1a; 启动看门狗&#xff0c;需将B5位EN_WDT置1即可&#xff0c;…

数据结构与算法基础(王卓)--学习笔记

1 数据结构分类 1.1 逻辑结构分类 集合结构线性结构&#xff1a;线性表、栈、队列、串树形结构图形结构 1.2 物理结构分类 逻辑结构在计算机中的真正表示方式&#xff08;又称为映射&#xff09;称为物理结构&#xff0c;也可叫做存储结构 顺序存储结构&#xff1a;数组链…