0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Fuzzing101實踐之GIMP

我快閉嘴 ? 來源:IOTsec-Zone物聯(lián)網(wǎng)安全社區(qū) ? 作者:有毒 ? 2022-09-30 11:26 ? 次閱讀

6. Fuzzing101 - 6 GIMP

1. 目標(biāo)環(huán)境配置

本次的目標(biāo)程序是一個帶有GUI的可交互的程序,在構(gòu)建編譯上會比之前的軟件稍微有一丟丟復(fù)雜。

首先要安裝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 這個圖形庫的編譯安裝我們不做過多介紹,這不是我們的重點,可以明確告知的是上面的庫在編譯時大概率會編譯報錯,導(dǎo)致一些庫文件編譯失敗。所以,對于Ubuntu 20.04以上版本(我使用的是22.04)可以直接 sudo apt install libgegl-0.4-0來安裝這個0.4版本的庫。(盡量不在非fuzz階段浪費時間)

然后,下載 GIMP 2.8.16,并進(jìn)行編譯安裝:

# 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

這里的編譯選項有點多,第一次的時候盡可能保持一致,避免出錯,如果要進(jìn)行優(yōu)化和改進(jìn),可根據(jù)實際需求來增刪編譯選項。

編譯完成后檢查軟件是否可以正常運行,命令行和圖形界面都檢查一下。

2. AFL++編譯target

1. Persistent Mode

Persistent Mode 是 AFL 提供的一種可以加快fuzz 執(zhí)行速度的功能,詳細(xì)原理我們在源碼解析的文章中已經(jīng)進(jìn)行了深入的介紹,這里大家只需要簡單理解成無需每次都進(jìn)行 fork 操作,而只是在程序的某一特定位置進(jìn)行循環(huán) fuzz。

2. 修改源碼

我們需要在源碼中找合適的位置插入 persistent mode 的執(zhí)行代碼,對于本例而言,有兩處可以插入。第一處是 app.c 文件:

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

第二處是 xcf.c 文件:

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

至于為什么選擇這兩個地方進(jìn)行 fuzz ,就看大家對軟件流程和功能的理解程度了。

我們這里執(zhí)行時,兩種方案都測試一下。第二種方案,通過打補丁的方式來修改源碼,補丁如下:

--- ../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 模式下卡住,導(dǎo)致 fuzz 的 test 都超時。

進(jìn)行patch:

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

3. 執(zhí)行fuzz

測試用例我們用一個最簡單的:

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

這里還要注意,刪除掉 gimp 的插件,這些插件可能會導(dǎo)致 gimp 運行失?。?/p>

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 @@





審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Target
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    8448
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    646

    瀏覽量

    32737
  • Fuzzing
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    7254
  • GUI
    GUI
    +關(guān)注

    關(guān)注

    3

    文章

    632

    瀏覽量

    39430

原文標(biāo)題:【技術(shù)干貨】Fuzzing101全實踐 -- (三)

文章出處:【微信號:IOTsec Zone,微信公眾號:IOTsec Zone】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    簡單美——軟件開發(fā)實踐者的思考

    ` 本帖最后由 zgzzlt 于 2012-8-16 14:01 編輯 簡單美——軟件開發(fā)實踐者的思考`
    發(fā)表于 08-06 12:29

    《電子DIY》《單片機實踐項目》基于51單片機的打地鼠設(shè)計與制作

    《電子DIY》《單片機實踐項目》基于51單片機的打地鼠設(shè)計與制作,此課程主要講解如何使用51單片機進(jìn)行實戰(zhàn)應(yīng)用,分為多次課,每次課都會分別圍繞一個課程設(shè)計或畢業(yè)設(shè)計(實踐項目)展開
    發(fā)表于 07-20 06:46

    基于Fuzzing的藍(lán)牙OBEX漏洞挖掘技術(shù)

    Fuzzing是一種自動化的漏洞挖掘技術(shù)。該文在分析OBEX 協(xié)議的基礎(chǔ)上,利用Fuzzing技術(shù),設(shè)計并實現(xiàn)了藍(lán)牙OBEX協(xié)議的Fuzzer工具——OBEX-Fuzzer,并且利用該工具對OBEX協(xié)議在Nokia N73和SMH-BT555
    發(fā)表于 04-15 08:33 ?16次下載

    實踐電磁兼容設(shè)計PCB基本布線措施

    實踐電磁兼容設(shè)計PCB基本布線措施,有興趣的同學(xué)可以下載學(xué)習(xí)
    發(fā)表于 04-27 15:28 ?62次下載

    實踐電磁兼容設(shè)計PCB布線基本措施

    實踐電磁兼容設(shè)計PCB布線基本措施。
    發(fā)表于 11-02 15:44 ?1次下載

    高性能16位數(shù)字信號控制器dsPIC33FJ16MC101/102產(chǎn)品手冊

    本文主要介紹了高性能16位數(shù)字信號控制器dsPIC33FJ16MC101/102產(chǎn)品手冊.
    發(fā)表于 06-28 10:25 ?14次下載
    高性能16位數(shù)字信號控制器<b class='flag-5'>之</b>dsPIC33FJ16MC<b class='flag-5'>101</b>/102產(chǎn)品手冊

    怎樣用GIMP從圖像中刪除白色背景

    您知道從互聯(lián)網(wǎng)下載的大多數(shù)圖像上令人討厭的白色(或任何顏色)背景嗎?好吧,這是使用GIMP刪除它的方法。 GIMP是一款免費軟件,類似于Photoshop的替代軟件。我想還有其他方法,很費時間,但這是我發(fā)現(xiàn)的最簡單的方法。..
    的頭像 發(fā)表于 10-05 17:53 ?8645次閱讀

    怎樣使用GIMP制作圖像地圖

    如果沒有圖像,創(chuàng)建圖像映射將非常困難。因此,您要做的第一件事是從interwebz中獲取一個,或者從頭開始創(chuàng)建一個(使用GIMP,obvs)。由于編輯和創(chuàng)建圖像可能應(yīng)該是它自己的教程,因此我們假設(shè)您
    的頭像 發(fā)表于 12-11 15:00 ?2023次閱讀

    測控工程實踐LabVIEW實踐教程

    測控工程實踐LabVIEW實踐教程說明。
    發(fā)表于 04-19 14:29 ?42次下載

    《電子DIY》《單片機實踐項目》基于單片機的三路搶答器設(shè)計與制作

    《電子DIY》《單片機實踐項目》基于單片機的三路搶答器設(shè)計與制作添加鏈接描述
    發(fā)表于 11-05 11:21 ?22次下載
    《電子DIY》<b class='flag-5'>之</b>《單片機<b class='flag-5'>實踐</b>項目》<b class='flag-5'>之</b>基于單片機的三路搶答器設(shè)計與制作

    《電子DIY》《單片機實踐項目》基于單片機的簡易數(shù)字秒表的設(shè)計(Proteus仿真與實物制作)

    《單片機實踐項目》基于單片機的簡易數(shù)字秒表的設(shè)計(八十二)鏈接:添加鏈接描述
    發(fā)表于 11-12 20:21 ?20次下載
    《電子DIY》<b class='flag-5'>之</b>《單片機<b class='flag-5'>實踐</b>項目》<b class='flag-5'>之</b>基于單片機的簡易數(shù)字秒表的設(shè)計(Proteus仿真與實物制作)

    電氣控制從理論到實踐電動機控制一點通

    電氣控制從理論到實踐電動機控制一點通
    發(fā)表于 02-08 14:22 ?0次下載

    AEC-Q101 標(biāo)準(zhǔn)TC解讀

    AEC-Q101標(biāo)準(zhǔn)TC解讀TC(TemperatureCycling)高溫循環(huán)測試意義在于證實極高溫度,極低溫度和高溫與低溫交替作用時,機械應(yīng)力對于器件焊接性能的作用,標(biāo)準(zhǔn)AEC-Q101-E中
    的頭像 發(fā)表于 08-30 08:27 ?1551次閱讀
    AEC-Q<b class='flag-5'>101</b> 標(biāo)準(zhǔn)<b class='flag-5'>之</b>TC解讀

    從理論到實踐pcb阻抗控制表的使用

    從理論到實踐pcb阻抗控制表的使用
    的頭像 發(fā)表于 09-26 10:34 ?611次閱讀

    上海和晟HS-101D鹽霧試驗箱校準(zhǔn)證書

    HS-101D鹽霧試驗箱針對各種材料表面處理,包含涂料.電鍍.有機和無機皮膜.陽極處理.防銹油.化成處理耐蝕品質(zhì),進(jìn)而達(dá)成制品長時間耐蝕性。上海和晟HS-101D鹽霧試驗箱校準(zhǔn)證書
    的頭像 發(fā)表于 01-08 10:10 ?336次閱讀
    上海和晟HS-<b class='flag-5'>101</b>D鹽霧試驗箱校準(zhǔn)證書