From bb7afd4a099ac2270654c30b0f855a74246139a0 Mon Sep 17 00:00:00 2001 From: Alexander Neff Date: Sun, 27 Sep 2026 17:14:59 -0400 Subject: [PATCH 1/3] Fix lock file --- poetry.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3e369e2e..eeefd043 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.5.1 and should not be changed by hand. [[package]] name = "aardwolf" @@ -439,7 +439,7 @@ files = [ [package.dependencies] dnspython = "*" impacket = ">=0.9.17" -ldap3 = ">2.5.0,<2.5.2 || >2.5.2,<2.6 || >2.6" +ldap3 = ">2.5.0,!=2.5.2,!=2.6" pyasn1 = ">=0.4" pycryptodome = "*" @@ -1190,7 +1190,7 @@ files = [ ] [package.dependencies] -cryptography = ">=3.1,<3.4.0 || >3.4.0" +cryptography = ">=3.1,!=3.4.0" [package.extras] dev = ["black", "isort", "mypy", "types-freezegun"] @@ -1225,7 +1225,7 @@ files = [ [package.dependencies] dnspython = "*" -ldap3 = ">2.5.0,<2.5.2 || >2.5.2,<2.6 || >2.6" +ldap3 = ">2.5.0,!=2.5.2,!=2.6" [[package]] name = "lsassy" @@ -2606,7 +2606,7 @@ files = [ ] [package.dependencies] -click = ">=6.7,<7.0 || >7.0" +click = ">=6.7,!=7.0" pip = ">=9.0.3" setuptools = "*" @@ -3042,4 +3042,4 @@ test = ["pytest", "pytest-cov"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<4.0" -content-hash = "11d6b0b792b5f5e7ecb7ed5ba7406f4353f298e4ff154bca15d9a93a0a3fec48" +content-hash = "3941314ffac5bab30f27b72b1b92e60864f7ffa070459d4d3e5c7744d61921b0" From 6555186bcea1564708d32a995f47d75c4fbeed37 Mon Sep 17 00:00:00 2001 From: Alexander Neff Date: Sun, 27 Sep 2026 17:15:13 -0400 Subject: [PATCH 2/3] Fix new task format --- nxc/protocols/smb.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/nxc/protocols/smb.py b/nxc/protocols/smb.py index 401f5844..a4ada6cf 100755 --- a/nxc/protocols/smb.py +++ b/nxc/protocols/smb.py @@ -1378,12 +1378,12 @@ class smb(connection): @requires_admin def tasklist(self): # Formats a row to be printed on screen - def format_row(procInfo): + def format_row(procInfo, pSid): return template.format( - procInfo["ImageName"], - procInfo["UniqueProcessId"], - procInfo["SessionId"], - procInfo["pSid"], + str(procInfo["ImageName"].getValue()), + str(procInfo["UniqueProcessId"]), + str(procInfo["SessionId"]), + pSid, f"{procInfo['WorkingSetSize'] // 1000:,} K", ) @@ -1399,8 +1399,8 @@ class smb(connection): if not res: return self.logger.success("Enumerated processes") - maxImageNameLen = max(len(i["ImageName"]) for i in res) - maxSidLen = max(len(i["pSid"]) for i in res) + maxImageNameLen = max(len(i.getProcessInfo()["ImageName"].getValue()) for i in res) + maxSidLen = max(len(i.getSid()) for i in res) template = f"{{: <{maxImageNameLen}}} {{: <8}} {{: <11}} {{: <{maxSidLen}}} {{: >12}}" self.logger.highlight(template.format("Image Name", "PID", "Session#", "SID", "Mem Usage")) self.logger.highlight(template.replace(": ", ":=").format("", "", "", "", "")) @@ -1411,12 +1411,12 @@ class smb(connection): # If args.tasklist is not True then a process name was supplied if self.args.tasklist is not True: # So we look for it and print its information if found - if self.args.tasklist.lower() in procInfo["ImageName"].lower(): + if self.args.tasklist.lower() in procInfo.getProcessInfo()["ImageName"].lower(): found_task = True - self.logger.highlight(format_row(procInfo)) + self.logger.highlight(format_row(procInfo.getProcessInfo(), procInfo.getSid())) # Else, no process was supplied, we print the entire list of remote processes else: - self.logger.highlight(format_row(procInfo)) + self.logger.highlight(format_row(procInfo.getProcessInfo(), procInfo.getSid())) # If a process was suppliad to args.tasklist and it was not found, we print a fail message if self.args.tasklist is not True and not found_task: From 71c36e9a094eb4fe1c004a70a0da0d0d3f289d51 Mon Sep 17 00:00:00 2001 From: Alexander Neff Date: Sun, 27 Sep 2026 17:23:06 -0400 Subject: [PATCH 3/3] Fix new task format for task killing --- nxc/protocols/smb.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nxc/protocols/smb.py b/nxc/protocols/smb.py index a4ada6cf..085b3e21 100755 --- a/nxc/protocols/smb.py +++ b/nxc/protocols/smb.py @@ -1264,7 +1264,7 @@ class smb(connection): self.logger.error("Could not get process list") return - pidList = [i["UniqueProcessId"] for i in res if i["ImageName"].lower() == self.args.taskkill.lower()] + pidList = [i.getProcessInfo()["UniqueProcessId"] for i in res if i.getProcessInfo()["ImageName"].getValue().lower() == self.args.taskkill.lower()] if not pidList: self.logger.fail(f"Could not find process named {self.args.taskkill}") return @@ -1411,7 +1411,7 @@ class smb(connection): # If args.tasklist is not True then a process name was supplied if self.args.tasklist is not True: # So we look for it and print its information if found - if self.args.tasklist.lower() in procInfo.getProcessInfo()["ImageName"].lower(): + if self.args.tasklist.lower() in procInfo.getProcessInfo()["ImageName"].getValue().lower(): found_task = True self.logger.highlight(format_row(procInfo.getProcessInfo(), procInfo.getSid())) # Else, no process was supplied, we print the entire list of remote processes