修补封闭源网络应用程序以从文件中读取
Patching a closed source network application to read from file
所以让我解释一下,我想对一个名为 Y
的闭源应用程序进行模糊测试,该应用程序实现了一个自定义协议,让我们将该协议命名为 X
。 Y
是用 C 写的。
有没有办法修补 send/read
系列函数以从文件而不是套接字读取?
这可能适用于 AFL/AFL++ 模糊器吗?
请记住,该应用程序是为类 UNIX 生态系统开发的。
是的,您可以通过 netcat 在命名管道 (fifos) 和 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 address/TCP 端口,您必须将路由器上的这些映射到网桥应用程序的 IP/port(请参阅“端口转发” ").
如果应用程序是 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++ 不太熟悉,但是您当然可以直接与应用程序通信,或者也可以为模糊器建立 socket/file 桥梁。
所以让我解释一下,我想对一个名为 Y
的闭源应用程序进行模糊测试,该应用程序实现了一个自定义协议,让我们将该协议命名为 X
。 Y
是用 C 写的。
有没有办法修补 send/read
系列函数以从文件而不是套接字读取?
这可能适用于 AFL/AFL++ 模糊器吗?
请记住,该应用程序是为类 UNIX 生态系统开发的。
是的,您可以通过 netcat 在命名管道 (fifos) 和 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 address/TCP 端口,您必须将路由器上的这些映射到网桥应用程序的 IP/port(请参阅“端口转发” ").
如果应用程序是 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++ 不太熟悉,但是您当然可以直接与应用程序通信,或者也可以为模糊器建立 socket/file 桥梁。