From e4dfc53795aefa3fd4ab491076992cb6340a49d8 Mon Sep 17 00:00:00 2001 From: p0dalirius Date: Wed, 6 Oct 2021 14:56:57 +0200 Subject: [PATCH] FindUncommonShares.py version 1.0 --- .github/FUNDING.yml | 4 ++ .github/example.png | Bin 0 -> 51634 bytes FindUncommonShares.py | 148 ++++++++++++++++++++++++++++++++++++++++++ README.md | 70 +++++++++++++++++++- 4 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 .github/FUNDING.yml create mode 100644 .github/example.png create mode 100644 FindUncommonShares.py diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..36c22d8 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms + +github: p0dalirius +patreon: Podalirius \ No newline at end of file diff --git a/.github/example.png b/.github/example.png new file mode 100644 index 0000000000000000000000000000000000000000..9c335723f3e64cbdc2917618ac6d6a580362af92 GIT binary patch literal 51634 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 ZCB=}_YsT{+>idwXDrr3^z4z$Ze*y3U>RJE* literal 0 HcmV?d00001 diff --git a/FindUncommonShares.py b/FindUncommonShares.py new file mode 100644 index 0000000..2372d00 --- /dev/null +++ b/FindUncommonShares.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python +# Impacket - Collection of Python classes for working with network protocols. +# +# SECUREAUTH LABS. Copyright (C) 2021 SecureAuth Corporation. All rights reserved. +# +# This software is provided under a slightly modified version +# of the Apache Software License. See the accompanying LICENSE file +# for more information. +# +# Description: +# Find uncommon SMB shares on remote machines +# +# Author: +# Remi GASCOU (@podalirius_) +# + + +import argparse +import sys +import traceback +import logging +from impacket import version +from impacket.examples import logger, utils +from impacket.smbconnection import SMBConnection, SMB2_DIALECT_002, SMB2_DIALECT_21, SMB_DIALECT, SessionError + +COMMON_SHARES = [ + "ADMIN$", "IPC$", "C$", "NETLOGON", "SYSVOL" +] + +def parse_args(): + parser = argparse.ArgumentParser(add_help=True, description='Find uncommon SMB shares on remote machines') + parser.add_argument('target', action='store', help='[[domain/]username[:password]@]') + parser.add_argument('-ts', action='store_true', help='Adds timestamp to every logging output') + parser.add_argument('-debug', action='store_true', help='Turn DEBUG output ON') + + group = parser.add_argument_group('authentication') + group.add_argument('-hashes', action="store", metavar="LMHASH:NTHASH", help='NTLM hashes, format is LMHASH:NTHASH') + group.add_argument('-no-pass', action="store_true", help='don\'t ask for password (useful for -k)') + group.add_argument('-k', action="store_true", + help='Use Kerberos authentication. Grabs credentials from ccache file ' + '(KRB5CCNAME) based on target parameters. If valid credentials ' + 'cannot be found, it will use the ones specified in the command ' + 'line') + group.add_argument('-aesKey', action="store", metavar="hex key", help='AES key to use for Kerberos Authentication ' + '(128 or 256 bits)') + + group = parser.add_argument_group('connection') + + group.add_argument('-dc-ip', action='store', metavar="ip address", + help='IP Address of the domain controller. If omitted it will use the domain part (FQDN) specified in ' + 'the target parameter') + group.add_argument('-target-ip', action='store', metavar="ip address", + help='IP Address of the target machine. If omitted it will use whatever was specified as target. ' + 'This is useful when target is the NetBIOS name and you cannot resolve it') + group.add_argument('-port', choices=['139', '445'], nargs='?', default='445', metavar="destination port", + help='Destination port to connect to SMB Server') + if len(sys.argv) == 1: + parser.print_help() + sys.exit(1) + + return parser.parse_args() + + +def parse_target(args): + domain, username, password, address = utils.parse_target(args.target) + + if args.target_ip is None: + args.target_ip = address + + if domain is None: + domain = '' + + if password == '' and username != '' and args.hashes is None and args.no_pass is False and args.aesKey is None: + from getpass import getpass + + password = getpass("Password:") + + if args.aesKey is not None: + args.k = True + + if args.hashes is not None: + lmhash, nthash = args.hashes.split(':') + else: + lmhash = '' + nthash = '' + + return domain, username, password, address, lmhash, nthash + + +def init_logger(args): + # Init the example's logger theme and debug level + logger.init(args.ts) + if args.debug is True: + logging.getLogger().setLevel(logging.DEBUG) + # Print the Library's installation path + logging.debug(version.getInstallationPath()) + else: + logging.getLogger().setLevel(logging.INFO) + logging.getLogger('impacket.smbserver').setLevel(logging.ERROR) + + +def init_smb_session(args, domain, username, password, address, lmhash, nthash): + smbClient = SMBConnection(address, args.target_ip, sess_port=int(args.port)) + dialect = smbClient.getDialect() + if dialect == SMB_DIALECT: + logging.debug("SMBv1 dialect used") + elif dialect == SMB2_DIALECT_002: + logging.debug("SMBv2.0 dialect used") + elif dialect == SMB2_DIALECT_21: + logging.debug("SMBv2.1 dialect used") + else: + logging.debug("SMBv3.0 dialect used") + if args.k is True: + smbClient.kerberosLogin(username, password, domain, lmhash, nthash, args.aesKey, args.dc_ip) + else: + smbClient.login(username, password, domain, lmhash, nthash) + if smbClient.isGuestSession() > 0: + logging.debug("GUEST Session Granted") + else: + logging.debug("USER Session Granted") + return smbClient + + +if __name__ == '__main__': + print(version.BANNER) + args = parse_args() + init_logger(args) + + domain, username, password, address, lmhash, nthash = parse_target(args) + try: + smbClient = init_smb_session(args, domain, username, password, address, lmhash, nthash) + + resp = smbClient.listShares() + found_uncommon_shares = False + for share in resp: + sharename = share['shi1_netname'][:-1] + if sharename not in COMMON_SHARES: + if not found_uncommon_shares: + print("[>] Found uncommon shares!") + found_uncommon_shares = True + print(" - '%s'" % sharename) + if found_uncommon_shares == False: + logging.error("No uncommon shares found.") + + except Exception as e: + if logging.getLogger().level == logging.DEBUG: + traceback.print_exc() + logging.error(str(e)) diff --git a/README.md b/README.md index 121e83c..fb1e4d3 100644 --- a/README.md +++ b/README.md @@ -1 +1,69 @@ -# FindUncommonShares \ No newline at end of file +# FindUncommonShares + +![](.github/example.png) + +The script [FindUncommonShares.py](https://github.com/p0dalirius/FindUncommonShares/FindUncommonShares.py) is a Python equivalent of [PowerView](https://github.com/darkoperator/Veil-PowerView/)'s [Invoke-ShareFinder.ps1](https://github.com/darkoperator/Veil-PowerView/blob/master/PowerView/functions/Invoke-ShareFinder.ps1) + +## Usage + +``` +$ ./FindUncommonShares.py +Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation + +usage: FindUncommonShares.py [-h] [-xmlfile XMLFILE] [-share SHARE] + [-base-dir BASE_DIR] [-ts] [-debug] + [-hashes LMHASH:NTHASH] [-no-pass] [-k] + [-aesKey hex key] [-dc-ip ip address] + [-target-ip ip address] + [-port [destination port]] + target + +Find uncommon SMB shares on remote machines + +positional arguments: + target [[domain/]username[:password]@] + +optional arguments: + -h, --help show this help message and exit + -ts Adds timestamp to every logging output + -debug Turn DEBUG output ON + +authentication: + -hashes LMHASH:NTHASH + NTLM hashes, format is LMHASH:NTHASH + -no-pass don't ask for password (useful for -k) + -k Use Kerberos authentication. Grabs credentials from + ccache file (KRB5CCNAME) based on target parameters. + If valid credentials cannot be found, it will use the + ones specified in the command line + -aesKey hex key AES key to use for Kerberos Authentication (128 or 256 + bits) + +connection: + -dc-ip ip address IP Address of the domain controller. If omitted it + will use the domain part (FQDN) specified in the + target parameter + -target-ip ip address + IP Address of the target machine. If omitted it will + use whatever was specified as target. This is useful + when target is the NetBIOS name and you cannot resolve + it + -port [destination port] + Destination port to connect to SMB Server +``` + +## Examples : + +``` +[]$ ./FindUncommonShares.py 'LAB.local/user1:PR123!@192.168.2.1' +Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation + +[>] Found uncommon shares! + - 'Users' + - 'WeirdShare' +[]$ +``` + +## Credits + + - Feature suggested in [impacket issue #1176](https://github.com/SecureAuthCorp/impacket/issues/1176) by [@CaledoniaProject](https://github.com/CaledoniaProject) \ No newline at end of file