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

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

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

Fuzzing101實(shí)踐之GIMP

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

6. Fuzzing101 - 6 GIMP

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

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

首先要安裝gimp會(huì)使用到的 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

這里對(duì)于 GEGL 這個(gè)圖形庫(kù)的編譯安裝我們不做過(guò)多介紹,這不是我們的重點(diǎn),可以明確告知的是上面的庫(kù)在編譯時(shí)大概率會(huì)編譯報(bào)錯(cuò),導(dǎo)致一些庫(kù)文件編譯失敗。所以,對(duì)于Ubuntu 20.04以上版本(我使用的是22.04)可以直接 sudo apt install libgegl-0.4-0來(lái)安裝這個(gè)0.4版本的庫(kù)。(盡量不在非fuzz階段浪費(fèi)時(shí)間)

然后,下載 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

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

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

2. AFL++編譯target

1. Persistent Mode

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

2. 修改源碼

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

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

第二處是 xcf.c 文件:

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

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

我們這里執(zhí)行時(shí),兩種方案都測(cè)試一下。第二種方案,通過(guò)打補(bǔ)丁的方式來(lái)修改源碼,補(bǔ)丁如下:

--- ../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);一定要有,否在程序會(huì)在 console 模式下卡住,導(dǎo)致 fuzz 的 test 都超時(shí)。

進(jìn)行patch:

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

3. 執(zhí)行fuzz

測(cè)試用例我們用一個(gè)最簡(jiǎn)單的:

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

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

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

最后開(kāi)啟 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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Target
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

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

    關(guān)注

    0

    文章

    659

    瀏覽量

    32900
  • Fuzzing
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

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

    關(guān)注

    3

    文章

    662

    瀏覽量

    39754

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    簡(jiǎn)單美——軟件開(kāi)發(fā)實(shí)踐者的思考

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

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

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

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

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

    實(shí)踐電磁兼容設(shè)計(jì)PCB基本布線(xiàn)措施

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

    實(shí)踐電磁兼容設(shè)計(jì)PCB布線(xiàn)基本措施

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

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

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

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

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

    怎樣使用GIMP制作圖像地圖

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

    測(cè)控工程實(shí)踐LabVIEW實(shí)踐教程

    測(cè)控工程實(shí)踐LabVIEW實(shí)踐教程說(shuō)明。
    發(fā)表于 04-19 14:29 ?43次下載

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

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

    《電子DIY》《單片機(jī)實(shí)踐項(xiàng)目》基于單片機(jī)的簡(jiǎn)易數(shù)字秒表的設(shè)計(jì)(Proteus仿真與實(shí)物制作)

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

    電氣控制從理論到實(shí)踐電動(dòng)機(jī)控制一點(diǎn)通

    電氣控制從理論到實(shí)踐電動(dòng)機(jī)控制一點(diǎn)通
    發(fā)表于 02-08 14:22 ?0次下載

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

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

    從理論到實(shí)踐pcb阻抗控制表的使用

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

    4G模組UDP應(yīng)用的最佳實(shí)踐!

    今天說(shuō)的是4G模組UDP應(yīng)用,展示最佳實(shí)踐,送你參考。
    的頭像 發(fā)表于 11-08 09:24 ?421次閱讀
    4G模組<b class='flag-5'>之</b>UDP應(yīng)用的最佳<b class='flag-5'>實(shí)踐</b>!