def do_creds(user, command): if "-add " in command: p = re.compile(r"-domain=([^\s]*)") domain = re.search(p, command) if domain: domain = domain.group(1) p = re.compile(r"-username=([^\s]*)") username = re.search(p, command) if username: username = username.group(1) p = re.compile(r"-password=([^\s]*)") password = re.search(p, command) if password: password = password.group(1) else: p = re.compile(r"-password=([^\s]*)") password = re.search(p, command) if password: password = password.group(1) p = re.compile(r"-hash=([^\s]*)") hash = re.search(p, command) if hash: hash = hash.group(1) if not domain or not username: print_bad("Please specify a domain and username") return if password and hash: print_bad("Please specify a password or a hash, but not both") return if not password and not hash: print_bad("Please specify either a password or a hash") return insert_cred(domain, username, password, hash) print_good("Credential added successfully") return elif "-search " in command: username = command.replace("creds ", "") username = username.replace("-search ", "") username = username.strip() creds, hashes = parse_creds(get_creds_for_user(username)) print_good("Credentials Compromised: \n%s\nHashes Compromised: \n%s" % (creds, hashes)) return else: creds, hashes = parse_creds(get_creds()) print_good( "\nCredentials Compromised: \n%s\nHashes Compromised: \n%s" % (creds, hashes))
def process_mimikatz(lines): # code source https://github.com/stufus/parse-mimikatz-log/blob/master/pml.py main_count = 0 current = {} for line in lines.split('\n'): main_count += 1 val = re.match(r'^\s*\*\s+Username\s+:\s+(.+)\s*$', line.strip()) if val is not None: current = {} current['Username'] = val.group(1).strip() if current['Username'] == '(null)': current['Username'] = None continue val = re.match(r'^\s*\*\s+Domain\s+:\s+(.+)\s*$', line.strip()) if val is not None: current['Domain'] = val.group(1).strip() if current['Domain'] == '(null)': current['Domain'] = None continue val = re.match(r'^\s*\*\s+(NTLM|Password)\s+:\s+(.+)\s*$', line.strip()) if val is not None and "Username" in current and "Domain" in current: if val.group(2).count(" ") < 10: current[val.group(1).strip()] = val.group(2) if val.group(1) == "Password": if val.group(2) == '(null)': continue insert_cred(current['Domain'], current['Username'], current['Password'], None) elif val.group(1) == "NTLM": if val.group(2) == '(null)': continue insert_cred(current['Domain'], current['Username'], None, current['NTLM'])