From 8fb9bc0d75d030cf39fa21a9e61c9b7051910a67 Mon Sep 17 00:00:00 2001 From: wumb0 Date: Sun, 28 Apr 2024 12:39:11 -0400 Subject: [PATCH] add multi-file put, keeping compatibiltiy with old format (tuple) - Pennyw0rth/NetExec#281 --- nxc/protocols/smb.py | 18 +++++++++++++----- nxc/protocols/smb/proto_args.py | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/nxc/protocols/smb.py b/nxc/protocols/smb.py index d8c289ff1..c89a85e7e 100755 --- a/nxc/protocols/smb.py +++ b/nxc/protocols/smb.py @@ -1246,14 +1246,22 @@ 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): + files = self.args.put_file + if isinstance(files, list): + for src, dest in files: + self.put_file_single(src, dest) + else: + self.put_file_single(*files) def get_file(self): share_name = self.args.share diff --git a/nxc/protocols/smb/proto_args.py b/nxc/protocols/smb/proto_args.py index 164c03cae..f878fe78e 100644 --- a/nxc/protocols/smb/proto_args.py +++ b/nxc/protocols/smb/proto_args.py @@ -59,7 +59,7 @@ 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("--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", 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")