模糊测试-radamsa学习笔记

目录

代码

简介

目录结构

Linux平台(Ubuntu测试)

编译

工具安装

下载编译

查看版本

Windows平台(Win10测试)

cygwin安装

编译

选项

使用举例

Hello World!

json数据

添加json数据

使用radamsa进行fuzz

脚本编写


代码

radamsa

简介

Radamsa是用于健壮性测试(又称为模糊测试)的测试用例生成器。它通常用于测试程序对格式错误和潜在恶意输入的承受能力。它通过读取有效数据的样本文件并从中生成令人感兴趣的不同输出来工作。radamsa的主要卖点是,它已经在真正重要的程序中发现了许多错误,它易于编写脚本,并且易于启动和运行。

目录结构

目录结构1
目录结构2
  • bin 一些测试的shell脚本等
  • c    库、头文件以及一对库的一些测试
  • doc 文档
  • rad 一些.scm文件(一种支持DRM(Digital Rights Management 数字版权保护)的新兴媒体格式)
  • tests 测试目录,包含一些脚本及抓的网络包

Linux平台(Ubuntu测试)

编译

工具安装

sudo apt update

安装

sudo apt-get install gcc make git wget

下载编译

git clone git@gitlab.com:akihe/radamsa.git && cd radamsa && sudo make && sudo make install
develop版本
develop版本

它有很多分支,我下载的develop版本。

查看版本

radamsa --version
版本

develop版本应该和master,v0.6是一样的,master和v0.6应该更稳定些。

Windows平台(Win10测试)

cygwin安装

标题

 

标题
标题

 

 

阿里云镜像

上面的截图在选择包之后出现,有的人的软件有列表,我的是空的,自己Add上。

标题
标题

 

 选择好后悔安装,上面以gcc和make为例,建议使用后方的命令去安装gcc make和wget

标题

 安装命令

进入到安装包目录,使用以下命令会自动到达gcc make wget的页面。

setup-x86_64.exe -q -P wget -P gcc-g++ -P make -P diffutils -P libmpfr-devel -P libgmp-devel -P libmpc-devel

安装完成,打开Cygwin.bat查看。

 

版本

编译

编译成功

想要不通过Cygwin运行,需要将依赖放到exe的目录中,然后使用cmd命令

cygwin1.dll在cygwin64安装目录的bin目录中,radamsa.exe路径在radamsa的bin中。

同一目录下

 cmd命令调用

cmd命令调用radamsa.exe

 选项

radamsa用法
用法:radamsa [参数] [文件]  
参数 含义
-h | –help 展示帮助信息
-a | –about radamsa介绍
-V | –version 版本
-o | –output <arg> 输出模式,例如out.bin /tmp/fuzz-%n.%s、-、:80或127.0.0.1:80或127.0.0.1:123/udp [默认-]
-n | –count <arg> 要生成多少个输出(数字或inf)[默认1]
-s | –seed <arg> 随机种子(数字,默认随机)
-m | –mutations <arg> 要使用哪些突变[ft = 2,fo = 2,fn,num = 5,td,tr2,ts1,tr,ts2,ld,lds,lr2,li,ls,lp,lr, lis,lrs,sr,sd,bd,bf,bi,br,bp,bei,bed,ber,uw,ui = 2,xp = 9,ab]
-p | –patterns <arg> 要使用的突变模式[od,nd = 2,bu]
-g | –generators <arg> 要使用的数据生成器[random,file = 1000,jump = 200,stdin = 100000]
-M | –meta <arg> 将有关生成文件的元数据保存到此文件
-r | –recursive 包括子目录中的文件
 -S | –seek <arg> 从给定的测试用例开始
-T | –truncate <arg> 仅占用每个输出的前n个字节(主要用于UDP)
-d | –delay <arg> 输出之间睡眠n毫秒
 -l | –list 列出突变,模式和生成器
-C | –checksums <arg> uniqueness过滤器中的最大校验和数(0禁用)[默认10000]
-H | –hash <arg> 用于唯一性检查的哈希算法(stream,sha1或sha256)[默认stream]
-v | –verbose 显示生成过程中的进度

使用举例

Hello World!

echo 'Hello World!' | radamsa
hello world

json数据

sudo apt install jq
标题

添加json数据

nano test.json

不习惯nano的加,可以用vim

内容

数据如下

{"test": "test","array":["item1: lady","item2: killer"]
}

 检查语法

jq . test.json

没有问题会输出,有问题根据提示改。

检查无误

使用radamsa进行fuzz

radamsa test.json | jq .
结果

有时fuzz后不符合json格式便会报错。

脚本编写

为了更有效的进行fuzz,编写一个小脚本。

vim jq-fuzz.sh
#!/bin/bash
while true; doradamsa test.json>input.txtjq . input.txt>/dev/null 2>&1if [ $? -gt 127 ]; thencp input.txt crash-`date +%s`.jsonecho "Crash found"fi
done

radamsa fuzz后的结果保存至input.txt,使用jq进行检验,出错的保存至crash-时间戳.json。

执行权限

chmod +x jq-fuzz.sh
./jq-fuzz.sh

 运行结果如下:

各种Crash

 Ctrl+C停止

 

生成的文件
举例

 

更多内容查看:网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注