Projects STRLCPY RTSPbrute Commits bb07d760
🤬
  • ■ ■ ■ ■ ■ ■
    tests/test_attack.py
     1 +from collections import namedtuple
     2 + 
     3 +import pytest
     4 + 
     5 +from rtspbrute.modules import attack, rtsp
     6 +from tests.test_packet import basic_auth_str
     7 + 
     8 + 
     9 +class MockSocket:
     10 + OK = b"RTSP/1.0 200 OK"
     11 + BAD = b"RTSP/1.0 400 Bad Request"
     12 + 
     13 + def __init__(self, valid_route: str, valid_auth: str = "") -> None:
     14 + self.valid_route: str = valid_route
     15 + self.valid_auth: str = valid_auth
     16 + self.packet: bytes = b""
     17 + 
     18 + def sendall(self, data: bytes):
     19 + self.packet = data
     20 + 
     21 + def recv(self, bufsize: int):
     22 + if (
     23 + self.valid_route.encode() in self.packet
     24 + and self.valid_auth.encode() in self.packet
     25 + ):
     26 + return self.OK
     27 + else:
     28 + return self.BAD
     29 + 
     30 + 
     31 +def factory_create_connection(valid_port, valid_route, valid_auth=""):
     32 + def _create_connection(address, timeout):
     33 + if address[1] == valid_port:
     34 + return MockSocket(valid_route, valid_auth)
     35 + else:
     36 + raise TimeoutError()
     37 + 
     38 + return _create_connection
     39 + 
     40 + 
     41 +def test_attack_route(monkeypatch):
     42 + valid_port = 8554
     43 + valid_route = "/valid/route"
     44 + attack.PORTS = [554, valid_port]
     45 + attack.ROUTES = ["/1", "/11", valid_route]
     46 + 
     47 + target = rtsp.RTSPClient("0.0.0.0")
     48 + _create_connection = factory_create_connection(valid_port, valid_route)
     49 + monkeypatch.setattr(rtsp.socket, "create_connection", _create_connection)
     50 + 
     51 + successful = attack.attack_route(target)
     52 + assert successful
     53 + assert target.data == MockSocket.OK.decode()
     54 + assert target.port == 8554
     55 + assert target.route == "/valid/route"
     56 + 
     57 + 
     58 +def test_attack_credentials(monkeypatch):
     59 + valid_credentials = "admin:admin"
     60 + valid_auth = basic_auth_str
     61 + attack.CREDENTIALS = ["user:user", "admin:12345", valid_credentials]
     62 + 
     63 + target = rtsp.RTSPClient("0.0.0.0")
     64 + _create_connection = factory_create_connection(
     65 + target.port, target.route, valid_auth
     66 + )
     67 + monkeypatch.setattr(rtsp.socket, "create_connection", _create_connection)
     68 + 
     69 + successful = attack.attack_credentials(target)
     70 + assert successful
     71 + assert target.credentials == valid_credentials
     72 + 
     73 + 
     74 +def test_is_video_stream():
     75 + CodecContext = namedtuple("CodecContext", ["format"])
     76 + Stream = namedtuple("Stream", ["profile", "start_time", "codec_context"])
     77 + 
     78 + valid_stream = Stream("1", 12301230, CodecContext("YUV"))
     79 + assert attack._is_video_stream(valid_stream)
     80 + 
     81 + bad_stream = Stream("1", 12301230, CodecContext(None))
     82 + assert not attack._is_video_stream(bad_stream)
     83 + 
Please wait...
Page is in error, reload to recover