Использование Sulley Fuzzing Framework без мониторинга
Я пытаюсь распознать устройство BACNet, используя Sulley Fuzzing Framework.
Чтобы познакомиться с фреймворком, я написал этот довольно простой пример, но он не сработает.
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 ответа
Ладно, получается, что пушить можно без мониторов. Салли просто не любит целочисленные значения в s_static()
функция. Это также то, что вызвало ошибку. Это должна быть строка. подобно s_static("00", "static")
Если вы не можете использовать мониторы для устройства, которое вы хотите сохранить позже. Но сетевой монитор должен быть в состоянии работать, так как он запускается на компьютере злоумышленника, на котором вы запускаете фаззинговые сценарии.
Что касается монитора процесса, я рекомендую вам использовать внешний монитор / контрольно-измерительные приборы, которые находятся в... / 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()