mirror of
https://github.com/calebstewart/pwncat.git
synced 2024-11-23 09:05:37 +01:00
chore: Pre-merge tasks completed
Oops, I missed the import for PlatformError :p
This commit is contained in:
parent
1f6c82026e
commit
0632beb992
@ -12,7 +12,8 @@
|
|||||||
#
|
#
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
sys.path.insert(0, os.path.abspath('../..'))
|
|
||||||
|
sys.path.insert(0, os.path.abspath("../.."))
|
||||||
|
|
||||||
|
|
||||||
# -- Project information -----------------------------------------------------
|
# -- Project information -----------------------------------------------------
|
||||||
|
@ -14,6 +14,7 @@ from rich.progress import (
|
|||||||
import pwncat
|
import pwncat
|
||||||
from pwncat.util import console, copyfileobj, human_readable_size, human_readable_delta
|
from pwncat.util import console, copyfileobj, human_readable_size, human_readable_delta
|
||||||
from pwncat.commands import Complete, Parameter, CommandDefinition
|
from pwncat.commands import Complete, Parameter, CommandDefinition
|
||||||
|
from pwncat.platform import PlatformError
|
||||||
|
|
||||||
|
|
||||||
class Command(CommandDefinition):
|
class Command(CommandDefinition):
|
||||||
@ -77,5 +78,10 @@ class Command(CommandDefinition):
|
|||||||
f"uploaded [cyan]{human_readable_size(length)}[/cyan] "
|
f"uploaded [cyan]{human_readable_size(length)}[/cyan] "
|
||||||
f"in [green]{human_readable_delta(elapsed)}[/green]"
|
f"in [green]{human_readable_delta(elapsed)}[/green]"
|
||||||
)
|
)
|
||||||
except (FileNotFoundError, PermissionError, IsADirectoryError, PlatformError) as exc:
|
except (
|
||||||
|
FileNotFoundError,
|
||||||
|
PermissionError,
|
||||||
|
IsADirectoryError,
|
||||||
|
PlatformError,
|
||||||
|
) as exc:
|
||||||
self.parser.error(str(exc))
|
self.parser.error(str(exc))
|
||||||
|
@ -93,7 +93,9 @@ class Module(ImplantModule):
|
|||||||
yield Status("verifying user permissions")
|
yield Status("verifying user permissions")
|
||||||
current_user = session.current_user()
|
current_user = session.current_user()
|
||||||
if user != "__pwncat_current__" and current_user.id != 0:
|
if user != "__pwncat_current__" and current_user.id != 0:
|
||||||
raise ModuleFailed("only [blue]root[/blue] can install implants for other users")
|
raise ModuleFailed(
|
||||||
|
"only [blue]root[/blue] can install implants for other users"
|
||||||
|
)
|
||||||
|
|
||||||
if not os.path.isfile(key):
|
if not os.path.isfile(key):
|
||||||
raise ModuleFailed(f"private key [bleu]{key}[/blue] does not exist")
|
raise ModuleFailed(f"private key [bleu]{key}[/blue] does not exist")
|
||||||
|
@ -8,9 +8,10 @@ import dataclasses
|
|||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pwncat.channel import ChannelError
|
|
||||||
from Crypto.PublicKey import RSA
|
from Crypto.PublicKey import RSA
|
||||||
|
|
||||||
|
from pwncat.channel import ChannelError
|
||||||
|
|
||||||
PLATFORM_MAP = {"ubuntu": "linux", "centos": "linux", "windows": "windows"}
|
PLATFORM_MAP = {"ubuntu": "linux", "centos": "linux", "windows": "windows"}
|
||||||
|
|
||||||
|
|
||||||
@ -37,13 +38,13 @@ def connection_details_for(name):
|
|||||||
|
|
||||||
@pytest.fixture(params=["ubuntu", "centos"])
|
@pytest.fixture(params=["ubuntu", "centos"])
|
||||||
def linux_details(request):
|
def linux_details(request):
|
||||||
""" Get available connection details for linux hosts """
|
"""Get available connection details for linux hosts"""
|
||||||
return connection_details_for(request.param)
|
return connection_details_for(request.param)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(params=["windows"])
|
@pytest.fixture(params=["windows"])
|
||||||
def windows_details(request):
|
def windows_details(request):
|
||||||
""" Get available connection details for windows hosts """
|
"""Get available connection details for windows hosts"""
|
||||||
return connection_details_for(request.param)
|
return connection_details_for(request.param)
|
||||||
|
|
||||||
|
|
||||||
@ -84,18 +85,18 @@ set -g db "memory://"
|
|||||||
|
|
||||||
@pytest.fixture(params=["windows", "ubuntu", "centos"])
|
@pytest.fixture(params=["windows", "ubuntu", "centos"])
|
||||||
def session(request):
|
def session(request):
|
||||||
""" Start a session with any platform """
|
"""Start a session with any platform"""
|
||||||
yield from session_for(request)
|
yield from session_for(request)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(params=["windows"])
|
@pytest.fixture(params=["windows"])
|
||||||
def windows(request):
|
def windows(request):
|
||||||
""" Start a windows session """
|
"""Start a windows session"""
|
||||||
yield from session_for(request)
|
yield from session_for(request)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(params=["ubuntu", "centos"])
|
@pytest.fixture(params=["ubuntu", "centos"])
|
||||||
def linux(request):
|
def linux(request):
|
||||||
""" Start a linux session """
|
"""Start a linux session"""
|
||||||
|
|
||||||
yield from session_for(request)
|
yield from session_for(request)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from pwncat.modules import IncorrectPlatformError
|
from pwncat.modules import IncorrectPlatformError
|
||||||
|
|
||||||
|
|
||||||
@ -13,13 +14,13 @@ def test_session_iter_users(session):
|
|||||||
|
|
||||||
|
|
||||||
def test_session_find_user_name(session):
|
def test_session_find_user_name(session):
|
||||||
""" Test that locating a user by name works """
|
"""Test that locating a user by name works"""
|
||||||
|
|
||||||
assert session.find_user(name="john") is not None
|
assert session.find_user(name="john") is not None
|
||||||
|
|
||||||
|
|
||||||
def test_session_find_user_uid(linux):
|
def test_session_find_user_uid(linux):
|
||||||
""" Test locating a user by their UID (for linux only) """
|
"""Test locating a user by their UID (for linux only)"""
|
||||||
|
|
||||||
user = linux.find_user(uid=0)
|
user = linux.find_user(uid=0)
|
||||||
|
|
||||||
@ -28,7 +29,7 @@ def test_session_find_user_uid(linux):
|
|||||||
|
|
||||||
|
|
||||||
def test_session_find_user_sid(windows):
|
def test_session_find_user_sid(windows):
|
||||||
""" Test locating a user by their SID (for windows only) """
|
"""Test locating a user by their SID (for windows only)"""
|
||||||
|
|
||||||
# This is the SID of the Administrator in the windows servercore image...
|
# This is the SID of the Administrator in the windows servercore image...
|
||||||
# This will only work from the testing container, but I've decided that's fine.
|
# This will only work from the testing container, but I've decided that's fine.
|
||||||
@ -39,7 +40,7 @@ def test_session_find_user_sid(windows):
|
|||||||
|
|
||||||
|
|
||||||
def test_session_find_module(session):
|
def test_session_find_module(session):
|
||||||
""" Test that locating modules works """
|
"""Test that locating modules works"""
|
||||||
|
|
||||||
assert len(list(session.find_module("enumerate.*"))) > 0
|
assert len(list(session.find_module("enumerate.*"))) > 0
|
||||||
assert len(list(session.find_module("enumerate.user"))) == 1
|
assert len(list(session.find_module("enumerate.user"))) == 1
|
||||||
@ -47,7 +48,7 @@ def test_session_find_module(session):
|
|||||||
|
|
||||||
|
|
||||||
def test_session_run_module(session):
|
def test_session_run_module(session):
|
||||||
""" Test running a module within a session """
|
"""Test running a module within a session"""
|
||||||
|
|
||||||
# We should be able to enumerate a hostname
|
# We should be able to enumerate a hostname
|
||||||
facts = session.run("enumerate", types=["system.hostname"])
|
facts = session.run("enumerate", types=["system.hostname"])
|
||||||
@ -55,14 +56,14 @@ def test_session_run_module(session):
|
|||||||
|
|
||||||
|
|
||||||
def test_session_wrong_platform_linux(linux):
|
def test_session_wrong_platform_linux(linux):
|
||||||
""" Test that windows modules don't run in linux """
|
"""Test that windows modules don't run in linux"""
|
||||||
|
|
||||||
with pytest.raises(IncorrectPlatformError):
|
with pytest.raises(IncorrectPlatformError):
|
||||||
linux.run("windows.enumerate.user")
|
linux.run("windows.enumerate.user")
|
||||||
|
|
||||||
|
|
||||||
def test_session_wrong_platform_windows(windows):
|
def test_session_wrong_platform_windows(windows):
|
||||||
""" Test that linux modules don't run on windows """
|
"""Test that linux modules don't run on windows"""
|
||||||
|
|
||||||
with pytest.raises(IncorrectPlatformError):
|
with pytest.raises(IncorrectPlatformError):
|
||||||
windows.run("linux.enumerate.user")
|
windows.run("linux.enumerate.user")
|
||||||
|
Loading…
Reference in New Issue
Block a user