如何使用Afl-Fuzz去测试一个shell脚本·

    众所周知,模糊测试技术已经成为了测试软件质量的重要手段。基于模糊测试技术开发的测试工具有很多,其中最长被使用而且改进也是最多的一个工具就是AFL(American Fuzz Lop). 本篇文章不会赘述如何安装afl,以及如何使用afl进行简单的fuzz。由于很多被测程序都有自己的一个入口,而这些入口有的十分清晰,有的则很难挖掘到。为了解决这个问题,有许多软件项目在自己的代码中会给出一个用于测试的程序,一般叫做test-driver,这个程序里面实现了该软件项目的一些主要函数和方法,可以用来对整个软件项目进行测试。但是,大部分的test-driver是一个shell脚本,而afl是无法对一个shell脚本进行fuzz的。为了解决这个问题,我们可以变换一种方法来进行脚本的fuzz。具体操作过程如下:

    一. 下载安装shc

    shc是一个可以编译shell程序为C可执行程序的编译器,项目地址如下:https://github.com/neurobin/shc.git。在编译shc的过程中,你用到的编译器将会决定shc将shell转换成C文件之后的编译器用什么,所以我们安装shc的过程如下:

git clone https://github.com/neurobin/shc.git
cd shc
./autogen.sh
CC=/usr/local/bin/afl-gcc ./configure # CC设置为afl-gcc的绝对路径
vim Makefile

在Makefile里面,观察一下CC是否是afl-gcc,如果想加ASAN模式,在CFLAG后面添加 -fsanitize=address。

make

在编译之后,安装:

make install

    二. 测试shc

    在src目录下可以看到生成的可执行文件shc,我们随便找一个脚本来测试一下,在shc/test/ 目录下,有若干测试脚本,我们利用pru.sh这个文件进行测试,将pru.sh copy到当前目录下:

cp ../test/pru.sh ./

    之后运行:

./shc -f ./pru.sh ./out

    -f参数指定了要转化的脚本文件,第二个参数是输出文件,我们来看一下它们的文件类型:

    1)第一个pru.sh自然不必说,是shell文件:

        

    2) out文件是一个可执行文件:

        

    三. fuzz 一个shell脚本

    有了用afl-gcc编译安装好的shc,我们就可以fuzz一个shell脚本文件了。具体做法也十分简单,对于一个软件项目来说,用afl-gcc编译插桩整个程序,之后,利用刚刚的方法编译安装好shc,然后利用shc将test-driver转化为一个C编译成的可执行文件,这里的编译器用的还是afl-gcc,这样就给驱动程序进行了插桩编译。然后就可以设置种子,fuzz这个编译出来的可执行文件啦。








    

 



  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值