forked from p34709852/monkey
UT: Add unit test for missing server header in valid http response
This commit is contained in:
parent
08aac019d8
commit
4408601332
|
@ -5,7 +5,7 @@ import pytest
|
||||||
from infection_monkey.i_puppet import PortScanData, PortStatus
|
from infection_monkey.i_puppet import PortScanData, PortStatus
|
||||||
from infection_monkey.network_scanning.http_fingerprinter import HTTPFingerprinter
|
from infection_monkey.network_scanning.http_fingerprinter import HTTPFingerprinter
|
||||||
|
|
||||||
OPTIONS = {"http_ports": [80, 443, 8080, 9200]}
|
OPTIONS = {"http_ports": [80, 443, 1080, 8080, 9200]}
|
||||||
|
|
||||||
PYTHON_SERVER_HEADER = {"Server": "SimpleHTTP/0.6 Python/3.6.9"}
|
PYTHON_SERVER_HEADER = {"Server": "SimpleHTTP/0.6 Python/3.6.9"}
|
||||||
APACHE_SERVER_HEADER = {"Server": "Apache/Server/Header"}
|
APACHE_SERVER_HEADER = {"Server": "Apache/Server/Header"}
|
||||||
|
@ -26,7 +26,7 @@ def mock_get_http_headers():
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
def patch_get_http_headers(monkeypatch, mock_get_http_headers):
|
def patch_get_http_headers(monkeypatch, mock_get_http_headers):
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
"infection_monkey.network_scanning.http_fingerprinter._get_server_from_headers",
|
"infection_monkey.network_scanning.http_fingerprinter._get_http_headers",
|
||||||
mock_get_http_headers,
|
mock_get_http_headers,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ def http_fingerprinter():
|
||||||
return HTTPFingerprinter()
|
return HTTPFingerprinter()
|
||||||
|
|
||||||
|
|
||||||
def test_no_http_ports_open(mock_get_server_from_headers, http_fingerprinter):
|
def test_no_http_ports_open(mock_get_http_headers, http_fingerprinter):
|
||||||
port_scan_data = {
|
port_scan_data = {
|
||||||
80: PortScanData(80, PortStatus.CLOSED, "", "tcp-80"),
|
80: PortScanData(80, PortStatus.CLOSED, "", "tcp-80"),
|
||||||
123: PortScanData(123, PortStatus.OPEN, "", "tcp-123"),
|
123: PortScanData(123, PortStatus.OPEN, "", "tcp-123"),
|
||||||
|
@ -45,10 +45,10 @@ def test_no_http_ports_open(mock_get_server_from_headers, http_fingerprinter):
|
||||||
}
|
}
|
||||||
http_fingerprinter.get_host_fingerprint("127.0.0.1", None, port_scan_data, OPTIONS)
|
http_fingerprinter.get_host_fingerprint("127.0.0.1", None, port_scan_data, OPTIONS)
|
||||||
|
|
||||||
assert not mock_get_server_from_headers.called
|
assert not mock_get_http_headers.called
|
||||||
|
|
||||||
|
|
||||||
def test_fingerprint_only_port_443(mock_get_server_from_headers, http_fingerprinter):
|
def test_fingerprint_only_port_443(mock_get_http_headers, http_fingerprinter):
|
||||||
port_scan_data = {
|
port_scan_data = {
|
||||||
80: PortScanData(80, PortStatus.CLOSED, "", "tcp-80"),
|
80: PortScanData(80, PortStatus.CLOSED, "", "tcp-80"),
|
||||||
123: PortScanData(123, PortStatus.OPEN, "", "tcp-123"),
|
123: PortScanData(123, PortStatus.OPEN, "", "tcp-123"),
|
||||||
|
@ -59,18 +59,18 @@ def test_fingerprint_only_port_443(mock_get_server_from_headers, http_fingerprin
|
||||||
"127.0.0.1", None, port_scan_data, OPTIONS
|
"127.0.0.1", None, port_scan_data, OPTIONS
|
||||||
)
|
)
|
||||||
|
|
||||||
assert mock_get_server_from_headers.call_count == 1
|
assert mock_get_http_headers.call_count == 1
|
||||||
mock_get_server_from_headers.assert_called_with("https://127.0.0.1:443")
|
mock_get_http_headers.assert_called_with("https://127.0.0.1:443")
|
||||||
|
|
||||||
assert fingerprint_data.os_type is None
|
assert fingerprint_data.os_type is None
|
||||||
assert fingerprint_data.os_version is None
|
assert fingerprint_data.os_version is None
|
||||||
assert len(fingerprint_data.services.keys()) == 1
|
assert len(fingerprint_data.services.keys()) == 1
|
||||||
|
|
||||||
assert fingerprint_data.services["tcp-443"]["data"][0] == PYTHON_SERVER_HEADER
|
assert fingerprint_data.services["tcp-443"]["data"][0] == PYTHON_SERVER_HEADER["Server"]
|
||||||
assert fingerprint_data.services["tcp-443"]["data"][1] is True
|
assert fingerprint_data.services["tcp-443"]["data"][1] is True
|
||||||
|
|
||||||
|
|
||||||
def test_open_port_no_http_server(mock_get_server_from_headers, http_fingerprinter):
|
def test_open_port_no_http_server(mock_get_http_headers, http_fingerprinter):
|
||||||
port_scan_data = {
|
port_scan_data = {
|
||||||
80: PortScanData(80, PortStatus.CLOSED, "", "tcp-80"),
|
80: PortScanData(80, PortStatus.CLOSED, "", "tcp-80"),
|
||||||
123: PortScanData(123, PortStatus.OPEN, "", "tcp-123"),
|
123: PortScanData(123, PortStatus.OPEN, "", "tcp-123"),
|
||||||
|
@ -81,16 +81,16 @@ def test_open_port_no_http_server(mock_get_server_from_headers, http_fingerprint
|
||||||
"127.0.0.1", None, port_scan_data, OPTIONS
|
"127.0.0.1", None, port_scan_data, OPTIONS
|
||||||
)
|
)
|
||||||
|
|
||||||
assert mock_get_server_from_headers.call_count == 2
|
assert mock_get_http_headers.call_count == 2
|
||||||
mock_get_server_from_headers.assert_any_call("https://127.0.0.1:9200")
|
mock_get_http_headers.assert_any_call("https://127.0.0.1:9200")
|
||||||
mock_get_server_from_headers.assert_any_call("http://127.0.0.1:9200")
|
mock_get_http_headers.assert_any_call("http://127.0.0.1:9200")
|
||||||
|
|
||||||
assert fingerprint_data.os_type is None
|
assert fingerprint_data.os_type is None
|
||||||
assert fingerprint_data.os_version is None
|
assert fingerprint_data.os_version is None
|
||||||
assert len(fingerprint_data.services.keys()) == 0
|
assert len(fingerprint_data.services.keys()) == 0
|
||||||
|
|
||||||
|
|
||||||
def test_multiple_open_ports(mock_get_server_from_headers, http_fingerprinter):
|
def test_multiple_open_ports(mock_get_http_headers, http_fingerprinter):
|
||||||
port_scan_data = {
|
port_scan_data = {
|
||||||
80: PortScanData(80, PortStatus.CLOSED, "", "tcp-80"),
|
80: PortScanData(80, PortStatus.CLOSED, "", "tcp-80"),
|
||||||
443: PortScanData(443, PortStatus.OPEN, "", "tcp-443"),
|
443: PortScanData(443, PortStatus.OPEN, "", "tcp-443"),
|
||||||
|
@ -100,16 +100,34 @@ def test_multiple_open_ports(mock_get_server_from_headers, http_fingerprinter):
|
||||||
"127.0.0.1", None, port_scan_data, OPTIONS
|
"127.0.0.1", None, port_scan_data, OPTIONS
|
||||||
)
|
)
|
||||||
|
|
||||||
assert mock_get_server_from_headers.call_count == 3
|
assert mock_get_http_headers.call_count == 3
|
||||||
mock_get_server_from_headers.assert_any_call("https://127.0.0.1:443")
|
mock_get_http_headers.assert_any_call("https://127.0.0.1:443")
|
||||||
mock_get_server_from_headers.assert_any_call("https://127.0.0.1:8080")
|
mock_get_http_headers.assert_any_call("https://127.0.0.1:8080")
|
||||||
mock_get_server_from_headers.assert_any_call("http://127.0.0.1:8080")
|
mock_get_http_headers.assert_any_call("http://127.0.0.1:8080")
|
||||||
|
|
||||||
assert fingerprint_data.os_type is None
|
assert fingerprint_data.os_type is None
|
||||||
assert fingerprint_data.os_version is None
|
assert fingerprint_data.os_version is None
|
||||||
assert len(fingerprint_data.services.keys()) == 2
|
assert len(fingerprint_data.services.keys()) == 2
|
||||||
|
|
||||||
assert fingerprint_data.services["tcp-443"]["data"][0] == PYTHON_SERVER_HEADER
|
assert fingerprint_data.services["tcp-443"]["data"][0] == PYTHON_SERVER_HEADER["Server"]
|
||||||
assert fingerprint_data.services["tcp-443"]["data"][1] is True
|
assert fingerprint_data.services["tcp-443"]["data"][1] is True
|
||||||
assert fingerprint_data.services["tcp-8080"]["data"][0] == APACHE_SERVER_HEADER
|
assert fingerprint_data.services["tcp-8080"]["data"][0] == APACHE_SERVER_HEADER["Server"]
|
||||||
assert fingerprint_data.services["tcp-8080"]["data"][1] is False
|
assert fingerprint_data.services["tcp-8080"]["data"][1] is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_server_missing_from_http_headers(mock_get_http_headers, http_fingerprinter):
|
||||||
|
port_scan_data = {
|
||||||
|
1080: PortScanData(1080, PortStatus.OPEN, "", "tcp-1080"),
|
||||||
|
}
|
||||||
|
fingerprint_data = http_fingerprinter.get_host_fingerprint(
|
||||||
|
"127.0.0.1", None, port_scan_data, OPTIONS
|
||||||
|
)
|
||||||
|
|
||||||
|
assert mock_get_http_headers.call_count == 2
|
||||||
|
|
||||||
|
assert fingerprint_data.os_type is None
|
||||||
|
assert fingerprint_data.os_version is None
|
||||||
|
assert len(fingerprint_data.services.keys()) == 1
|
||||||
|
|
||||||
|
assert fingerprint_data.services["tcp-1080"]["data"][0] == ""
|
||||||
|
assert fingerprint_data.services["tcp-1080"]["data"][1] is False
|
||||||
|
|
Loading…
Reference in New Issue