这里有人吗?我一直致力于使用afl-qemu模式模糊IoT二进制文件。但在开始运行二进制文件时,我遇到了"Fork服务器握手失败“的问题。我已经阅读了之前的相关会话,但这些都不能解决我的问题。
二进制文件的信息如下:
./bin/busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped通过我的测试,只有4.1.0以上的qemu版本才能成功处理'-L‘参数。因此,我通过编辑build_qemu_support.sh来升级qemu版本。需要提到的是,我注释掉了几行代码,以便处理运行时出现的错误。
#patch -p1 <../patches/elfload.diff || exit 1
#patch -p1 <../patches/cpu-exec.diff || exit 1
#patch -p1 <../patches/syscall.diff || exit 1在设置了QEMU_LD_PREFIX和AFL_PATH之后,我尝试了类似于“afl-showmap -m none be _ out /out.txt busybox -Q ./bin/busybox cat”的建议,结果很好。
root@ubuntu:squashfs-root# afl-showmap -m none -o fuzz_out/out.txt -Q ./bin/busybox cat
afl-showmap 2.52b by <lcamtuf@google.com>
[*] Executing './bin/busybox'...
-- Program output begins --但是当我尝试命令'afl-fuzz -m none But _in/ -o fuzz_out/ -Q ./bin/busybox cat @@‘时,它报告如下所示的错误。
root@ubuntu:squashfs-root# afl-fuzz -m none -i fuzz_in/ -o fuzz_out/ -Q ./bin/busybox cat @@
afl-fuzz 2.52b by <lcamtuf@google.com>
[+] You have 4 CPU cores and 2 runnable tasks (utilization: 50%).
[+] Try parallel jobs - see /usr/local/share/doc/afl/parallel_fuzzing.txt.
[*] Checking CPU core loadout...
[+] Found a free CPU core, binding to #0.
[*] Checking core_pattern...
[*] Setting up output directories...
[+] Output directory exists but deemed OK to reuse.
[*] Deleting old session data...
[+] Output dir cleanup successful.
[*] Scanning 'fuzz_in/'...
[+] No auto-generated dictionary tokens to reuse.
[*] Creating hard links for all input files...
[*] Validating target binary...
[*] Attempting dry run with 'id:000000,orig:testcase'...
[*] Spinning up the fork server...
[-] Hmm, looks like the target binary terminated before we could complete a
handshake with the injected code. Perhaps there is a horrible bug in the
fuzzer. Poke <lcamtuf@coredump.cx> for troubleshooting tips.
[-] PROGRAM ABORT : Fork server handshake failed
Location : init_forkserver(), afl-fuzz.c:2253谁能告诉我问题出在哪里?我升级qemu有什么关系吗?非常感谢!
发布于 2021-02-09 19:42:48
您已尝试升级afl-qemu使用的QEMU版本。因为afl-qemu会修改QEMU的源代码,所以这不是一件容易的事情。特别是,您注释掉的这些命令:
#patch -p1 <../patches/elfload.diff || exit 1
#patch -p1 <../patches/cpu-exec.diff || exit 1
#patch -p1 <../patches/syscall.diff || exit 1都是写着“对.diff文件指定的QEMU源代码进行精确修改”的命令。注释掉补丁命令意味着不会进行修改。因此,生成的QEMU二进制文件不能以应有的方式与afl-qemu框架交互也就不足为奇了。
如果您需要使afl-qemu与较新的QEMU一起工作,则必须查看所有补丁文件,并确定较新的QEMU版本上的等效更改。除非您熟悉(或愿意花时间熟悉) QEMU和afl-qemu的内部结构,否则这将是一件棘手的事情。(您可以环顾四周,看看是否有人已经这样做了。)
如果您尝试此升级的唯一原因是为了避免在早期QEMU版本中使用'-L‘选项的QEMU错误,那么如果您使用标准的afl- QEMU,并将您指向的'-L’目录更改为更简单,以便旧的QEMU可以使用它,可能会更容易。特别是,不要指向整个chroot,而是只指向具有来宾共享库的目录结构,并且目录之间没有任何符号链接。(特别是符号链接结构导致旧的QEMU挂起。)
https://stackoverflow.com/questions/66095549
复制相似问题