diff --git a/nxc/protocols/smb.py b/nxc/protocols/smb.py index d8c289ff1..e0890aceb 100755 --- a/nxc/protocols/smb.py +++ b/nxc/protocols/smb.py @@ -1246,19 +1246,21 @@ def rid_brute(self, max_rid=None): dce.disconnect() return entries - def put_file(self): - self.logger.display(f"Copying {self.args.put_file[0]} to {self.args.put_file[1]}") - with open(self.args.put_file[0], "rb") as file: + def put_file_single(self, src, dst): + self.logger.display(f"Copying {src} to {dst}") + with open(src, "rb") as file: try: - self.conn.putFile(self.args.share, self.args.put_file[1], file.read) - self.logger.success(f"Created file {self.args.put_file[0]} on \\\\{self.args.share}\\{self.args.put_file[1]}") + self.conn.putFile(self.args.share, dst, file.read) + self.logger.success(f"Created file {src} on \\\\{self.args.share}\\{dst}") except Exception as e: self.logger.fail(f"Error writing file to share {self.args.share}: {e}") + + def put_file(self): + for src, dest in self.args.put_file: + self.put_file_single(src, dest) - def get_file(self): + def get_file_single(self, remote_path, download_path): share_name = self.args.share - remote_path = self.args.get_file[0] - download_path = self.args.get_file[1] self.logger.display(f'Copying "{remote_path}" to "{download_path}"') if self.args.append_host: download_path = f"{self.hostname}-{remote_path}" @@ -1271,6 +1273,10 @@ def get_file(self): if os.path.getsize(download_path) == 0: os.remove(download_path) + def get_file(self): + for src, dest in self.args.get_file: + self.get_file_single(src, dest) + def enable_remoteops(self): try: self.remote_ops = RemoteOperations(self.conn, self.kerberos, self.kdcHost) diff --git a/nxc/protocols/smb/proto_args.py b/nxc/protocols/smb/proto_args.py index 164c03cae..678702560 100644 --- a/nxc/protocols/smb/proto_args.py +++ b/nxc/protocols/smb/proto_args.py @@ -59,8 +59,8 @@ def proto_args(parser, std_parser, module_parser): sgroup.add_argument("--only-files", action="store_true", help="only spider files") tgroup = smb_parser.add_argument_group("Files", "Options for put and get remote files") - tgroup.add_argument("--put-file", nargs=2, metavar="FILE", help="Put a local file into remote target, ex: whoami.txt \\\\Windows\\\\Temp\\\\whoami.txt") - tgroup.add_argument("--get-file", nargs=2, metavar="FILE", help="Get a remote file, ex: \\\\Windows\\\\Temp\\\\whoami.txt whoami.txt") + tgroup.add_argument("--put-file", action="append", nargs=2, metavar="FILE", help="Put a local file into remote target, ex: whoami.txt \\\\Windows\\\\Temp\\\\whoami.txt") + tgroup.add_argument("--get-file", action="append", nargs=2, metavar="FILE", help="Get a remote file, ex: \\\\Windows\\\\Temp\\\\whoami.txt whoami.txt") tgroup.add_argument("--append-host", action="store_true", help="append the host to the get-file filename") cgroup = smb_parser.add_argument_group("Command Execution", "Options for executing commands")