0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Fuzzing101实践之GIMP

我快闭嘴 来源:IOTsec-Zone物联网安全社区 作者:有毒 2022-09-30 11:26 次阅读

6. Fuzzing101 - 6 GIMP

1. 目标环境配置

本次的目标程序是一个带有GUI的可交互的程序,在构建编译上会比之前的软件稍微有一丢丢复杂。

首先要安装gimp会使用到的 GEGL 0.2(Generic Graphics Library),尝试使用源码编译:

# install  dependenciessudo apt install build-essential libatk1.0-dev libfontconfig1-dev libcairo2-dev libgudev-1.0-0 libdbus-1-dev libdbus-glib-1-dev libexif-dev libxfixes-dev libgtk2.0-dev python2.7-dev libpango1.0-dev libglib2.0-dev zlib1g-dev intltool libbabl-dev# download and uncompresswget https://download.gimp.org/pub/gegl/0.2/gegl-0.2.0.tar.bz2tar xvf gegl-0.2.0.tar.bz2 && cd gegl-0.2.0# modify the source codesed -i 's/CODEC_CAP_TRUNCATED/AV_CODEC_CAP_TRUNCATED/g' ./operations/external/ff-load.csed -i 's/CODEC_FLAG_TRUNCATED/AV_CODEC_FLAG_TRUNCATED/g' ./operations/external/ff-load.c# build and install./configure --enable-debug --disable-glibtest  --without-vala --without-cairo --without-pango --without-pangocairo --without-gdk-pixbuf --without-lensfun --without-libjpeg --without-libpng --without-librsvg --without-openexr --without-sdl --without-libopenraw --without-jasper --without-graphviz --without-lua --without-libavformat --without-libv4l --without-libspiro --without-exiv2 --without-umfpackmake -j$(nproc)sudo make install

这里对于 GEGL 这个图形库的编译安装我们不做过多介绍,这不是我们的重点,可以明确告知的是上面的库在编译时大概率会编译报错,导致一些库文件编译失败。所以,对于Ubuntu 20.04以上版本(我使用的是22.04)可以直接 sudo apt install libgegl-0.4-0来安装这个0.4版本的库。(尽量不在非fuzz阶段浪费时间)

然后,下载 GIMP 2.8.16,并进行编译安装:

# download cd ..wget https://mirror.klaus-uwe.me/gimp/pub/gimp/v2.8/gimp-2.8.16.tar.bz2tar xvf gimp-2.8.16.tar.bz2 && cd gimp-2.8.16/# build and installCC=afl-clang-lto CXX=afl-clang-lto++ PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig CFLAGS="-fsanitize=address" CXXFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address" ./configure --disable-gtktest --disable-glibtest --disable-alsatest --disable-nls --without-libtiff --without-libjpeg --without-bzip2 --without-gs --without-libpng --without-libmng --without-libexif --without-aa --without-libxpm --without-webkit --without-librsvg --without-print --without-poppler --without-cairo-pdf --without-gvfs --without-libcurl --without-wmf --without-libjasper --without-alsa --without-gudev --disable-python --enable-gimp-console --without-mac-twain --without-script-fu --without-gudev --without-dbus --disable-mp --without-linux-input --without-xvfb-run --with-gif-compression=none --without-xmc --with-shm=none --enable-debug  --prefix="$HOME/Desktop/Fuzz/training/fuzzing_gimp/gimp-2.8.16/install"AFL_USE_ASAN=1 make -j$(nproc)AFL_USE_ASAN=1 make install

这里的编译选项有点多,第一次的时候尽可能保持一致,避免出错,如果要进行优化和改进,可根据实际需求来增删编译选项。

编译完成后检查软件是否可以正常运行,命令行和图形界面都检查一下。

2. AFL++编译target

1. Persistent Mode

Persistent Mode 是 AFL 提供的一种可以加快fuzz 执行速度的功能,详细原理我们在源码解析的文章中已经进行了深入的介绍,这里大家只需要简单理解成无需每次都进行 fork 操作,而只是在程序的某一特定位置进行循环 fuzz。

2. 修改源码

我们需要在源码中找合适的位置插入 persistent mode 的执行代码,对于本例而言,有两处可以插入。第一处是 app.c 文件:

84df259c-3ff1-11ed-b1c7-dac502259ad0.png

第二处是 xcf.c 文件:

84fe3860-3ff1-11ed-b1c7-dac502259ad0.png

至于为什么选择这两个地方进行 fuzz ,就看大家对软件流程和功能的理解程度了。

我们这里执行时,两种方案都测试一下。第二种方案,通过打补丁的方式来修改源码,补丁如下:

--- ../xcf.c  2014-08-20 08:27:58.000000000 -0700+++ ./app/xcf/xcf.c  2021-10-11 13:02:42.800831192 -0700@@ -277,6 +277,10 @@  filename = g_value_get_string (&args->values[1]);+#ifdef __AFL_COMPILER+ while(__AFL_LOOP(10000)){+#endif+  info.fp = g_fopen (filename, "rb");  if (info.fp)@@ -366,6 +370,12 @@  if (success)   gimp_value_set_image (&return_vals->values[1], image);+#ifdef __AFL_COMPILER+ }+#endif++ exit(0);+  gimp_unset_busy (gimp);  return return_vals;

需要注意的是,最后的 exit(0);一定要有,否在程序会在 console 模式下卡住,导致 fuzz 的 test 都超时。

进行patch:

patch gimp-2.8.16/app/xcf/xcf.c -i persistent.patch

3. 执行fuzz

测试用例我们用一个最简单的:

mkdir afl_in && cd afl_inwget https://github.com/antonio-morales/Fuzzing101/blob/main/Exercise%206/SampleInput.xcf

这里还要注意,删除掉 gimp 的插件,这些插件可能会导致 gimp 运行失败:

rm ./install/lib/gimp/2.0/plug-ins/*

最后开启 fuzz:

ASAN_OPTIONS=detect_leaks=0,abort_on_error=1,symbolize=0 afl-fuzz -i './afl_in' -o './afl_out' -D -t 200 -M master -- ./gimp-2.8.16/install/bin/gimp-console-2.8 --verbose -d -f @@ASAN_OPTIONS=detect_leaks=0,abort_on_error=1,symbolize=0 afl-fuzz -i './afl_in' -o './afl_out' -D -t 200 -S slave1 -- ./gimp-2.8.16/install/bin/gimp-console-2.8 --verbose -d -f @@





审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Target
    +关注

    关注

    0

    文章

    13

    浏览量

    8349
  • 编译
    +关注

    关注

    0

    文章

    615

    浏览量

    32392
  • Fuzzing
    +关注

    关注

    0

    文章

    4

    浏览量

    7229
  • GUI
    GUI
    +关注

    关注

    3

    文章

    610

    浏览量

    38792

原文标题:【技术干货】Fuzzing101全实践 -- (三)

文章出处:【微信号:IOTsec Zone,微信公众号:IOTsec Zone】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    简单美——软件开发实践者的思考

    ` 本帖最后由 zgzzlt 于 2012-8-16 14:01 编辑 简单美——软件开发实践者的思考`
    发表于 08-06 12:29

    《电子DIY》《单片机实践项目》基于51单片机的打地鼠设计与制作

    《电子DIY》《单片机实践项目》基于51单片机的打地鼠设计与制作,此课程主要讲解如何使用51单片机进行实战应用,分为多次课,每次课都会分别围绕一个课程设计或毕业设计(实践项目)展开
    发表于 07-20 06:46

    Air101 MCU芯片有何不同

    “全球缺芯,最缺是MCU!”这两年在疫情、政治因素等复杂背景交织下,MCU价格呈几十倍甚至几百倍上涨之势,如同翻着筋斗云;纵然舍得大价钱,漫漫交期也让人心慌慌。更别提开发切换之难,各种戳心痛~合宙
    发表于 01-24 07:30

    基于Fuzzing的蓝牙OBEX漏洞挖掘技术

    Fuzzing是一种自动化的漏洞挖掘技术。该文在分析OBEX 协议的基础上,利用Fuzzing技术,设计并实现了蓝牙OBEX协议的Fuzzer工具——OBEX-Fuzzer,并且利用该工具对OBEX协议在Nokia N73和SMH-BT555
    发表于 04-15 08:33 16次下载

    ADC101S101,pdf datasheet (Sing

    The ADC101S101 is a low-power, single channel, CMOS 10-bit analog-to-digital converter
    发表于 10-12 09:41 15次下载

    STM32F101xC/STM32F101xD/STM32F

    STM32F101xC/STM32F101xD/STM32F101xE中文资料:本文给出了STM32F101xC、STM32F101xD和S
    发表于 11-01 14:54 134次下载

    u-systm 101s.101h.102h.104h 综合

    u-systm 101s.101h.102h.104h 综合接入设备产品概述:IAD(Integrated Access Device)101S/101H/102H/104H 综合接入设备(下文简称IAD
    发表于 12-04 10:53 12次下载

    SRAM CY14B101Q1, CY14B101Q2, CY14B101Q3 1 Mbit (128 K × 8) Serial SPI nvSRAM

    SRAM CY14B101Q1, CY14B101Q2, CY14B101Q3 1 Mbit (128 K × 8) Serial SPI nvSRAM
    发表于 10-10 09:03 3次下载
    SRAM CY14B<b class='flag-5'>101</b>Q1, CY14B<b class='flag-5'>101</b>Q2, CY14B<b class='flag-5'>101</b>Q3 1 Mbit (128 K × 8) Serial SPI nvSRAM

    Linux图像处理之GIMP的安装

    Linux下的图像处理工具中,比较有名的要数GIMP了。GIMP是GNU图像处理程序(GNU Image Manipulation Program)的缩写,它是一个完全免费的自由软件包,适用于对图像
    发表于 11-02 15:09 0次下载

    怎样用GIMP从图像中删除白色背景

    您知道从互联网下载的大多数图像上令人讨厌的白色(或任何颜色)背景吗?好吧,这是使用GIMP删除它的方法。 GIMP是一款免费软件,类似于Photoshop的替代软件。我想还有其他方法,很费时间,但这是我发现的最简单的方法。..
    的头像 发表于 10-05 17:53 7549次阅读

    怎样使用GIMP制作图像地图

    如果没有图像,创建图像映射将非常困难。因此,您要做的第一件事是从interwebz中获取一个,或者从头开始创建一个(使用GIMP,obvs)。由于编辑和创建图像可能应该是它自己的教程,因此我们假设
    的头像 发表于 12-11 15:00 1799次阅读

    EVAL-ADUCRF101 EVAL-ADUCRF101评估板

    电子发烧友网为你提供ADI(ti)EVAL-ADUCRF101相关产品参数、数据手册,更有EVAL-ADUCRF101的引脚图、接线图、封装手册、中文资料、英文资料,EVAL-ADUCRF101真值表,EVAL-ADUCRF
    发表于 09-02 12:00

    DS5791_STM32F101xC, STM32F101xD,STM32F101xE单片机数据手册

    DS5791_STM32F101xC, STM32F101xD,STM32F101xE单片机数据手册
    发表于 11-23 20:25 0次下载
    DS5791_STM32F<b class='flag-5'>101</b>xC, STM32F<b class='flag-5'>101</b>xD,STM32F<b class='flag-5'>101</b>xE单片机数据手册

    高压开关二极管-BAS101_BAS101S

    高压开关二极管-BAS101_BAS101S
    发表于 02-17 18:56 0次下载
    高压开关二极管-BAS<b class='flag-5'>101_BAS101</b>S

    STM32F101xC/STM32F101xD/STM32F101xE单片机数据手册

    电子发烧友网站提供《STM32F101xC/STM32F101xD/STM32F101xE单片机数据手册.pdf》资料免费下载
    发表于 09-21 09:36 0次下载
    STM32F<b class='flag-5'>101</b>xC/STM32F<b class='flag-5'>101</b>xD/STM32F<b class='flag-5'>101</b>xE单片机数据手册