mirror of
https://github.com/calebstewart/pwncat.git
synced 2024-11-27 19:04:15 +01:00
Merge pull request #198 from calebstewart/issue-193-custom-which
Added Linux which fallback routine
This commit is contained in:
commit
b31ee34c65
@ -17,8 +17,9 @@ and simply didn't have the time to go back and retroactively create one.
|
|||||||
- Fixed verbose logging handler to be __unique__ for every `channel`
|
- Fixed verbose logging handler to be __unique__ for every `channel`
|
||||||
- Fixed docstrings in `Command` modules
|
- Fixed docstrings in `Command` modules
|
||||||
- Changed docker base image to `python3.9-alpine` to fix python version issues.
|
- Changed docker base image to `python3.9-alpine` to fix python version issues.
|
||||||
- Added logic for calling correct paramiko method when reloading an encrypted SSH privat ekey ([#185](https://github.com/calebstewart/issues/185)).
|
- Added logic for calling correct paramiko method when reloading an encrypted SSH privat ekey ([#185](https://github.com/calebstewart/pwncat/issues/185)).
|
||||||
- Forced `Stream.RAW` for all GTFOBins interaction ([#195](https://github.com/calebstewart/issues/195)).
|
- Forced `Stream.RAW` for all GTFOBins interaction ([#195](https://github.com/calebstewart/pwncat/issues/195)).
|
||||||
|
- Added custom `which` implementation for linux when `which` is not available ([#193](https://github.com/calebstewart/pwncat/issues/193)).
|
||||||
### Added
|
### Added
|
||||||
- Added alternatives to `bash` to be used during _shell upgrade_ for a _better shell_
|
- Added alternatives to `bash` to be used during _shell upgrade_ for a _better shell_
|
||||||
- Added a warning message when a `KeyboardInterrupt` is caught
|
- Added a warning message when a `KeyboardInterrupt` is caught
|
||||||
|
@ -621,6 +621,9 @@ class Linux(Platform):
|
|||||||
self.shell = "/bin/sh"
|
self.shell = "/bin/sh"
|
||||||
self.channel.sendline(b" export SHELL=/bin/sh")
|
self.channel.sendline(b" export SHELL=/bin/sh")
|
||||||
|
|
||||||
|
if True or self._do_which("which") is None:
|
||||||
|
self._do_which = self._do_custom_which
|
||||||
|
|
||||||
if os.path.basename(self.shell) in ["sh", "dash"]:
|
if os.path.basename(self.shell) in ["sh", "dash"]:
|
||||||
# Try to find a better shell
|
# Try to find a better shell
|
||||||
# a custom `pwncat shell prompt` may not be available for all shells
|
# a custom `pwncat shell prompt` may not be available for all shells
|
||||||
@ -816,6 +819,25 @@ class Linux(Platform):
|
|||||||
for name in p.stdout.split("\n"):
|
for name in p.stdout.split("\n"):
|
||||||
yield name
|
yield name
|
||||||
|
|
||||||
|
def _do_custom_which(self, name: str):
|
||||||
|
"""This is custom which implementation that will not find built-in commands.
|
||||||
|
It is altogether inferior to the real which, but if `which` isn't available,
|
||||||
|
it will do the job."""
|
||||||
|
|
||||||
|
try:
|
||||||
|
result = self.run(
|
||||||
|
f"""IFS=':'; for path in $PATH; do if [ -f "$path/{name}" ]; then echo "$path/{name}"; break; fi; done; IFS=' '""",
|
||||||
|
shell=True,
|
||||||
|
capture_output=True,
|
||||||
|
check=True,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
|
if result.stdout.rstrip("\n") == "":
|
||||||
|
return None
|
||||||
|
return result.stdout.rstrip("\n")
|
||||||
|
except CalledProcessError:
|
||||||
|
return None
|
||||||
|
|
||||||
def _do_which(self, name: str) -> str:
|
def _do_which(self, name: str) -> str:
|
||||||
"""
|
"""
|
||||||
Locate the specified binary on the remote host. Normally, this is done through
|
Locate the specified binary on the remote host. Normally, this is done through
|
||||||
|
Loading…
Reference in New Issue
Block a user