使用Sulley Fuzzing Framework而无需监控

时间:2015-11-09 09:49:10

标签: python penetration-testing fuzzing bacnet fuzz-testing

我正在尝试使用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,或者我的代码还有其他问题吗?

2 个答案:

答案 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()