AFL漏洞挖掘技术漫谈:Fuzz结果分析和代码覆盖率

前言
上一篇文章中向大家介绍了使用AFL开始模糊测试前要做的一些准备工作,以及AFL的几种工作方式,但是并没有提到何时结束测试过程,以及测试完成后又需要做些什么。本文中就继续介绍这些内容,并开始逐步介绍一些AFL相关原理。以下就是本文中主要讨论的问题:

  • 何时结束Fuzzing工作
  • afl-fuzz生成了哪些文件
  • 如何对产生的crash进行验证和分类
  • 用什么来评估Fuzzing的结果
  • 代码覆盖率及相关概念
  • AFL是如何记录代码覆盖率的

AFL漏洞挖掘技术漫谈:使用AFL开始第一Fuzzing

##前言
模糊测试(Fuzzing)技术作为漏洞挖掘最有效的手段之一,近年来一直是众多安全研究人员发现漏洞的首选技术。AFL、LibFuzzer、honggfuzz等操作简单友好的工具相继出现,也极大地降低了模糊测试的门槛。笔者近期学习漏洞挖掘过程中,感觉目前网上相关的的资源有些冗杂,让初学者有些无从着手,便想在此对学习过程中收集的一些优秀的博文、论文和工具进行总结与梳理、分享一些学习过程中的想法和心得,同时对网上一些没有涉及到的内容做些补充。

Bypassing Canary——SSP Leak

SSP Leak即Stack Smashing Protect Leak ,从字面意思理解,主要作用是泄漏信息,而非getshell。不过有些题目中flag已经被读取存在内存中了,这时我们就可以通过SSP Leak将flag泄漏出来。

该方法需要我们触发Stack Smashing Protect,即覆盖掉Canary,进入函数__stack_chk_fail中后,将进一步调用__fortify_fail_abort打印stack smashing detected *: ./XXX terminated**,其中的程序名从__libc_argv[0]取得。

Bypassing Canary——hijack __stack_chk_fail

我们都知道,Canary验证失败后会调用 __stack_chk_fail 函数打印 *\ stack smashing detected ***: ./XXX terminated**。__stack_chk_fail 是一个普通的延迟绑定函数,可以通过修改 GOT 表劫持这个函数,来达到Bypass Canary的目的,但只有程序的RELRO为Partial RELRO才可以执行这种操作,下面来看一个具体的例子。

Bypassing Canary——Override Canary in TLS

TL;DR

  • 线程局部存储(TLS)作用
  • glibc中为TLS设置Canary的过程
  • 同时覆盖TLS和返回地址前的Canary——StarCTF2018 babystack
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×