Использование 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()
Другие вопросы по тегам