diff --git a/cme/modules/ldap-checker.py b/cme/modules/ldap-checker.py index a5b427fa0..bc505e761 100644 --- a/cme/modules/ldap-checker.py +++ b/cme/modules/ldap-checker.py @@ -3,9 +3,9 @@ import ldap3 import ssl -from msldap.commons.url import MSLDAPURLDecoder, MSLDAPClientConnection import asyncio - +from msldap.connection import MSLDAPClientConnection +from msldap.commons.factory import LDAPConnectionFactory class CMEModule: ''' @@ -70,7 +70,7 @@ def run_ldaps_noEPA(inputUser, inputPassword, dcTarget): async def run_ldaps_withEPA(inputUser, inputPassword, dcTarget): try: url = 'ldaps+ntlm-password://'+inputUser + ':' + inputPassword +'@' + dcTarget - conn_url = MSLDAPURLDecoder(url) + conn_url = LDAPConnectionFactory.from_url(url) ldaps_client = conn_url.get_client() ldapsClientConn = MSLDAPClientConnection(ldaps_client.target, ldaps_client.creds) _, err = await ldapsClientConn.connect() diff --git a/cme/protocols/rdp.py b/cme/protocols/rdp.py index 194a51adf..e736e4b51 100644 --- a/cme/protocols/rdp.py +++ b/cme/protocols/rdp.py @@ -6,26 +6,28 @@ from cme.connection import * from cme.helpers.logger import highlight from cme.logger import CMEAdapter + from aardwolf import logger -from aardwolf.commons.url import RDPConnectionURL +from aardwolf.commons.factory import RDPConnectionFactory +from aardwolf.commons.queuedata.constants import VIDEO_FORMAT from aardwolf.commons.iosettings import RDPIOSettings from aardwolf.protocol.x224.constants import SUPP_PROTOCOLS -from aardwolf.commons.queuedata.constants import MOUSEBUTTON, VIDEO_FORMAT logger.setLevel(logging.CRITICAL) rdp_error_status = { - '-1073741711': 'STATUS_PASSWORD_EXPIRED', - '-1073741260': 'STATUS_ACCOUNT_LOCKED_OUT', - '-1073741710' : 'STATUS_ACCOUNT_DISABLED', - '-1073741421' : 'STATUS_ACCOUNT_EXPIRED', - '-1073741714' : 'STATUS_ACCOUNT_RESTRICTION', - '-1073741713' : 'STATUS_INVALID_LOGON_HOURS', - '-1073741712' : 'STATUS_INVALID_WORKSTATION', - '-1073741477' : 'STATUS_LOGON_TYPE_NOT_GRANTED', - '-1073741276' : 'STATUS_PASSWORD_MUST_CHANGE', - '-1073741790' : 'STATUS_ACCESS_DENIED', - '-1073741715' : 'STATUS_LOGON_FAILURE' + '0xc0000071': 'STATUS_PASSWORD_EXPIRED', + '0xc0000234': 'STATUS_ACCOUNT_LOCKED_OUT', + '0xc0000072' : 'STATUS_ACCOUNT_DISABLED', + '0xc0000193' : 'STATUS_ACCOUNT_EXPIRED', + '0xc000006E' : 'STATUS_ACCOUNT_RESTRICTION', + '0xc000006F' : 'STATUS_INVALID_LOGON_HOURS', + '0xc0000070' : 'STATUS_INVALID_WORKSTATION', + '0xc000015B' : 'STATUS_LOGON_TYPE_NOT_GRANTED', + '0xc0000224' : 'STATUS_PASSWORD_MUST_CHANGE', + '0xc0000022' : 'STATUS_ACCESS_DENIED', + '0xc000006d' : 'STATUS_LOGON_FAILURE', + '0xc000006a' : 'STATUS_WRONG_PASSWORD ' } class rdp(connection): @@ -34,9 +36,11 @@ def __init__(self, args, db, host): self.domain = None self.server_os = None self.iosettings = RDPIOSettings() - self.iosettings.supported_protocols = "" - self.protoflags = self.protoflags = [SUPP_PROTOCOLS.RDP, SUPP_PROTOCOLS.SSL, SUPP_PROTOCOLS.SSL|SUPP_PROTOCOLS.RDP, SUPP_PROTOCOLS.SSL|SUPP_PROTOCOLS.HYBRID, SUPP_PROTOCOLS.SSL|SUPP_PROTOCOLS.HYBRID_EX] self.iosettings.channels = [] + self.iosettings.video_out_format = VIDEO_FORMAT.RAW + self.iosettings.clipboard_use_pyperclip = False + self.protoflags_nla = [SUPP_PROTOCOLS.SSL|SUPP_PROTOCOLS.RDP, SUPP_PROTOCOLS.SSL, SUPP_PROTOCOLS.RDP] + self.protoflags = [SUPP_PROTOCOLS.SSL|SUPP_PROTOCOLS.RDP, SUPP_PROTOCOLS.SSL, SUPP_PROTOCOLS.RDP, SUPP_PROTOCOLS.SSL|SUPP_PROTOCOLS.HYBRID, SUPP_PROTOCOLS.SSL|SUPP_PROTOCOLS.HYBRID_EX] width, height = args.res.upper().split('X') height = int(height) width = int(width) @@ -45,7 +49,6 @@ def __init__(self, args, db, host): self.iosettings.video_bpp_min = 15 #servers dont support 8 any more :/ self.iosettings.video_bpp_max = 32 self.iosettings.video_out_format = VIDEO_FORMAT.PNG #PIL produces incorrect picture for some reason?! TODO: check bug - self.iosettings.clipboard_use_pyperclip = False self.output_filename = None self.domain = None self.server_os = None @@ -63,6 +66,8 @@ def proto_args(parser, std_parser, module_parser): rdp_parser.add_argument("--continue-on-success", action='store_true', help="continues authentication attempts even after successes") rdp_parser.add_argument("--port", type=int, default=3389, help="Custom RDP port") rdp_parser.add_argument("--rdp-timeout", type=int, default=1, help="RDP timeout on socket connection") + rdp_parser.add_argument("--nla-screenshot", action="store_true", help="Screenshot RDP login prompt if NLA is disabled") + dgroup = rdp_parser.add_mutually_exclusive_group() dgroup.add_argument("-d", metavar="DOMAIN", dest='domain', type=str, default=None, help="domain to authenticate to") dgroup.add_argument("--local-auth", action='store_true', help='authenticate locally to each target') @@ -78,11 +83,12 @@ def proto_flow(self): if self.create_conn_obj(): self.proto_logger() self.print_host_info() - if self.login(): - if hasattr(self.args, 'module') and self.args.module: - self.call_modules() - else: - self.call_cmd_args() + self.login() + + if hasattr(self.args, 'module') and self.args.module: + self.call_modules() + else: + self.call_cmd_args() def proto_logger(self): self.logger = CMEAdapter(extra={'protocol': 'RDP', @@ -100,14 +106,12 @@ def print_host_info(self): self.nla)) def create_conn_obj(self): - - for proto in self.protoflags: + self.check_nla() + for proto in reversed(self.protoflags): try: self.iosettings.supported_protocols = proto - self .url = 'rdp+ntlm-password://FAKE\\user:pass@' + self.host + ':' + str(self.args.port) + self.url = 'rdp+ntlm-password://FAKE\\user:pass@' + self.host + ':' + str(self.args.port) asyncio.run(self.connect_rdp(self.url)) - if str(proto) == "SUPP_PROTOCOLS.RDP" or str(proto) == "SUPP_PROTOCOLS.SSL" or str(proto) == "SUPP_PROTOCOLS.SSL|SUPP_PROTOCOLS.RDP": - self.nla = False except OSError as e: if "Errno 104" not in str(e): return False @@ -132,9 +136,21 @@ def create_conn_obj(self): return True + def check_nla(self): + for proto in self.protoflags_nla: + try: + self.iosettings.supported_protocols = proto + self.url = 'rdp+ntlm-password://FAKE\\user:pass@' + self.host + ':' + str(self.args.port) + asyncio.run(self.connect_rdp(self.url)) + if str(proto) == "SUPP_PROTOCOLS.RDP" or str(proto) == "SUPP_PROTOCOLS.SSL" or str(proto) == "SUPP_PROTOCOLS.SSL|SUPP_PROTOCOLS.RDP": + self.nla = False + return + except: + pass + async def connect_rdp(self, url): - rdpurl = RDPConnectionURL(url) - self.conn = rdpurl.get_connection(self.iosettings) + connectionfactory = RDPConnectionFactory.from_url(url, self.iosettings) + self.conn = connectionfactory.create_connection_newtarget(self.hostname, self.iosettings) _, err = await self.conn.connect() if err is not None: raise err @@ -155,21 +171,29 @@ def plaintext_login(self, domain, username, password): return True except Exception as e: - reason = None - for word in rdp_error_status.keys(): - if word in str(e): - reason = rdp_error_status[word] - - self.logger.error(u'{}\\{}:{} {}'.format(domain, - username, - password, - '({})'.format(reason) if reason else ''), - color='magenta' if ((reason or "CredSSP" in str(e)) and reason != "STATUS_LOGON_FAILURE") else 'red') + if "Authentication failed!" in str(e): + self.logger.success(u'{}\\{}:{} {}'.format(domain, + username, + password, + highlight('({})'.format(self.config.get('CME', 'pwn3d_label')) if self.admin_privs else ''))) + else: + reason = None + for word in rdp_error_status.keys(): + if word in str(e): + reason = rdp_error_status[word] + if "cannot unpack non-iterable NoneType object" == str(e): + reason = "User valid but cannot connect" + self.logger.error(u'{}\\{}:{} {}'.format(domain, + username, + password, + '({})'.format(reason) if reason else ''), + color='magenta' if ((reason or "CredSSP" in str(e)) and reason != "STATUS_LOGON_FAILURE") else 'red') return False def hash_login(self, domain, username, ntlm_hash): try: self.url = 'rdp+ntlm-nt://' + domain + '\\' + username + ':' + ntlm_hash + '@' + self.host + ':' + str(self.args.port) + print(self.url) asyncio.run(self.connect_rdp(self.url)) self.admin_privs = True @@ -183,16 +207,24 @@ def hash_login(self, domain, username, ntlm_hash): return True except Exception as e: - reason = None - for word in rdp_error_status.keys(): - if word in str(e): - reason = rdp_error_status[word] - - self.logger.error(u'{}\\{}:{} {}'.format(domain, - username, - ntlm_hash, - '({})'.format(reason) if reason else ''), - color='magenta' if ((reason or "CredSSP" in str(e)) and reason != "STATUS_LOGON_FAILURE") else 'red') + if "Authentication failed!" in str(e): + self.logger.success(u'{}\\{}:{} {}'.format(domain, + username, + ntlm_hash, + highlight('({})'.format(self.config.get('CME', 'pwn3d_label')) if self.admin_privs else ''))) + else: + reason = None + for word in rdp_error_status.keys(): + if word in str(e): + reason = rdp_error_status[word] + if "cannot unpack non-iterable NoneType object" == str(e): + reason = "User valid but cannot connect" + + self.logger.error(u'{}\\{}:{} {}'.format(domain, + username, + ntlm_hash, + '({})'.format(reason) if reason else ''), + color='magenta' if ((reason or "CredSSP" in str(e)) and reason != "STATUS_LOGON_FAILURE") else 'red') return False @@ -209,3 +241,22 @@ async def screen(self): def screenshot(self): asyncio.run(self.screen()) + async def nla_screen(self): + # Otherwise it crash + self.iosettings.supported_protocols = None + + # Anonymous auth: https://github.com/skelsec/asyauth/pull/1 + self.url = 'rdp+simple-password://' + self.host + ':' + str(self.args.port) + + await self.connect_rdp(self.url) + await asyncio.sleep(int(self.args.screentime)) + + if self.conn is not None and self.conn.desktop_buffer_has_data is True: + buffer = self.conn.get_desktop_buffer(VIDEO_FORMAT.PIL) + filename = os.path.expanduser('~/.cme/screenshots/{}_{}_{}.png'.format(self.hostname, self.host, datetime.now().strftime("%Y-%m-%d_%H%M%S"))) + buffer.save(filename,'png') + self.logger.highlight("NLA Screenshot saved {}".format(filename)) + + def nla_screenshot(self): + if not self.nla: + asyncio.run(self.nla_screen()) diff --git a/poetry.lock b/poetry.lock index acd94afa3..5739b811e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,23 +1,30 @@ [[package]] name = "aardwolf" -version = "0.0.8" +version = "0.2.0" description = "Asynchronous RDP protocol implementation" category = "main" optional = false python-versions = ">=3.7" +develop = false [package.dependencies] -arc4 = ">=0.0.4" +arc4 = ">=0.3.0" asn1crypto = "*" asn1tools = "*" -asysocks = ">=0.1.7" +asyauth = ">=0.0.5" +asysocks = ">=0.2.2" colorama = "*" -minikerberos = ">=0.2.20" +minikerberos = ">=0.3.3" Pillow = ">=9.0.0" pyperclip = ">=1.8.2" tqdm = "*" -unicrypto = ">=0.0.4" -winsspi = ">=0.0.9" +unicrypto = ">=0.0.9" + +[package.source] +type = "git" +url = "https://github.com/skelsec/aardwolf.git" +reference = "main" +resolved_reference = "d239c84ba7d21eec2cb24b06fb3335e6e6f19984" [[package]] name = "aesedb" @@ -44,7 +51,7 @@ python-versions = ">=3.6" [[package]] name = "aiosmb" -version = "0.3.8" +version = "0.4.3" description = "Asynchronous SMB protocol implementation" category = "main" optional = false @@ -52,16 +59,16 @@ python-versions = ">=3.7" [package.dependencies] asn1crypto = "*" -asysocks = ">=0.1.7" +asyauth = ">=0.0.4" +asysocks = ">=0.2.2" colorama = "*" -minikerberos = ">=0.2.20" +minikerberos = ">=0.3.3" prompt-toolkit = ">=3.0.2" six = "*" tqdm = "*" -unicrypto = ">=0.0.5" +unicrypto = ">=0.0.9" wcwidth = "*" -winacl = ">=0.1.1" -winsspi = ">=0.0.9" +winacl = ">=0.1.5" [[package]] name = "aiowinreg" @@ -127,9 +134,23 @@ typed-ast = {version = ">=1.4.0,<2.0", markers = "implementation_name == \"cpyth typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} wrapt = ">=1.11,<2" +[[package]] +name = "asyauth" +version = "0.0.6" +description = "Unified authentication library" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +asn1crypto = ">=1.3.0" +asysocks = ">=0.2.2" +minikerberos = ">=0.3.3" +unicrypto = ">=0.0.9" + [[package]] name = "asysocks" -version = "0.2.1" +version = "0.2.2" description = "" category = "main" optional = false @@ -140,7 +161,7 @@ asn1crypto = "*" [[package]] name = "bcrypt" -version = "4.0.0" +version = "4.0.1" description = "Modern password hashing for your software and your servers" category = "main" optional = false @@ -208,7 +229,7 @@ beautifulsoup4 = "*" [[package]] name = "certifi" -version = "2022.6.15" +version = "2022.9.24" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -250,11 +271,11 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "colorama" -version = "0.4.5" +version = "0.4.6" description = "Cross-platform colored terminal text." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" [[package]] name = "commonmark" @@ -269,7 +290,7 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "cryptography" -version = "38.0.1" +version = "38.0.2" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false @@ -288,11 +309,11 @@ test = ["pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", [[package]] name = "dill" -version = "0.3.5.1" +version = "0.3.6" description = "serialize all of python" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +python-versions = ">=3.7" [package.extras] graph = ["objgraph (>=1.7.2)"] @@ -372,7 +393,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "idna" -version = "3.3" +version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false @@ -459,11 +480,11 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "lazy-object-proxy" -version = "1.7.1" +version = "1.8.0" description = "A fast and thorough lazy object proxy." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "ldap3" @@ -543,7 +564,7 @@ python-versions = ">=3.6" [[package]] name = "minikerberos" -version = "0.2.20" +version = "0.3.3" description = "Kerberos manipulation library in pure Python" category = "main" optional = false @@ -551,9 +572,9 @@ python-versions = ">=3.6" [package.dependencies] asn1crypto = ">=1.3.0" -asysocks = ">=0.0.11" +asysocks = ">=0.2.2" oscrypto = ">=1.2.1" -unicrypto = ">=0.0.4" +unicrypto = ">=0.0.9" [[package]] name = "msgpack" @@ -565,7 +586,7 @@ python-versions = "*" [[package]] name = "msldap" -version = "0.3.40" +version = "0.4.6" description = "Python library to play with MS LDAP" category = "main" optional = false @@ -573,14 +594,14 @@ python-versions = ">=3.7" [package.dependencies] asn1crypto = ">=1.3.0" -asysocks = ">=0.1.7" -minikerberos = ">=0.2.20" +asyauth = ">=0.0.5" +asysocks = ">=0.2.1" +minikerberos = ">=0.3.1" prompt-toolkit = ">=3.0.2" tqdm = "*" -unicrypto = ">=0.0.5" +unicrypto = ">=0.0.9" wcwidth = "*" -winacl = ">=0.1.2" -winsspi = {version = ">=0.0.9", markers = "platform_system == \"Windows\""} +winacl = ">=0.1.4" [[package]] name = "mypy-extensions" @@ -592,7 +613,7 @@ python-versions = "*" [[package]] name = "neo4j" -version = "4.4.7" +version = "4.4.8" description = "Neo4j Bolt driver for Python" category = "main" optional = false @@ -780,17 +801,17 @@ tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] [[package]] name = "pyopenssl" -version = "22.0.0" +version = "22.1.0" description = "Python wrapper module around the OpenSSL library" category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -cryptography = ">=35.0" +cryptography = ">=38.0.0,<39" [package.extras] -docs = ["sphinx", "sphinx-rtd-theme"] +docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] test = ["flaky", "pretend", "pytest (>=3.0.1)"] [[package]] @@ -831,25 +852,26 @@ credssp = ["requests-credssp (>=1.0.0,<2.0.0)"] [[package]] name = "pypykatz" -version = "0.5.7" +version = "0.6.2" description = "Python implementation of Mimikatz" category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -aesedb = ">=0.0.5" -aiosmb = ">=0.3.8" +aesedb = ">=0.1.0" +aiosmb = ">=0.4.2" aiowinreg = ">=0.0.7" minidump = ">=0.0.21" -minikerberos = ">=0.2.20" -msldap = ">=0.3.38" -unicrypto = ">=0.0.5" -winacl = ">=0.1.2" +minikerberos = ">=0.3.2" +msldap = ">=0.4.1" +tqdm = "*" +unicrypto = ">=0.0.9" +winacl = ">=0.1.5" [[package]] name = "pyspnego" -version = "0.6.0" +version = "0.6.2" description = "Windows Negotiate Authentication Client and Server" category = "main" optional = false @@ -864,7 +886,7 @@ kerberos = ["krb5 (>=0.3.0)", "gssapi (>=1.6.0)"] [[package]] name = "pytz" -version = "2022.2.1" +version = "2022.5" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -885,7 +907,7 @@ lxml = "*" [[package]] name = "regex" -version = "2022.8.17" +version = "2022.9.13" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -911,7 +933,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "12.5.1" +version = "12.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -927,7 +949,7 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] [[package]] name = "shiv" -version = "1.0.1" +version = "1.0.2" description = "A command line utility for building fully self contained Python zipapps." category = "dev" optional = false @@ -1011,7 +1033,7 @@ python-versions = ">=3.6" [[package]] name = "typing-extensions" -version = "4.3.0" +version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false @@ -1065,22 +1087,14 @@ watchdog = ["watchdog"] [[package]] name = "winacl" -version = "0.1.3" +version = "0.1.5" description = "ACL/ACE/Security Descriptor manipulation library in pure Python" category = "main" optional = false python-versions = ">=3.6" -[[package]] -name = "winsspi" -version = "0.0.10" -description = "Windows SSPI library in pure Python" -category = "main" -optional = false -python-versions = ">=3.6" - [package.dependencies] -minikerberos = ">=0.2.0" +cryptography = ">=38.0.1" [[package]] name = "wrapt" @@ -1100,38 +1114,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "zipp" -version = "3.8.1" +version = "3.10.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "1.1" python-versions = "^3.7.0" -content-hash = "73f72310ec450d49ec8fc624138b693c85005133b4df75f8526502d57e028399" +content-hash = "7e78ede92f627c7bdbec39dadf7778945fa58b88cc52229d4fc8069b08999236" [metadata.files] -aardwolf = [ - {file = "aardwolf-0.0.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56ea9f8b1664b0637f95f979c5ac101fce2396c9f83ec269303193c8cb539065"}, - {file = "aardwolf-0.0.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3d18f70a5c69c8393ffa13c1b0da8232038f77e874bb0cba1a6a75e54688d38"}, - {file = "aardwolf-0.0.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab8c73fa55377a611f1dfeb17a9fbbff15649055dbebc7c95a07fd439a482a1e"}, - {file = "aardwolf-0.0.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04a91de0adba6e6661e3a048fded1f13b6725941287726314e3858789d88d1a2"}, - {file = "aardwolf-0.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:f28e1bd32f59aea8a89ec2d075b2d4f15510c652502018466dd7154ea09538d4"}, - {file = "aardwolf-0.0.8.tar.gz", hash = "sha256:a65cf50fe2ebe6b57c889a3b2149ae5df8f12ef5715fd960cb1c985d494f1f49"}, -] +aardwolf = [] aesedb = [] aioconsole = [ {file = "aioconsole-0.3.3.tar.gz", hash = "sha256:47df42d9f8cc3995bbe032dd5f01d32cc5b06639e9078bb9b4e3c55b237f5e32"}, ] -aiosmb = [ - {file = "aiosmb-0.3.8-py3-none-any.whl", hash = "sha256:0e98390ba00fdc4190e698f184dfcf72b02b592cdfe9274e03cc7316ac4ee368"}, - {file = "aiosmb-0.3.8.tar.gz", hash = "sha256:0afa901093f0ad91d0b8421dec66c80bd2e9cb237a8da405984413a5d7475398"}, -] +aiosmb = [] aiowinreg = [ {file = "aiowinreg-0.0.7-py3-none-any.whl", hash = "sha256:6cd7f64ef002a7c6d7c27310db578fbc8992eeaca0936ebc56283d70c54573f2"}, {file = "aiowinreg-0.0.7.tar.gz", hash = "sha256:a191c039f9c0c1681e8fc3a3ce26c56e8026930624932106d7a1526d96c008dd"}, @@ -1147,6 +1151,7 @@ asn1crypto = [ ] asn1tools = [] astroid = [] +asyauth = [] asysocks = [] bcrypt = [] beautifulsoup4 = [ @@ -1162,10 +1167,7 @@ black = [ bs4 = [ {file = "bs4-0.0.1.tar.gz", hash = "sha256:36ecea1fd7cc5c0c6e4a1ff075df26d50da647b75376626cc186e2212886dd3a"}, ] -certifi = [ - {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, -] +certifi = [] cffi = [ {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, @@ -1237,19 +1239,13 @@ click = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] -colorama = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, -] +colorama = [] commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] cryptography = [] -dill = [ - {file = "dill-0.3.5.1-py2.py3-none-any.whl", hash = "sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302"}, - {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, -] +dill = [] diskcache = [ {file = "diskcache-5.4.0-py3-none-any.whl", hash = "sha256:af3ec6d7f167bbef7b6c33d9ee22f86d3e8f2dd7131eb7c4703d8d91ccdc0cc4"}, {file = "diskcache-5.4.0.tar.gz", hash = "sha256:8879eb8c9b4a2509a5e633d2008634fb2b0b35c2b36192d89655dbde02419644"}, @@ -1266,10 +1262,7 @@ flask = [] future = [ {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, ] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] +idna = [] impacket = [] importlib-metadata = [ {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"}, @@ -1287,45 +1280,7 @@ jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] -lazy-object-proxy = [ - {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb8c5fd1684d60a9902c60ebe276da1f2281a318ca16c1d0a96db28f62e9166b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a57d51ed2997e97f3b8e3500c984db50a554bb5db56c50b5dab1b41339b37e36"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd45683c3caddf83abbb1249b653a266e7069a09f486daa8863fb0e7496a9fdb"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8561da8b3dd22d696244d6d0d5330618c993a215070f473b699e00cf1f3f6443"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fccdf7c2c5821a8cbd0a9440a456f5050492f2270bd54e94360cac663398739b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win32.whl", hash = "sha256:898322f8d078f2654d275124a8dd19b079080ae977033b713f677afcfc88e2b9"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:85b232e791f2229a4f55840ed54706110c80c0a210d076eee093f2b2e33e1bfd"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:46ff647e76f106bb444b4533bb4153c7370cdf52efc62ccfc1a28bdb3cc95442"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f3bb77efe1367b2515f8cb4790a11cffae889148ad33adad07b9b55e0ab22c"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c19814163728941bb871240d45c4c30d33b8a2e85972c44d4e63dd7107faba44"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e40f2013d96d30217a51eeb1db28c9ac41e9d0ee915ef9d00da639c5b63f01a1"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2052837718516a94940867e16b1bb10edb069ab475c3ad84fd1e1a6dd2c0fcfc"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win32.whl", hash = "sha256:6a24357267aa976abab660b1d47a34aaf07259a0c3859a34e536f1ee6e76b5bb"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6aff3fe5de0831867092e017cf67e2750c6a1c7d88d84d2481bd84a2e019ec35"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a6e94c7b02641d1311228a102607ecd576f70734dc3d5e22610111aeacba8a0"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ce15276a1a14549d7e81c243b887293904ad2d94ad767f42df91e75fd7b5b6"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e368b7f7eac182a59ff1f81d5f3802161932a41dc1b1cc45c1f757dc876b5d2c"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ecbb350991d6434e1388bee761ece3260e5228952b1f0c46ffc800eb313ff42"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:553b0f0d8dbf21890dd66edd771f9b1b5f51bd912fa5f26de4449bfc5af5e029"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:c7a683c37a8a24f6428c28c561c80d5f4fd316ddcf0c7cab999b15ab3f5c5c69"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:df2631f9d67259dc9620d831384ed7732a198eb434eadf69aea95ad18c587a28"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07fa44286cda977bd4803b656ffc1c9b7e3bc7dff7d34263446aec8f8c96f88a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dca6244e4121c74cc20542c2ca39e5c4a5027c81d112bfb893cf0790f96f57e"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91ba172fc5b03978764d1df5144b4ba4ab13290d7bab7a50f12d8117f8630c38"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:043651b6cb706eee4f91854da4a089816a6606c1428fd391573ef8cb642ae4f7"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b9e89b87c707dd769c4ea91f7a31538888aad05c116a59820f28d59b3ebfe25a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:9d166602b525bf54ac994cf833c385bfcc341b364e3ee71e3bf5a1336e677b55"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f3953eb575b45480db6568306893f0bd9d8dfeeebd46812aa09ca9579595148"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dd7ed7429dbb6c494aa9bc4e09d94b778a3579be699f9d67da7e6804c422d3de"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ed0c2b380eb6248abdef3cd425fc52f0abd92d2b07ce26359fcbc399f636ad"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7096a5e0c1115ec82641afbdd70451a144558ea5cf564a896294e346eb611be1"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f769457a639403073968d118bc70110e7dce294688009f5c24ab78800ae56dc8"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:39b0e26725c5023757fc1ab2a89ef9d7ab23b84f9251e28f9cc114d5b59c1b09"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:2130db8ed69a48a3440103d4a520b89d8a9405f1b06e2cc81640509e8bf6548f"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61"}, - {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, -] +lazy-object-proxy = [] ldap3 = [ {file = "ldap3-2.9.1-py2.6.egg", hash = "sha256:5ab7febc00689181375de40c396dcad4f2659cd260fc5e94c508b6d77c17e9d5"}, {file = "ldap3-2.9.1-py2.7.egg", hash = "sha256:2bc966556fc4d4fa9f445a1c31dc484ee81d44a51ab0e2d0fd05b62cac75daa6"}, @@ -1461,10 +1416,7 @@ minidump = [ {file = "minidump-0.0.21-py3-none-any.whl", hash = "sha256:6a9d2152f76ae633c609e09b48b42f55bd5a6b65f920dbbec756e5d9134a6201"}, {file = "minidump-0.0.21.tar.gz", hash = "sha256:83d612afb6c57727ebf38aca433b550f83f9f8c7c3b6562ad2ab97071fd85f3a"}, ] -minikerberos = [ - {file = "minikerberos-0.2.20-py3-none-any.whl", hash = "sha256:3c383f67ebcf6f28105ed54f623a6a5c677a24e3f0c9ad69ed453f77e569d714"}, - {file = "minikerberos-0.2.20.tar.gz", hash = "sha256:789f802263fa1882f701b123f6eec048b45cd731bf1b528870005daf07402047"}, -] +minikerberos = [] msgpack = [ {file = "msgpack-1.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250"}, {file = "msgpack-1.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88"}, @@ -1677,10 +1629,7 @@ pynacl = [ {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, ] -pyopenssl = [ - {file = "pyOpenSSL-22.0.0-py2.py3-none-any.whl", hash = "sha256:ea252b38c87425b64116f808355e8da644ef9b07e429398bfece610f893ee2e0"}, - {file = "pyOpenSSL-22.0.0.tar.gz", hash = "sha256:660b1b1425aac4a1bea1d94168a85d99f0b3144c869dd4390d27629d0087f1bf"}, -] +pyopenssl = [] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, @@ -1692,10 +1641,7 @@ pypsrp = [ {file = "pypsrp-0.7.0-py3-none-any.whl", hash = "sha256:c0912096858ff8c53a3cf22cc46c3ce20e6ec5e2deade342088e87a81dbadac8"}, {file = "pypsrp-0.7.0.tar.gz", hash = "sha256:d7144ad7c798a4dcded20a71c712d63eb4bfb32debe62f3a98f01481384a5558"}, ] -pypykatz = [ - {file = "pypykatz-0.5.7-py3-none-any.whl", hash = "sha256:8e89673d76d893500ad323803619cb8bd70ebb577e40c68cea6be9d7478bb95e"}, - {file = "pypykatz-0.5.7.tar.gz", hash = "sha256:1be75b3fec6d447f1d214ef41db8a644957e7bfc98968d9db3938023351cc9d6"}, -] +pypykatz = [] pyspnego = [] pytz = [] pywerview = [ @@ -1708,10 +1654,7 @@ requests = [ {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, ] rich = [] -shiv = [ - {file = "shiv-1.0.1-py2.py3-none-any.whl", hash = "sha256:f66133c85c4bfad8e52ea9a163778e9ef4e21f57da9e3319656bf520d4276920"}, - {file = "shiv-1.0.1.tar.gz", hash = "sha256:ec16095a0565906536af7f5e57771e9ae7a061b646ed63ad66ebbc70c30f4d2a"}, -] +shiv = [] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -1762,10 +1705,7 @@ typed-ast = [ {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, ] -typing-extensions = [ - {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, - {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, -] +typing-extensions = [] unicrypto = [] urllib3 = [] wcwidth = [ @@ -1773,14 +1713,7 @@ wcwidth = [ {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, ] werkzeug = [] -winacl = [ - {file = "winacl-0.1.3-py3-none-any.whl", hash = "sha256:a0b76a327fd337d5ee707ccff95222e6b6ecaa6d887613a1c3d3437ce0be1d4d"}, - {file = "winacl-0.1.3.tar.gz", hash = "sha256:1bac567a9d21300082aa2246bb0f94a591fca8e218e163bab18df0e32eefea06"}, -] -winsspi = [ - {file = "winsspi-0.0.10-py3-none-any.whl", hash = "sha256:59b7c7595f91414528cfd80c6cfc77ec6f5e4e28185ebd6418f8368ddc7aca82"}, - {file = "winsspi-0.0.10.tar.gz", hash = "sha256:2f5a8d2c4b9f459144426909e26a74e550512e23b6cf9af52c2a00003c7c3fdb"}, -] +winacl = [] wrapt = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, diff --git a/pyproject.toml b/pyproject.toml index d7b9bc6b0..a6e1f7ade 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,11 +41,10 @@ xmltodict = "^0.12.0" terminaltables = "^3.1.0" aioconsole = "^0.3.3" pywerview = "^0.3.3" -minikerberos = "0.2.20" -aardwolf = "^0.0.8" +minikerberos = "0.3.3" +aardwolf = { git = "https://github.com/skelsec/aardwolf.git", branch = "main" } masky = "^0.1.1" - [tool.poetry.dev-dependencies] flake8 = "*" pylint = "*"