Использование проверки работоспособности сетевого монитора не будет работать.
Я пытаюсь создать фаззер (протокол). Для этого мне нужно следить за тем, чтобы цель не разбилась (отдельное устройство). Для начала я запрограммировал простой сервер (работающий на другой машине), который будет возвращать OK или NOK или закрывать соединение. Это прекрасно работает.
Теперь я уже создал что-то, что будет фаззить простой сервер, читать ответ сервера (ОК и НЕТ), я хочу отслеживать, не закрыто ли соединение, пытаясь подключиться к нему.
Согласно документации BooFuzz (я использую BooFuzz 0.4.2), это нужно сделать с помощью NetworkMonitor и его функции live(). Я использовал пример автопрога в качестве основы и изменил вызов монитора, но он продолжает упоминать IOT_TargetMonitor.В init() отсутствует 1 обязательный позиционный аргумент. Я попытался добавить запрошенные аргументы (в данном случае хост и порт), но безуспешно. Я что-то упускаю?
Код, который я использую в данный момент:
Основная процедура:
def main():
# Define the IOT_TargetMonitor
IOT_TargetMonitor(host = g_target_ip_addr, port = g_target_port)
# Create the session
session = Session(
target = Target(
connection = TCPSocketConnection(host = g_target_ip_addr, port = g_target_port),
monitors = [IOT_TargetMonitor],
monitor_alive = [IOT_TargetMonitor],
),
)
# A simple message that easily finds the bug in the simple server
message1 = Request(
"message1",
children=(
Simple(name="first_byte", default_value=b"\x01", fuzz_values=[b"6", b"B", b"C"]),
Simple(name="second_byte", default_value=b"\x02", fuzz_values=[b"1", b"6", b"3"]),
Simple(name="third_byte", default_value=b"\x03", fuzz_values=[b"@", b"#", b"6"]),
),
)
session.connect(message1)
# sleep time between tests
session.sleep_time = 0.01
# after fuzzing, data is to be received. The response of my simple server
session._receive_data_after_fuzz = True
# use only one target connection instead of reconnecting each test case
session._reuse_target_connection = True
# start fuzzing
session.fuzz()
Основная процедура вызывает IOT_TargetMonitor:
class IOT_TargetMonitor(NetworkMonitor):
global g_target_ip_addr
global g_target_port
def __init__(self, host, port):
self.host = host
self.port = port
def alive():
print("Checking if IOT device is alive.....")
mylogger.log_info("Checking if IOT device is alive")
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((g_target_ip_addr, g_target_port))
mylogger.log_pass(description="alive")
return True
except ConnectionRefusedError:
mylogger.log_fail(description="Server down")
return False
Все остальные функции также переопределяются, но содержат только команды печати.
Сообщения (ошибки) из командной строки:
[2023-10-15 13:39:01,970] Info: Web interface can be found at http://localhost:26000
Checking if IOT device is alive.....
[2023-10-15 13:39:01,971] Info: Checking if IOT device is alive
[2023-10-15 13:39:01,973] Check OK: alive
Traceback (most recent call last):
File "y:\Python\TestFuzzer\test_boo.py", line 192, in <module>
main()
File "y:\Python\TestFuzzer\test_boo.py", line 145, in main
session = Session(
^^^^^^^^
File "C:\Users\Licensed User\AppData\Local\Programs\Python\Python311\Lib\site-packages\boofuzz\sessions\session.py", line 265, in __init__
self.add_target(target)
File "C:\Users\Licensed User\AppData\Local\Programs\Python\Python311\Lib\site-packages\boofuzz\sessions\session.py", line 303, in add_target
target.monitors_alive()
File "C:\Users\Licensed User\AppData\Local\Programs\Python\Python311\Lib\site-packages\boofuzz\sessions\target.py", line 135, in monitors_alive
cb(monitor)
TypeError: IOT_TargetMonitor.__init__() missing 1 required positional argument: 'port'