(local) pwncat$ run pwnkit
╭──────────────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────────────╮
│ │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/platform/linux.py:1065 in compile │
│ │
│ 1062 │ │ command = [gcc, "-o", output, *cflags, *real_sources, *ldflags] │
│ 1063 │ │ │
│ 1064 │ │ try: │
│ ❱ 1065 │ │ │ self.run(command, check=True) │
│ 1066 │ │ except pwncat.subprocess.CalledProcessError: │
│ 1067 │ │ │ self.run(["rm", "-f", output]) │
│ 1068 │ │ │ raise PlatformError("compilation failed") │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/platform/init.py:786 in run │
│ │
│ 783 │ │ if popen_class is None: │
│ 784 │ │ │ popen_class = self.Popen │
│ 785 │ │ │
│ ❱ 786 │ │ p = popen_class( │
│ 787 │ │ │ args, │
│ 788 │ │ │ stdin=stdin, │
│ 789 │ │ │ stdout=stdout, │
│ │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/platform/linux.py:1114 in Popen │
│ │
│ 1111 │ │ │ ) │
│ 1112 │ │ │
│ 1113 │ │ if isinstance(args, list): │
│ ❱ 1114 │ │ │ command = shlex.join(args) │
│ 1115 │ │ elif isinstance(args, str): │
│ 1116 │ │ │ command = args │
│ 1117 │ │ else: │
│ │
│ /usr/lib/python3.9/shlex.py:320 in join │
│ │
│ 317 │
│ 318 def join(split_command): │
│ 319 │ """Return a shell-escaped string from split_command.""" │
│ ❱ 320 │ return ' '.join(quote(arg) for arg in split_command) │
│ 321 │
│ 322 │
│ 323 _find_unsafe = re.compile(r'[^\w@%+=:,./-]', re.ASCII).search │
│ │
│ /usr/lib/python3.9/shlex.py:320 in │
│ │
│ 317 │
│ 318 def join(split_command): │
│ 319 │ """Return a shell-escaped string from split_command.""" │
│ ❱ 320 │ return ' '.join(quote(arg) for arg in split_command) │
│ 321 │
│ 322 │
│ 323 _find_unsafe = re.compile(r'[^\w@%+=:,./-]', re.ASCII).search │
│ │
│ /usr/lib/python3.9/shlex.py:329 in quote │
│ │
│ 326 │ """Return a shell-escaped version of the string s.""" │
│ 327 │ if not s: │
│ 328 │ │ return "''" │
│ ❱ 329 │ if _find_unsafe(s) is None: │
│ 330 │ │ return s │
│ 331 │ │
│ 332 │ # use single quotes, and put single quotes into double quotes │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
TypeError: expected string or bytes-like object
During handling of the above exception, another exception occurred:
╭──────────────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────────────╮
│ │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/commands/init.py:591 in run │
│ │
│ 588 │ │ │ │ if line == "": │
│ 589 │ │ │ │ │ continue │
│ 590 │ │ │ │ │
│ ❱ 591 │ │ │ │ self.dispatch_line(line) │
│ 592 │ │ │ # We used to catch only KeyboardException, but this prevents a │
│ 593 │ │ │ # badly written command from completely killing our remote │
│ 594 │ │ │ # connection. │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/commands/init.py:672 in dispatch_line │
│ │
│ 669 │ │ │ │ args = line │
│ 670 │ │ │ │
│ 671 │ │ │ # Run the command │
│ ❱ 672 │ │ │ command.run(self.manager, args) │
│ 673 │ │ │ │
│ 674 │ │ │ if prog_name: │
│ 675 │ │ │ │ command.parser.prog = prog_name │
│ │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/commands/run.py:67 in run │
│ │
│ 64 │ │ config_values.update(values) │
│ 65 │ │ │
│ 66 │ │ try: │
│ ❱ 67 │ │ │ result = manager.target.run(module_name, **config_values) │
│ 68 │ │ │ │
│ 69 │ │ │ if args.module is not None: │
│ 70 │ │ │ │ manager.config.back() │
│ │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/manager.py:652 in run │
│ │
│ 649 │ │ if module.PLATFORM is not None and type(self.platform) not in module.PLATFORM: │
│ 650 │ │ │ raise pwncat.modules.IncorrectPlatformError(module_name) │
│ 651 │ │ │
│ ❱ 652 │ │ return module.run(self, **kwargs) │
│ 653 │ │
│ 654 │ def find_module(self, pattern: str, base=None, exact: bool = False): │
│ 655 │ │ """Locate a module by a glob pattern. This is an generator │
│ │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/modules/init.py:239 in decorator │
│ │
│ 236 │ │ │ │ │ with session.task(description=self.name, status="...") as task: │
│ 237 │ │ │ │ │ │ # Collect results │
│ 238 │ │ │ │ │ │ results = [] │
│ ❱ 239 │ │ │ │ │ │ for item in result_object: │
│ 240 │ │ │ │ │ │ │ session.update_task(task, status=item.title(session)) │
│ 241 │ │ │ │ │ │ │ if not isinstance(item, Status): │
│ 242 │ │ │ │ │ │ │ │ results.append(item) │
│ │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/modules/pwnkit.py:94 in run │
│ │
│ 91 │ │ │
│ 92 │ │ # Compile pwnkit binary │
│ 93 │ │ try: │
│ ❱ 94 │ │ │ pwnkit = session.platform.compile( │
│ 95 │ │ │ │ [StringIO(pwnkit_source)], │
│ 96 │ │ │ │ cflags=["-shared", "-fPIC"], │
│ 97 │ │ │ │ output=str((scratch_path / "pwnkit" / "pwnkit.so")) │
│ │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/platform/linux.py:1071 in compile │
│ │
│ 1068 │ │ │ raise PlatformError("compilation failed") │
│ 1069 │ │ finally: │
│ 1070 │ │ │ try: │
│ ❱ 1071 │ │ │ │ self.run(["rm", "-f", *real_sources], check=True) │
│ 1072 │ │ │ except pwncat.subprocess.CalledProcessError: │
│ 1073 │ │ │ │ # Removing sources failed. Add them as tampers │
│ 1074 │ │ │ │ for source in real_sources: │
│ │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/platform/init.py:786 in run │
│ │
│ 783 │ │ if popen_class is None: │
│ 784 │ │ │ popen_class = self.Popen │
│ 785 │ │ │
│ ❱ 786 │ │ p = popen_class( │
│ 787 │ │ │ args, │
│ 788 │ │ │ stdin=stdin, │
│ 789 │ │ │ stdout=stdout, │
│ │
│ /opt/pwncat/lib/python3.9/site-packages/pwncat/platform/linux.py:1114 in Popen │
│ │
│ 1111 │ │ │ ) │
│ 1112 │ │ │
│ 1113 │ │ if isinstance(args, list): │
│ ❱ 1114 │ │ │ command = shlex.join(args) │
│ 1115 │ │ elif isinstance(args, str): │
│ 1116 │ │ │ command = args │
│ 1117 │ │ else: │
│ │
│ /usr/lib/python3.9/shlex.py:320 in join │
│ │
│ 317 │
│ 318 def join(split_command): │
│ 319 │ """Return a shell-escaped string from split_command.""" │
│ ❱ 320 │ return ' '.join(quote(arg) for arg in split_command) │
│ 321 │
│ 322 │
│ 323 _find_unsafe = re.compile(r'[^\w@%+=:,./-]', re.ASCII).search │
│ │
│ /usr/lib/python3.9/shlex.py:320 in │
│ │
│ 317 │
│ 318 def join(split_command): │
│ 319 │ """Return a shell-escaped string from split_command.""" │
│ ❱ 320 │ return ' '.join(quote(arg) for arg in split_command) │
│ 321 │
│ 322 │
│ 323 _find_unsafe = re.compile(r'[^\w@%+=:,./-]', re.ASCII).search │
│ │
│ /usr/lib/python3.9/shlex.py:329 in quote │
│ │
│ 326 │ """Return a shell-escaped version of the string s.""" │
│ 327 │ if not s: │
│ 328 │ │ return "''" │
│ ❱ 329 │ if _find_unsafe(s) is None: │
│ 330 │ │ return s │
│ 331 │ │
│ 332 │ # use single quotes, and put single quotes into double quotes │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
TypeError: expected string or bytes-like object
(local) pwncat$