Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
TriforceOpenBSDFuzzer — 使用 TriforceAFL(即 AFL 和 QEMU)对 OpenBSD amd64 进行系统调用模糊测试 | Kitploit
工具/GitHubGitHub/nccgroup/triforceopenbsdfuzzer
动态分析 (沙盒)漏洞分析模糊测试
GitHubnccgroup/triforceopenbsdfuzzer

TriforceOpenBSDFuzzer

使用 TriforceAFL(即 AFL 和 QEMU)对 OpenBSD amd64 进行系统调用模糊测试

查看仓库
471858年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

TriforceOpenBSDSyscallFuzzer

  • 20160825
  • https://github.com/nccgroup/TriforceOpenBSDFuzzer
  • Jesse Hertz [email protected]
  • Tim Newsham [email protected]

这是一组用于使用 TriforceAFL(即 AFL 和 QEMU)对 OpenBSD amd64 执行系统调用模糊测试的文件。要使用它,你需要 TriforceAFL (https://github.com/nccgroup/TriforceAFL)、FlashRD 2.0 发行版 (http://www.nmedia.net/flashrd/)、一台用于构建驱动程序和磁盘镜像的 OpenBSD 机器,以及一台作为宿主机运行 fuzzer 的 Linux 机器(其他 fuzzer 宿主机可能也可以,我们仅在 Linux 宿主机上运行过 TriforceAFL,具体是 Debian/Ubuntu)。

我们将在这台 OpenBSD 机器上以 root 身份执行所有操作,因为该机器仅用于引导我们的环境。如果你已有一台 OpenBSD 机器,可以不必以 root 身份执行这么多操作。如果你是经验丰富的 OpenBSD 用户,下文许多内容会显得过于冗长。无论如何,继续吧!

在 OpenBSD 机器上:

root@kitploit:~
export PKG_PATH=http://mirrors.sonic.net/pub/OpenBSD/$(uname -r)/packages/$(uname -m)/
pkg_add git
pkg_add python # pick python 2.7

接下来,你需要下载 OpenBSD 源代码和内核源代码,然后解压它们:

root@kitploit:~
cd ~
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/src.tar.gz 
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/sys.tar.gz
cd /usr/src; tar -xzpf $HOME/src.tar.gz; tar -xzpf $HOME/sys.tar.gz;

如果你已经有安装 CD,则无需下载以下文件(因为它们会位于 $CDMOUNT/5.9/amd64/*.tgz 中)。你只需适当设置 $DISTDIR。否则……

root@kitploit:~
cd ~
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/amd64/base59.tgz
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/amd64/man59.tgz
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/amd64/comp59.tgz
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/amd64/game59.tgz
export DISTDIR=~

现在我们已经安装了必要的依赖项,可以开始构建相关组件了。

进入 TriforceOpenBSDFuzzer 目录。其中有分别包含 OpenBSD 文件(targ)和 fuzzer 宿主文件(fuzzHost)的独立目录。

构建驱动程序和输入

在 OpenBSD 主机上,进入 targ 目录并运行 make。你还应在此目录中构建输入文件:

root@kitploit:~
    mkdir inputs
    ./gen.py                   # build simple tests
    ./genTempl.py templ.txt    # build most syscall tests
    ./gen2.py                  # build complex syscall tests
    tar -czf ../inputs.tgz inputs

构建磁盘镜像

接下来,你需要使用 FlashRD 发行版(http://www.nmedia.net/flashrd/)构建一个包含驱动程序的磁盘镜像。在 OpenBSD 主机上(源码位于 /usr/src,内核源码位于上述章节中的 /usr/src/sys),我们现在将执行以下操作:

  • 解压 flashrd-2.0
  • 修补 flashrd
  • 创建一个 obsd 目录,并向其中填充内容!
root@kitploit:~
    cd ~ #make sure this is on your /home parition, you will need significant disk space for this
    ftp http://www.nmedia.net/flashrd/flashrd-2.0.tar.gz
    tar xzf flashrd-2.0.tar.gz
    cd flashrd-2.0
    patch -p1 < $FUZZER/image-diff.txt #set $FUZZER to where you cloned TriforceOpenBSDFuzzer
    mkdir obsd
    cd obsd

    tar xzpf $DISTDIR/base59.tgz
    tar xzpf $DISTDIR/man59.tgz
    tar xzpf $DISTDIR/comp59.tgz
    tar xzpf $DISTDIR/game59.tgz
    tar xzpf /var/sysmerge/etc.tgz
    cp $FUZZER/image-etc-rc etc/rc
    cp $FUZZER/targ/inputs/ex1 root/ex1
    cd ..

现在你可以通过运行以下命令来创建镜像:

root@kitploit:~
    cp $FUZZER/targ/driver obsd/bin/driver
    ./flashrd obsd
    mv flashimg* $FUZZER/flashimg.bin
    mv bsd.gdb $FUZZER/bsd.gdb

请保存 flashimg.bin 和 bsd.gdb 的副本。你将在 fuzzer 宿主机上用到它们。

你可能希望创建一个用于调试的第二个镜像,以便运行交互式 shell。编辑 obsd/etc/rc,将 /bin/driver -v 替换为 /bin/sh -i,然后创建第二个镜像。之后我们将保存 flashimg-sh.bin 和 bsd-sh.gdb 的副本以备后用。

root@kitploit:~
    ./flashrd obsd
    mv flashimg* $FUZZER/flashimg-sh.bin
    mv bsd.gdb $FUZZER/bsd-sh.gdb

现在我们可以离开 OpenBSD 机器,返回我们的 fuzzer 宿主机(确保将 $FUZZER 复制出来,以便在 fuzzer 宿主机上使用)。

模糊测试

我们在 Linux 主机上运行 fuzzer(它应该可以在任何能够构建并运行 TriforceAFL 的主机上工作,但效果可能因环境而异,尤其是在非 Linux 主机上)。在 fuzzer 宿主机上,将 TriforceAFL 安装到 ../TriforceAFL。将 flashimg*.bin 和 bsd*.gdb 复制到 fuzzhost 目录,并将输入解压到 fuzzHost 目录:

root@kitploit:~
    cd TriforceOpenBSDFuzzer # this should now have the files we made on the BSD host in it
    cp flashimg* fuzzHost/
    cp bsd* fuzzHost/
    cd fuzzhost
    tar xzf ../inputs.tgz

现在我们准备开始模糊测试!进入 fuzzHost 目录,并使用 ./runFuzz -M M0 启动 fuzzer。

请注意,runFuzz 脚本需要一个 master 或 slave 名称,因为它始终以 master/slave 模式运行。有关更多用法信息,请参阅 runFuzz 脚本。

复现

要在 fuzzer 宿主机上复现测试用例(例如崩溃),请运行:

root@kitploit:~
  ./runTest inputs/ex1
  ./runTest outputs/crashes/id*

你也可以在模拟环境之外运行驱动程序,使用 -t 选项,使用 -vv 启用详细日志记录,并使用 -x 不实际执行系统调用。例如,在 OpenBSD 主机上运行:

root@kitploit:~
  ./driver -tvvx < inputs/ex1
  ktrace ./driver -t < inputs/ex1

有时能够启动内核并交互式地运行测试会很有用。你可以运行 ./runSh 启动到交互式 shell。

你可能会希望向 flashimg-sh.bin 文件中添加额外的文件(例如测试用例)以进行测试。为此,请在 OpenBSD 主机上将额外文件复制到 flashrd-2.0/obsd/root,然后重新构建 flash 镜像。将文件传回你的 fuzzer 宿主机,然后再次执行 runSh。你将在 /root 目录中找到这些额外文件。你也可以在创建 flash 镜像后以 OpenBSD 主机上的 root 身份向其中添加文件:

root@kitploit:~
    vnconfig vnd0 ./flashimg.bin
    mount /dev/vnd0a /mnt
    cp file /mnt
    umount /mnt
    vnconfig -u vnd0

此处添加的文件将在镜像启动时出现在 /flash 中。

调试

之前应用于 flashrd 发行版的补丁将在构建内核时启用调试并禁用优化。这使得调试变得更加容易。

要从 fuzzHost 调试内核,请从你的 OpenBSD 主机复制一份 /usr/src/sys,并将 bsd-sh.gdb 复制到 sys/x/x/x/x。在一个窗口中运行 ./runSh,待系统启动后运行:

root@kitploit:~
    cd sys
    mkdir -p x/x/x/x
    cd x/x/x/x
    cp $FUZZER/bsd-sh.gdb .
    gdb -ex "target remote :1234" ./bsd-sh.gdb
下载工具