1
0
mirror of https://github.com/calebstewart/pwncat.git synced 2024-11-24 01:25:37 +01:00

Merge pull request #226 from calebstewart/issue-225-ssl-parsing

Issue 225 ssl parsing
This commit is contained in:
Caleb Stewart 2021-12-26 02:42:50 -05:00 committed by GitHub
commit 7c1eb982aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 69 deletions

View File

@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
The Changelog starts with v0.4.1, because we did not keep one before that, The Changelog starts with v0.4.1, because we did not keep one before that,
and simply didn't have the time to go back and retroactively create one. and simply didn't have the time to go back and retroactively create one.
## [Unreleased]
### Changed
- Fixed parsing of `--ssl` argument in main entrypoint ([#225](https://github.com/calebstewart/pwncat/issues/225))
## [0.5.1] - 2021-12-07 ## [0.5.1] - 2021-12-07
Minor bug fixes. Mainly typos from changing the package name. Minor bug fixes. Mainly typos from changing the package name.

View File

@ -233,9 +233,9 @@ def main():
if query_args["certfile"] is not None or query_args["keyfile"] is not None: if query_args["certfile"] is not None or query_args["keyfile"] is not None:
query_args["ssl"] = True query_args["ssl"] = True
if query_args["protocol"] is not None and args.ssl: if query_args["protocol"] not in [None, "bind", "connect"] and args.ssl:
console.log( console.log(
"[red]error[/red]: --ssl is incompatible with an explicit protocol" f"[red]error[/red]: --ssl is incompatible with an [yellow]{query_args['protocol']}[/yellow] protocol"
) )
return return
@ -296,41 +296,31 @@ def main():
if "implant.remote" in fact.types: if "implant.remote" in fact.types:
implants.append((target, users[fact.uid], fact)) implants.append((target, users[fact.uid], fact))
with Progress( for target, implant_user, implant in implants:
"triggering implant", # Check correct query_args["user"]
"", if (
"{task.fields[status]}", query_args["user"] is not None
transient=True, and implant_user.name != query_args["user"]
console=console, ):
) as progress: continue
task = progress.add_task("", status="...") # Check correct platform
for target, implant_user, implant in implants: if (
# Check correct query_args["user"] query_args["platform"] is not None
if ( and target.platform != query_args["platform"]
query_args["user"] is not None ):
and implant_user.name != query_args["user"] continue
):
continue
# Check correct platform
if (
query_args["platform"] is not None
and target.platform != query_args["platform"]
):
continue
progress.update( manager.log(f"trigger implant: [cyan]{implant.source}[/cyan]")
task, status=f"trying [cyan]{implant.source}[/cyan]"
)
# Attempt to trigger a new session # Attempt to trigger a new session
try: try:
session = implant.trigger(manager, target) session = implant.trigger(manager, target)
manager.target = session manager.target = session
used_implant = implant used_implant = implant
break break
except ModuleFailed: except ModuleFailed:
db.transaction_manager.commit() db.transaction_manager.commit()
continue continue
if manager.target is not None: if manager.target is not None:
manager.target.log( manager.target.log(

View File

@ -4,7 +4,6 @@ import sys
from rich import box from rich import box
from rich.table import Table from rich.table import Table
from rich.progress import Progress
import pwncat import pwncat
from pwncat.util import console from pwncat.util import console
@ -255,41 +254,31 @@ class Command(CommandDefinition):
if "implant.remote" in fact.types: if "implant.remote" in fact.types:
implants.append((target, users[fact.uid], fact)) implants.append((target, users[fact.uid], fact))
with Progress( for target, implant_user, implant in implants:
"triggering implant", # Check correct query_args["user"]
"", if (
"{task.fields[status]}", query_args["user"] is not None
transient=True, and implant_user.name != query_args["user"]
console=console, ):
) as progress: continue
task = progress.add_task("", status="...") # Check correct platform
for target, implant_user, implant in implants: if (
# Check correct query_args["user"] query_args["platform"] is not None
if ( and target.platform != query_args["platform"]
query_args["user"] is not None ):
and implant_user.name != query_args["user"] continue
):
continue
# Check correct platform
if (
query_args["platform"] is not None
and target.platform != query_args["platform"]
):
continue
progress.update( manager.log(f"trigger implant: [cyan]{implant.source}[/cyan]")
task, status=f"trying [cyan]{implant.source}[/cyan]"
)
# Attempt to trigger a new session # Attempt to trigger a new session
try: try:
session = implant.trigger(manager, target) session = implant.trigger(manager, target)
manager.target = session manager.target = session
used_implant = implant used_implant = implant
break break
except (ChannelError, PlatformError, ModuleFailed): except (ChannelError, PlatformError, ModuleFailed):
db.transaction_manager.commit() db.transaction_manager.commit()
continue continue
if used_implant is not None: if used_implant is not None:
manager.target.log(f"connected via {used_implant.title(manager.target)}") manager.target.log(f"connected via {used_implant.title(manager.target)}")