【问题标题】:Patching a closed source network application to read from file修补闭源网络应用程序以从文件中读取
【发布时间】:2021-08-24 08:22:09
【问题描述】:

所以让我解释一下,我想模糊一个名为Y 的闭源应用程序,它实现了一个自定义协议,让我们将协议命名为XY 是用 C 语言编写的。
有没有办法修补 send/read 系列函数以从文件而不是套接字读取?
这可能适用于 AFL/AFL++ 模糊器吗?
请记住,该应用程序是为类 UNIX 生态系统开发的。

【问题讨论】:

  • 我改写了至少避免征求意见(这会使这个偏离主题)。但是,我担心由于其他原因这仍然是题外话。请参阅help center
  • 将您的网络配置为应用程序认为它正在与真正的遥控器对话可能会更容易,但它正在与您自己的一些虚拟应用程序对话。
  • @AKX 感谢您的回复!你有任何实际的例子吗??例如一篇博文会很有帮助

标签: c sockets fuzzing custom-protocol


【解决方案1】:

是的,您可以通过在命名管道 (fifos) 和通过 netcat 的 TCP 连接之间建立桥接轻松地做到这一点。

创建两个文件(命名管道):

mkfifo /tmp/program_input /tmp/program_output

现在,在这些文件和应用程序之间架起一座桥梁。

如果应用程序是 TCP/IP 客户端,您的网桥将是 TCP/IP 服务器:

tail -f /tmp/program_input | nc -kl 127.0.0.1 50000 | tee /tmp/program_output > /dev/null

然后,您必须将应用程序的对等 IP 地址配置为运行网桥的主机的 IP。端口也必须匹配并且是任意的。 (上例中为“50000”。)

如果您无法更改应用程序使用的 IP 地址/TCP 端口,则必须将路由器上的这些地址映射到网桥应用程序的 IP/端口(请参阅“端口转发”)。

如果应用程序是 TCP/IP 服务器,则创建一个 TCP/IP 客户端作为桥接器:

tail -f /tmp/program_input | nc <application_ip_address> <application_port> | tee /tmp/program_output > /dev/null

如果您想为正在分析的网络应用程序写一些东西,请写信至/tmp/program_input。阅读/tmp/program_output 以查看其输出。

我对 AFL/AFL++ 不太熟悉,但您当然可以直接与应用程序通信,也可以为 fuzzer 建立套接字/文件桥。

【讨论】:

  • 刚刚测试过它,它就像魅力一样。谢谢!!!我当然要编辑 AFL/AFL++ 我当然要为文件编写一个桥梁,编辑 AFL 的代码,但最终它完成了它的工作。再次感谢!!
猜你喜欢
  • 1970-01-01
  • 2017-03-05
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多