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
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)