[翻译]使用AFL进行fuzz
使用AFL进行fuzz
回顾早期的软件漏洞,在攻防之间的较量相当精彩。现在IT公司和安全实验室会使用强大的Fuzz工具寻找软件缺陷或挖掘漏洞。新防御技术提出的同时,反防御技术也随之出现。在这篇文章中,我们将了解软件漏洞利用的整个过程:从使用American Fuzzy Lop(AFL)来进行fuzz,到使用gdb-peda和pwntools调试编写漏洞利用脚本。为此,我们编写一个有明显缓冲区溢出漏洞的64位程序,然后对其进行fuzz,找到漏洞,分析结果,并为其编写漏洞利用脚本。这里也提供了视频资源。
安装AFL
我们使用Ubuntu64位系统,通过以下命令即可成功安装AFL:
wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz tar -xvf afl-latest.tgz cd afl-2.52b/ make sudo make install
用afl-gcc编译有漏洞的vuln1程序
虽然可以在网上找一个有漏洞的程序,但为了完全了解细节,我们还是自己写一个简单的C程序。这个程序使用了2个字符串缓冲区,每个缓冲区的长度为32字节,分别用于存放username和password。为了获取用户输入,我们使用不安全的gets()函数,它不会去检查边界,这会导致缓冲区溢出。
#include <stdio.h>
#include <string.h>
int main(void)
{
char login[32];
char passwd[32];
printf("Login: \n");
gets(login);
printf("Password: \n");
gets(passwd);
if (strcmp(login, "root") == 0) {
if (strcmp(passwd, "1qazxsw2") == 0) {
printf("Access Granted.\n");
return 0;
}
}
printf("Access Denied.\n");
return 1;
}
执行该程序,会要求输入username和password。输入被存放到login和passwd变量中。然后使用strcmp()和正确的值比较,如果输入值为"root"和"1qazxsw2",控制台会输出"Access Granted.",否则输出"Access Denied."。
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
