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

1、简介

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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恣睢s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值