【发布时间】:2023-03-24 19:31:01
【问题描述】:
我正在尝试使用 AFL (Qemu-mode) 一个不断等待数据的二进制应用程序进行模糊测试,因为我没有源代码来修改二进制文件以便exit(0) 在解析数据后,我在 AFL (timeout) 中遇到问题,所以我决定在二进制文件周围编写一个包装器,以便我考虑到这一点,可以让它在经过一段时间后退出。
- AFL fuzzer:它可以通过测试输入
STDIN或argument file - 我正在模糊测试的二进制应用程序希望输入在
STDIN中,然后继续等待输入
我的策略基于父/子样式(分叉),这样子将成为二进制应用程序,而父将监视它。
- 如果满足以下条件,则父级使子级(二进制应用程序)以 0 状态退出 5 秒内没有任何反应(子进程中没有发生崩溃)。
还有父母负责将输入发送给从
stdin接收的孩子如果孩子崩溃,我希望父母也崩溃,这样
AFL会注意到并保存负责 崩溃
我的问题是:
- 如何让父级的子级退出状态为0?
- 如何将数据发送到子进程从父进程
在孩子运行二进制应用程序后使用
exec()? - 根据出口判断孩子是否崩溃是个好主意吗 孩子的状况?
【问题讨论】:
-
"如何让子进程退出父进程的状态为 0"。只有当孩子在某些条件下被编码为退出 0 并且您可以触发其中一个条件时,您才能执行此操作。
-
“如何将数据从父进程发送到子进程”。这个是可行的。并且在 Stackoverflow 和一般网络上的许多帖子中都有介绍。例如:stackoverflow.com/questions/9405985/…
-
@kaylum 我不是二进制应用程序的原始编码器,所以我不知道什么条件触发了 exit(0) 并且二进制文件是静态链接的,没有符号,所以即使反转也很难使用基于签名的工具,如 IDA PRO(什么都不识别)
-
那么你不能做你想做的事。这就是我的观点。
-
但我真的不认为你需要这样做。如果孩子没有崩溃,只需让父母杀死孩子并以 0 退出。如果它已经崩溃,则以孩子的非零退出状态退出,可以通过
wait获得。
标签: c linux operating-system libc fuzzing