我正在尝试使用Sulley Fuzzing Framework模糊BACNet设备。
为了了解框架,我写了这个相当简单的例子,但它不起作用。
from sulley import *
s_initialize("Test")
s_static(0x10, "Something")
s_byte(0x00, "SomeByte")
sess = sessions.session(proto="UDP")
sess.connect(sulley.s_get("Test"))
target = sessions.target("192.168.1.3", 0xBAC0)
target.netmon = None
target.procmon = None
target.vmcontrol = None
sess.add_target(target)
sess.fuzz()
但执行它会产生以下输出
pydev debugger: starting (pid: 3356)
[2015-11-09 09:40:54,351] [INFO] -> current fuzz path: -> Test
[2015-11-09 09:40:54,352] [INFO] -> fuzzed 0 of 112 total cases
[2015-11-09 09:40:54,354] [INFO] -> fuzzing 1 of 112
[2015-11-09 09:40:54,354] [INFO] -> xmitting: [1.1]
[2015-11-09 09:40:54,355] [CRITICAL] -> failed transmitting fuzz node
Exception caught: TypeError("cannot concatenate 'str' and 'int' objects",)
Restarting target and trying again
[2015-11-09 09:40:54,355] [ERROR] -> no vmcontrol or procmon channel available ... sleeping for 300 seconds
我认为问题可能是,我将netmon, procmon, vmcontrol
设置为None
,但只是省略它们会产生相同的输出。我不是在创建那些显示器,因为我无法将它们用于我想要稍后模糊的设备。我只想发送数据包,看看会发生什么。那么,没有那些显示器就不可能使用Sulley,或者我的代码还有其他问题吗?
答案 0 :(得分:1)
好的,事实证明没有显示器就可以模糊。 Sulley似乎不喜欢s_static()
函数中的整数值。这也是导致错误的原因。它需要是一个字符串。与s_static("00", "static")
答案 1 :(得分:1)
您已经不能将显示器用于以后要模糊的设备。但是网络监视器应该能够运行,因为它在运行模糊测试脚本的攻击者计算机上运行。
对于过程监视器,我建议您使用位于... / sully / sully / instrumentation.py中的外部监视器/仪器。您可以找到以下文档:... / sully / docs / index.html
"某些目标(例如嵌入式设备)不支持调试器,并且在这些情况下不能使用进程监视代理程序。外部检测类允许调用外部命令来检测故障并重新启动目标。在以下示例中使用SSH,但可以使用任何python函数或外部脚本:"
import os
def ssh_is_alive():
'''Check that the target is alive. Called after each test case. Return True if alive, False otherwise'''
_, stdout = os.popen2('ssh %s pidof target' % IP_DST)
pid = stdout.read()
return pid != ''
def ssh_restart():
'''Restart the target. Called when instrumentation (post) fail.'''
os.popen2('ssh %s /etc/init.d/target restart' % IP_DST)
sess = sessions.session()
target = sessions.target(IP_DST, PORT_DST)
target.procmon = instrumentation.external(post=ssh_is_alive, start=ssh_restart)
sess.add_target(target)
sess.connect(s_get('node'))
sess.fuzz()