Skip to content

Commit

Permalink
Merge branch 'main' into timeroast_module
Browse files Browse the repository at this point in the history
  • Loading branch information
NeffIsBack authored Nov 30, 2024
2 parents 7b7f4b2 + 45db7e6 commit d7d7505
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 34 deletions.
20 changes: 2 additions & 18 deletions nxc/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from logging.handlers import RotatingFileHandler
import os.path
import sys
import re
from nxc.console import nxc_console
from nxc.paths import NXC_PATH
from termcolor import colored
Expand Down Expand Up @@ -43,7 +42,7 @@ def create_temp_logger(caller_frame, formatted_text, args, kwargs):
temp_logger = logging.getLogger("temp")
formatter = logging.Formatter("%(message)s", datefmt="[%X]")
handler = SmartDebugRichHandler(formatter=formatter)
handler.handle(LogRecord(temp_logger.name, logging.INFO, caller_frame.f_code.co_filename, caller_frame.f_lineno, formatted_text, args, kwargs, caller_frame=caller_frame))
handler.handle(LogRecord(temp_logger.name, logging.INFO, caller_frame.f_code.co_filename, caller_frame.f_lineno, formatted_text, args, None, caller_frame=caller_frame))


class SmartDebugRichHandler(RichHandler):
Expand All @@ -56,9 +55,6 @@ def __init__(self, formatter=None, *args, **kwargs):

def emit(self, record):
"""Overrides the emit method of the RichHandler class so we can set the proper pathname and lineno"""
# for some reason in RDP, the exc_text is None which leads to a KeyError in Python logging
record.exc_text = record.getMessage() if record.exc_text is None else record.exc_text

if hasattr(record, "caller_frame"):
frame_info = inspect.getframeinfo(record.caller_frame)
record.pathname = frame_info.filename
Expand Down Expand Up @@ -177,7 +173,7 @@ def log_console_to_file(self, text, *args, **kwargs):
self.logger.fail(f"Issue while trying to custom print handler: {e}")

def add_file_log(self, log_file=None):
file_formatter = TermEscapeCodeFormatter("%(asctime)s | %(filename)s:%(lineno)s - %(levelname)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
file_formatter = logging.Formatter("%(asctime)s | %(filename)s:%(lineno)s - %(levelname)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
output_file = self.init_log_file() if log_file is None else log_file
file_creation = False

Expand Down Expand Up @@ -209,17 +205,5 @@ def init_log_file():
)


class TermEscapeCodeFormatter(logging.Formatter):
"""A class to strip the escape codes for logging to files"""

def __init__(self, fmt=None, datefmt=None, style="%", validate=True):
super().__init__(fmt, datefmt, style, validate)

def format(self, record): # noqa: A003
escape_re = re.compile(r"\x1b\[[0-9;]*m")
record.msg = re.sub(escape_re, "", str(record.msg))
return super().format(record)


# initialize the logger for all of nxc - this is imported everywhere
nxc_logger = NXCAdapter()
31 changes: 15 additions & 16 deletions nxc/protocols/smb.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ def __init__(self, args, db, host):
self.bootkey = None
self.output_filename = None
self.smbv1 = None
self.is_timeouted = False
self.signing = False
self.smb_share_name = smb_share_name
self.pvkbytes = None
Expand Down Expand Up @@ -551,8 +552,16 @@ def create_smbv1_conn(self):
)
self.smbv1 = True
except OSError as e:
if str(e).find("Connection reset by peer") != -1:
if "Connection reset by peer" in str(e):
self.logger.info(f"SMBv1 might be disabled on {self.host}")
elif "timed out" in str(e):
self.is_timeouted = True
self.logger.debug(f"Timeout creating SMBv1 connection to {self.host}")
else:
self.logger.info(f"Error creating SMBv1 connection to {self.host}: {e}")
return False
except NetBIOSError:
self.logger.info(f"SMBv1 disabled on {self.host}")
return False
except (Exception, NetBIOSTimeout) as e:
self.logger.info(f"Error creating SMBv1 connection to {self.host}: {e}")
Expand All @@ -570,15 +579,7 @@ def create_smbv3_conn(self):
timeout=self.args.smb_timeout,
)
self.smbv1 = False
except OSError as e:
# This should not happen anymore!!!
if str(e).find("Too many open files") != -1:
if not self.logger:
print("DEBUG ERROR: logger not set, please open an issue on github: " + str(self) + str(self.logger))
self.proto_logger()
self.logger.fail(f"SMBv3 connection error on {self.host}: {e}")
return False
except (Exception, NetBIOSTimeout) as e:
except (Exception, NetBIOSTimeout, OSError) as e:
self.logger.info(f"Error creating SMBv3 connection to {self.host}: {e}")
return False
return True
Expand All @@ -596,7 +597,7 @@ def create_conn_obj(self, no_smbv1=False):
self.smbv1 = self.create_smbv1_conn()
if self.smbv1:
return True
else:
elif not self.is_timeouted:
return self.create_smbv3_conn()
elif not no_smbv1 and self.smbv1:
return self.create_smbv1_conn()
Expand Down Expand Up @@ -845,7 +846,7 @@ def shares(self):
self.logger.debug(f"domain: {self.domain}")
user_id = self.db.get_user(self.domain.upper(), self.username)[0][0]
except IndexError as e:
if self.kerberos:
if self.kerberos or self.username == "":
pass
else:
self.logger.fail(f"IndexError: {e!s}")
Expand Down Expand Up @@ -947,10 +948,9 @@ def shares(self):
self.logger.highlight(f"{name:<15} {','.join(perms):<15} {remark}")
return permissions


def dir(self): # noqa: A003
search_path = ntpath.join(self.args.dir, "*")
try:
try:
contents = self.conn.listPath(self.args.share, search_path)
except SessionError as e:
error = get_error_string(e)
Expand All @@ -959,7 +959,7 @@ def dir(self): # noqa: A003
color="magenta" if error in smb_error_status else "red",
)
return

if not contents:
return

Expand All @@ -969,7 +969,6 @@ def dir(self): # noqa: A003
full_path = ntpath.join(self.args.dir, content.get_longname())
self.logger.highlight(f"{'d' if content.is_directory() else 'f'}{'rw-' if content.is_readonly() > 0 else 'r--':<8}{content.get_filesize():<15}{ctime(float(content.get_mtime_epoch())):<30}{full_path:<45}")


@requires_admin
def interfaces(self):
"""
Expand Down

0 comments on commit d7d7505

Please sign in to comment.