22from traceback import format_exc
33from nxc .protocols .smb .atexec import TSCH_EXEC
44
5-
65class NXCModule :
76 """
87 Execute a scheduled task remotely as a already connected user by @Defte_
@@ -51,6 +50,7 @@ def options(self, context, module_options):
5150 name = "schtask_as"
5251 description = "Remotely execute a scheduled task as a logged on user"
5352 supported_protocols = ["smb" ]
53+ multiple_hosts = False
5454
5555 def on_admin_login (self , context , connection ):
5656 self .logger = context .log
@@ -69,17 +69,16 @@ def on_admin_login(self, context, connection):
6969 return 1
7070 else :
7171 self .logger .display (f"Uploading { self .binary_to_upload } " )
72+ binary_file_location = self .tmp_share if self .output_file_location is None else self .output_file_location
7273 with open (self .binary_to_upload , "rb" ) as binary_to_upload :
7374 try :
7475 self .binary_to_upload_name = os .path .basename (self .binary_to_upload )
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 } " )
76+ connection .conn .putFile (self .share , f"{ binary_file_location } { self .binary_to_upload_name } " , binary_to_upload .read )
77+ self .logger .success (f"Binary { self .binary_to_upload_name } successfully uploaded in { binary_file_location } { self .binary_to_upload_name } " )
7778 except Exception as e :
78- self .logger .fail (f"Error writing file to share { self . tmp_share } : { e } " )
79+ self .logger .fail (f"Error writing file to share { binary_file_location } : { e } " )
7980 return 1
8081
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 } "
8382 self .logger .display ("Connecting to the remote Service control endpoint" )
8483 try :
8584 exec_method = TSCH_EXEC (
@@ -96,7 +95,7 @@ def on_admin_login(self, context, connection):
9695 self .logger ,
9796 connection .args .get_output_tries ,
9897 connection .args .share ,
99- self .run_task_as ,
98+ self .run_task_as ,
10099 self .command_to_run ,
101100 self .output_filename ,
102101 self .task_name ,
@@ -122,7 +121,9 @@ def on_admin_login(self, context, connection):
122121 finally :
123122 if self .binary_to_upload :
124123 try :
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" )
124+ context .log .success ("Sleeping for 10 seconds to let binary run" )
125+ sleep (10 )
126+ connection .conn .deleteFile (self .share , f"{ binary_file_location } { self .binary_to_upload_name } " )
127+ context .log .success (f"Binary { binary_file_location } { self .binary_to_upload_name } successfully deleted" )
127128 except Exception as e :
128- context .log .fail (f"Error deleting { self .binary_to_upload_name } on { self .share } : { e } " )
129+ context .log .fail (f"Error deleting { binary_file_location } { self .binary_to_upload_name } on { self .share } : { e } " )
0 commit comments