coercer.network.Listener

 1#!/usr/bin/env python3
 2# -*- coding: utf-8 -*-
 3# File name          : Listener.py
 4# Author             : Podalirius (@podalirius_)
 5# Date created       : 15 Sep 2022
 6
 7import socket
 8import time
 9from coercer.structures.TestResult import TestResult
10
11
12class Listener(object):
13    """
14    class Listener
15    """
16
17    def __init__(self, options, listen_ip=None, timeout=None):
18        super(Listener, self).__init__()
19
20        self.options = options
21
22        if self.options.mode in ["fuzz", "scan"]:
23            self.smb_port = self.options.smb_port
24        elif self.options.mode in ["coerce"]:
25            self.smb_port = self.options.smb_port
26
27        self.timeout = 1
28        self.listen_ip = "0.0.0.0"
29
30        if listen_ip is not None:
31            self.listen_ip = listen_ip
32
33        if timeout is not None:
34            self.timeout = timeout
35
36    def start_smb(self, control_structure):
37        """
38        Function start_smb(self, control_structure)
39        """
40        start_time = int(time.time())
41        stop_time = start_time + self.timeout
42        while (int(time.time()) < stop_time) and control_structure["result"] == TestResult.NO_AUTH_RECEIVED:
43            try:
44                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
45                s.settimeout(1)
46                s.bind((self.listen_ip, self.smb_port))
47                s.listen(5)
48                conn, address = s.accept()
49                data = conn.recv(2048)
50                # Win11 2208:  b'\x00\x00\x00E\xffSMBr\x00\x00\x00\x00\x18S\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x00\x00\x00\x00"\x00\x02NT LM 0.12\x00\x02SMB 2.002\x00\x02SMB 2.???\x00'
51                # WinServ2016: b'\x00\x00\x00\x9b\xffSMBr\x00'
52                # b'\x00\x00\x00\xfc\xfeSMB@\x00\x01\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x05\x00\x02\x00\x00\x00\x7f\x00\x00\x00\x12\xe3\x9f\x90\xfa7\xed\x11\x98.\xe8\xd8\xd1\xf3/\xf9p\x00\x00\x00\x05\x00\x00\x00\x02\x02\x10\x02\x00\x03\x02\x03\x11\x03\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00\xec-\xd9\x94\xf2{D\x91\xd54\xb48KW\xbe\x81uM&\xbd.q\xff\xc3\xcb\x90\x87\x11\x1c\xbd9\xd8\x00\x00\x02\x00\x06\x00\x00\x00\x00\x00\x02\x00\x02\x00\x01\x00\x00\x00\x03\x00\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x02\x00\x03\x00\x01\x00\x05\x00\x1a\x00\x00\x00\x00\x00F\x00R\x00T\x00L\x00S\x00E\x00Q\x00P\x00R\x00N\x00P\x000\x001\x00\x00\x00\x00\x00\x00\x00\x06
53                if data.startswith(b'\x00\x00\x00') and b'SMB' in data:
54                    # TODO: Handle SMB handshake better than this.
55                    control_structure["result"] = TestResult.SMB_AUTH_RECEIVED
56                else:
57                    print("\n", data)
58            except Exception as e:
59                pass
60
61    def start_http(self, control_structure, http_port=80):
62        """
63        Function start_http(self, control_structure, http_port=80)
64        """
65        start_time = int(time.time())
66        stop_time = start_time + self.timeout
67        while (int(time.time()) < stop_time) and control_structure["result"] == TestResult.NO_AUTH_RECEIVED:
68            try:
69                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
70                s.settimeout(1)
71                if self.options.mode in ["fuzz", "scan"]:
72                    s.bind((self.listen_ip, http_port))
73                elif self.options.mode in ["coerce"]:
74                    s.bind((self.listen_ip, self.options.http_port))
75                s.listen(5)
76                conn, address = s.accept()
77                data = conn.recv(2048)
78                # print("\n",data,"\n")
79                if b'HTTP' in data:
80                    control_structure["result"] = TestResult.HTTP_AUTH_RECEIVED
81            except Exception as e:
82                pass
class Listener:
13class Listener(object):
14    """
15    class Listener
16    """
17
18    def __init__(self, options, listen_ip=None, timeout=None):
19        super(Listener, self).__init__()
20
21        self.options = options
22
23        if self.options.mode in ["fuzz", "scan"]:
24            self.smb_port = self.options.smb_port
25        elif self.options.mode in ["coerce"]:
26            self.smb_port = self.options.smb_port
27
28        self.timeout = 1
29        self.listen_ip = "0.0.0.0"
30
31        if listen_ip is not None:
32            self.listen_ip = listen_ip
33
34        if timeout is not None:
35            self.timeout = timeout
36
37    def start_smb(self, control_structure):
38        """
39        Function start_smb(self, control_structure)
40        """
41        start_time = int(time.time())
42        stop_time = start_time + self.timeout
43        while (int(time.time()) < stop_time) and control_structure["result"] == TestResult.NO_AUTH_RECEIVED:
44            try:
45                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
46                s.settimeout(1)
47                s.bind((self.listen_ip, self.smb_port))
48                s.listen(5)
49                conn, address = s.accept()
50                data = conn.recv(2048)
51                # Win11 2208:  b'\x00\x00\x00E\xffSMBr\x00\x00\x00\x00\x18S\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x00\x00\x00\x00"\x00\x02NT LM 0.12\x00\x02SMB 2.002\x00\x02SMB 2.???\x00'
52                # WinServ2016: b'\x00\x00\x00\x9b\xffSMBr\x00'
53                # b'\x00\x00\x00\xfc\xfeSMB@\x00\x01\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x05\x00\x02\x00\x00\x00\x7f\x00\x00\x00\x12\xe3\x9f\x90\xfa7\xed\x11\x98.\xe8\xd8\xd1\xf3/\xf9p\x00\x00\x00\x05\x00\x00\x00\x02\x02\x10\x02\x00\x03\x02\x03\x11\x03\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00\xec-\xd9\x94\xf2{D\x91\xd54\xb48KW\xbe\x81uM&\xbd.q\xff\xc3\xcb\x90\x87\x11\x1c\xbd9\xd8\x00\x00\x02\x00\x06\x00\x00\x00\x00\x00\x02\x00\x02\x00\x01\x00\x00\x00\x03\x00\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x02\x00\x03\x00\x01\x00\x05\x00\x1a\x00\x00\x00\x00\x00F\x00R\x00T\x00L\x00S\x00E\x00Q\x00P\x00R\x00N\x00P\x000\x001\x00\x00\x00\x00\x00\x00\x00\x06
54                if data.startswith(b'\x00\x00\x00') and b'SMB' in data:
55                    # TODO: Handle SMB handshake better than this.
56                    control_structure["result"] = TestResult.SMB_AUTH_RECEIVED
57                else:
58                    print("\n", data)
59            except Exception as e:
60                pass
61
62    def start_http(self, control_structure, http_port=80):
63        """
64        Function start_http(self, control_structure, http_port=80)
65        """
66        start_time = int(time.time())
67        stop_time = start_time + self.timeout
68        while (int(time.time()) < stop_time) and control_structure["result"] == TestResult.NO_AUTH_RECEIVED:
69            try:
70                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
71                s.settimeout(1)
72                if self.options.mode in ["fuzz", "scan"]:
73                    s.bind((self.listen_ip, http_port))
74                elif self.options.mode in ["coerce"]:
75                    s.bind((self.listen_ip, self.options.http_port))
76                s.listen(5)
77                conn, address = s.accept()
78                data = conn.recv(2048)
79                # print("\n",data,"\n")
80                if b'HTTP' in data:
81                    control_structure["result"] = TestResult.HTTP_AUTH_RECEIVED
82            except Exception as e:
83                pass

class Listener

Listener(options, listen_ip=None, timeout=None)
18    def __init__(self, options, listen_ip=None, timeout=None):
19        super(Listener, self).__init__()
20
21        self.options = options
22
23        if self.options.mode in ["fuzz", "scan"]:
24            self.smb_port = self.options.smb_port
25        elif self.options.mode in ["coerce"]:
26            self.smb_port = self.options.smb_port
27
28        self.timeout = 1
29        self.listen_ip = "0.0.0.0"
30
31        if listen_ip is not None:
32            self.listen_ip = listen_ip
33
34        if timeout is not None:
35            self.timeout = timeout
options
timeout
listen_ip
def start_smb(self, control_structure):
37    def start_smb(self, control_structure):
38        """
39        Function start_smb(self, control_structure)
40        """
41        start_time = int(time.time())
42        stop_time = start_time + self.timeout
43        while (int(time.time()) < stop_time) and control_structure["result"] == TestResult.NO_AUTH_RECEIVED:
44            try:
45                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
46                s.settimeout(1)
47                s.bind((self.listen_ip, self.smb_port))
48                s.listen(5)
49                conn, address = s.accept()
50                data = conn.recv(2048)
51                # Win11 2208:  b'\x00\x00\x00E\xffSMBr\x00\x00\x00\x00\x18S\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x00\x00\x00\x00"\x00\x02NT LM 0.12\x00\x02SMB 2.002\x00\x02SMB 2.???\x00'
52                # WinServ2016: b'\x00\x00\x00\x9b\xffSMBr\x00'
53                # b'\x00\x00\x00\xfc\xfeSMB@\x00\x01\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x05\x00\x02\x00\x00\x00\x7f\x00\x00\x00\x12\xe3\x9f\x90\xfa7\xed\x11\x98.\xe8\xd8\xd1\xf3/\xf9p\x00\x00\x00\x05\x00\x00\x00\x02\x02\x10\x02\x00\x03\x02\x03\x11\x03\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00\xec-\xd9\x94\xf2{D\x91\xd54\xb48KW\xbe\x81uM&\xbd.q\xff\xc3\xcb\x90\x87\x11\x1c\xbd9\xd8\x00\x00\x02\x00\x06\x00\x00\x00\x00\x00\x02\x00\x02\x00\x01\x00\x00\x00\x03\x00\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x02\x00\x03\x00\x01\x00\x05\x00\x1a\x00\x00\x00\x00\x00F\x00R\x00T\x00L\x00S\x00E\x00Q\x00P\x00R\x00N\x00P\x000\x001\x00\x00\x00\x00\x00\x00\x00\x06
54                if data.startswith(b'\x00\x00\x00') and b'SMB' in data:
55                    # TODO: Handle SMB handshake better than this.
56                    control_structure["result"] = TestResult.SMB_AUTH_RECEIVED
57                else:
58                    print("\n", data)
59            except Exception as e:
60                pass

Function start_smb(self, control_structure)

def start_http(self, control_structure, http_port=80):
62    def start_http(self, control_structure, http_port=80):
63        """
64        Function start_http(self, control_structure, http_port=80)
65        """
66        start_time = int(time.time())
67        stop_time = start_time + self.timeout
68        while (int(time.time()) < stop_time) and control_structure["result"] == TestResult.NO_AUTH_RECEIVED:
69            try:
70                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
71                s.settimeout(1)
72                if self.options.mode in ["fuzz", "scan"]:
73                    s.bind((self.listen_ip, http_port))
74                elif self.options.mode in ["coerce"]:
75                    s.bind((self.listen_ip, self.options.http_port))
76                s.listen(5)
77                conn, address = s.accept()
78                data = conn.recv(2048)
79                # print("\n",data,"\n")
80                if b'HTTP' in data:
81                    control_structure["result"] = TestResult.HTTP_AUTH_RECEIVED
82            except Exception as e:
83                pass

Function start_http(self, control_structure, http_port=80)