AFL使用笔记

AFL使用笔记

AFL使用笔记

1.下载

官网:https://github.com/google/AFL

git命令:

git clone https://github.com/google/AFL.git

2.安装

cd AFL-master
make 
make install

3.编写一个简单的测试用例

AFL将从标准输入流输入变异数据

// main.c 
#include<stdio.h>    
#include<stdlib.h>    
#include<string.h>    
      
int main(int argc, char* argv[]) {    
      char buf[100] = {0};    
      gets(buf);    
      printf("%s\n",buf);    
      return 0;    
 }    

4.插桩编译

afl-gcc main.c

5.创建输入输出文件夹,并初始化首个样本文件

mkdir fuzz_in
mkdir fuzz_out
echo "123" >> fuzz_in/1

6.Fuzz

afl-fuzz -i fuzz_in -o fuzz_iout ./a.out

有可能会出现以下情形,原因是系统不会默认将dump信息转储到文件,输入以下命令修改系统配置即可

echo core > /proc/sys/kernel/core_pattern
dump启动失败

启动成功界面如下图

启动成功

Fuzz界面

运行界面

结束只能使用Ctrl+C

7.查看crash输入

xxd命令功能是将字符串转换为hexdump信息

root@codemiao-virtual-machine:/zhd/aflTeste# cd fuzz_out/
root@codemiao-virtual-machine:/zhd/aflTeste/fuzz_out# ls
crashes  fuzz_bitmap  fuzzer_stats  hangs  plot_data  queue
root@codemiao-virtual-machine:/zhd/aflTeste/fuzz_out# cd crashes/
root@codemiao-virtual-machine:/zhd/aflTeste/fuzz_out/crashes# ls
id:000000,sig:06,src:000000,op:havoc,rep:128  id:000001,sig:06,src:000000,op:havoc,rep:128  README.txt
root@codemiao-virtual-machine:/zhd/aflTeste/fuzz_out/crashes# xxd id\:000001\,sig\:06\,src\:000000\,op\:havoc\,rep\:128 
00000000: 858c 8c94 8c05 ffff 056f 8c8c 8c8c 8c8c  .........o......
00000010: 8c8c 498c 8c05 ffd3 056f 8c8c 8c8c 8c8c  ..I......o......
00000020: 8c8c 8c8c 8c8c 8c05 ffd3 056f 8c8c 8c8c  ...........o....
00000030: 8c8c 8c8c 8c8c 8c8c 8c80 8c8c 8c8c 8c8c  ................
00000040: 8c8c 8c69 8c8c 8c8c 8c8c 8c8c 8c8c 8c8c  ...i............
00000050: 8c69 8c8c 8c8c 8c8c 8c8c 8c8c 8c8c 8c05  .i..............
00000060: ffd3 058c 8c8c 8c8c 8c8c 8c8c 7f8c 8c8c  ................
00000070: 8c 

8.复现问题

手动执行编译好的二进制,并输入crash样本,触发了Aborted

root@codemiao-virtual-machine:/zhd/aflTeste# ls
a.out  fuzz_in  fuzz_out  main.c
root@codemiao-virtual-machine:/zhd/aflTeste# ./a.out 
?????^E??^Eo????????I??^E??^Eo?????????????^E??^Eo???????????????????????i?????????????i?????????????^E??^E?????????^?????
?????^E??^Eo????????I??^E??^Eo?????????????^E??^Eo???????????????????????i?????????????i?????????????^E??^E?????????^?????
*** stack smashing detected ***: terminated
Aborted

9.使用asan定位问题

光是触发进程崩溃是无法定位具体问题行号的,需要给程序加上asan(地址消毒)

afl-gcc main.c -fsanitize=address

成功的话afl会有如下打印提示ASAN/MSAN mode

afl-as 2.57b by <lcamtuf@google.com>
[+] Instrumented 4 locations (64-bit, ASAN/MSAN mode, ratio 33%)

再次输入crash样本,获得崩溃行号及函数调用堆栈,可以看到是因为printf格式化参数引起的问题

root@codemiao-virtual-machine:/zhd/aflTeste# cat main.c -n
     1  #include<stdio.h>
     2  #include<stdlib.h>
     3  #include<string.h>
     4  
     5  int main(int argc, char* argv[]) {
     6          char buf[100] = {0};
     7          gets(buf);
     8          printf("%s\n",buf);
     9          return 0;
    10  }

root@codemiao-virtual-machine:/zhd/aflTeste# ./a.out 
?????^E??^Eo????????I??^E??^Eo?????????????^E??^Eo???????????????????????i?????????????i?????????????^E??^E?????????^?????
=================================================================
==1187408==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffe9f552c64 at pc 0x7f47e05c7f6d bp 0x7ffe9f552bc0 sp 0x7ffe9f552368
READ of size 123 at 0x7ffe9f552c64 thread T0
    #0 0x7f47e05c7f6c  (/lib/x86_64-linux-gnu/libasan.so.5+0x4ef6c)
    #1 0x563fd68d83d8 in printf /usr/include/x86_64-linux-gnu/bits/stdio2.h:107
    #2 0x563fd68d83d8 in main /zhd/aflTeste/main.c:8
    #3 0x7f47e03ae0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
    #4 0x563fd68d852d in _start (/zhd/aflTeste/a.out+0x152d)

Address 0x7ffe9f552c64 is located in stack of thread T0 at offset 148 in frame
    #0 0x563fd68d824f in main /zhd/aflTeste/main.c:5

  This frame has 1 object(s):
    [48, 148) 'buf' (line 6) <== Memory access at offset 148 overflows this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow (/lib/x86_64-linux-gnu/libasan.so.5+0x4ef6c) 
Shadow bytes around the buggy address:
  0x100053ea2530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100053ea2540: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100053ea2550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100053ea2560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100053ea2570: 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1 f1 f1
=>0x100053ea2580: 00 00 00 00 00 00 00 00 00 00 00 00[04]f3 f3 f3
  0x100053ea2590: f3 f3 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100053ea25a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100053ea25b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100053ea25c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100053ea25d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==1187408==ABORTING

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容