I'm trying to fuzz a BACNet device using the Sulley Fuzzing Framework.
In order to get to know the framework I wrote this fairly simple example, but it won't work.
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()
But executing it results in the following output
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
I think the problem might be, that I set netmon, procmon, vmcontrol to None, but just omitting them results in the same output. I am not creating those monitors because I can't use them for the device I want to fuzz later on anyway. I just want to send out packets and see what happens. So, is it impossible to use Sulley without those monitors or is there something else wrong with my code?
Okay, it turns out it is possible to fuzz without monitors. Sulley just doesn't seem to like integer values in the
s_static()function. That's also what caused the error. It needs to be a string. Likes_static("00", "static")