22from traceback import format_exc
33from nxc .protocols .smb .atexec import TSCH_EXEC
44
5+
56class NXCModule :
67 """
78 Execute a scheduled task remotely as a already connected user by @Defte_
@@ -50,7 +51,7 @@ def options(self, context, module_options):
5051 name = "schtask_as"
5152 description = "Remotely execute a scheduled task as a logged on user"
5253 supported_protocols = ["smb" ]
53-
54+
5455 def on_admin_login (self , context , connection ):
5556 self .logger = context .log
5657
@@ -68,16 +69,17 @@ def on_admin_login(self, context, connection):
6869 return 1
6970 else :
7071 self .logger .display (f"Uploading { self .binary_to_upload } " )
71- binary_file_location = self .tmp_share if self .output_file_location is None else self .output_file_location
7272 with open (self .binary_to_upload , "rb" ) as binary_to_upload :
7373 try :
7474 self .binary_to_upload_name = os .path .basename (self .binary_to_upload )
75- connection .conn .putFile (self .share , f"{ binary_file_location } { self .binary_to_upload_name } " , binary_to_upload .read )
76- self .logger .success (f"Binary { self .binary_to_upload_name } successfully uploaded in { binary_file_location } { self .binary_to_upload_name } " )
75+ connection .conn .putFile (self .share , f"{ self . tmp_share } { self .binary_to_upload_name } " , binary_to_upload .read )
76+ self .logger .success (f"Binary { self .binary_to_upload_name } successfully uploaded in { self . tmp_share } { self .binary_to_upload_name } " )
7777 except Exception as e :
78- self .logger .fail (f"Error writing file to share { binary_file_location } : { e } " )
78+ self .logger .fail (f"Error writing file to share { self . tmp_share } : { e } " )
7979 return 1
8080
81+ # Returnes self.command_to_run or \Windows\temp\BinToExecute.exe depending if BINARY=BinToExecute.exe
82+ self .command_to_run = self .command_to_run if not self .binary_to_upload else f"{ self .tmp_share } { self .command_to_run } "
8183 self .logger .display ("Connecting to the remote Service control endpoint" )
8284 try :
8385 exec_method = TSCH_EXEC (
@@ -94,7 +96,7 @@ def on_admin_login(self, context, connection):
9496 self .logger ,
9597 connection .args .get_output_tries ,
9698 connection .args .share ,
97- self .run_task_as ,
99+ self .run_task_as ,
98100 self .command_to_run ,
99101 self .output_filename ,
100102 self .task_name ,
@@ -120,9 +122,7 @@ def on_admin_login(self, context, connection):
120122 finally :
121123 if self .binary_to_upload :
122124 try :
123- context .log .success ("Sleeping for 10 seconds to let binary run" )
124- sleep (10 )
125- connection .conn .deleteFile (self .share , f"{ binary_file_location } { self .binary_to_upload_name } " )
126- context .log .success (f"Binary { binary_file_location } { self .binary_to_upload_name } successfully deleted" )
125+ connection .conn .deleteFile (self .share , f"{ self .tmp_share } { self .binary_to_upload_name } " )
126+ context .log .success (f"Binary { self .binary_to_upload_name } successfully deleted" )
127127 except Exception as e :
128- context .log .fail (f"Error deleting { binary_file_location } { self .binary_to_upload_name } on { self .share } : { e } " )
128+ context .log .fail (f"Error deleting { self .binary_to_upload_name } on { self .share } : { e } " )
0 commit comments