首页
社区
课程
招聘
[原创]afl-training_libxml2_事例学习
发表于: 2020-6-14 20:31 5006

[原创]afl-training_libxml2_事例学习

2020-6-14 20:31
5006

最近在学习afl的使用,作者比较菜,希望大佬们可以指点一二
afl-training是根据现实案例为模板进行的afl使用练习
且玩且开心
项目地址
https://github.com/mykter/afl-training.git
食用之前可以参考
https://www.codercto.com/a/78143.html
https://mp.weixin.qq.com/s?__biz=MzIxMTU2MzI0MA==&mid=2247483666&idx=1&sn=820c8806a3fb05ca9497255dcf59890e&chksm=97522695a025af8372d6d1fda1445a8537aa65f5b3cfcd829425ffb46217e87982dbee5a1174&scene=126&sessionid=1592138469&key=5e5ea98545184748a98a3daaf1d233f0bf7d5cbfa02f6edd0b7b7de9d8d790cfafe1a63b2f8abe3378198f2d65db5f8f7fda7acca2353a9e8d519633c863c7386733d29aa2d7f3fea62c5955c8b21e5f&ascene=1&uin=MjQ1MTk5MzQyNA%3D%3D&devicetype=Windows+10+x64&version=62090070&lang=zh_CN&exportkey=AQs04%2FRfvt6kSf91rqHczSU%3D&pass_ticket=ythpxXbdTxaMOMclVdjVLQuPrrLUaGykBRzfR%2B5ksp%2BNSiZQTDQ9jiDFqGsGyGcW

--------------------华丽分割线-------------------
libxml2是一个流行库,该库很适合fuzz

图片描述

(项目由autoconf编译
Autoconf解决了系统特使构建和运行时信息的难题,但在软件开发时还有更多的难题,GNU构建系统是为了更好的开发软件而开发的一套完整的公益事业。
主要组成部分有Autoconf、Automake和Libtool
)

(ASAN是linux下内存检测工具,为了后期更好的分析crash,在此处可以开启Address Sanitizer(ASAN)这个内存检测工具,此工具可以更好的检测出缓存区溢出、UAF 等内存漏洞)

好的,操作到这里,libxml2的库应该就被插桩编译完成了
下面就是寻找fuzz点,编写一个harness

图片描述

xmlReadFile()
好的,围绕这个点编写harness(作者在这里想了想,写的和结果差不多,这里就直接贴答案了)
以下harness.c文件

(afl_loop解析
我们将1000传递给了afl_loop()函数。这就相当于AFL在启动一个新进程前,要fuzz1000个测试用例,当然这是消耗内存的,并且这可以根据正在模糊化到应用程序进行高度可调。添加这种代码启用持久模式并不容易。由于在启动期间产生的资源或其他因素,一些应用程序可能没有支持轻松添加while循环到体系结构)

harness很简单,就是通过输入不同的测试用例不停地fuzz xmlReadFile函数

编译成功,下图相关参数解析
图片描述

开始fuzz

-m参数表示对于子进程的内存限制

图片描述

这个函数的使用事例在parse3.c
图片描述
作者比较菜,这里给出自己的答案,如果有错误,评论区指出,秉着不要脸的原则,意见随便提,有用我就改,欢迎大家提供更好的harness

与上一版的不同就是作者把初始化和清理都写在了循环里
编译成功后,开始fuzz,与此同时我们可以使用afl自带的xml字典测试样例,拷贝到in目录中
目录 afl-2.52b/dictionaries/xml.dict

图片描述

关于xmlReadMemory到harness可以参考
https://github.com/google/fuzzer-test-suite/tree/master/libxml2-v2.9.2


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-6-14 20:41 被F4our444编辑 ,原因: 添加url
收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//