Skip to content
This repository has been archived by the owner on Dec 6, 2023. It is now read-only.

Added sorting of LAPS computers output (easier to read) #540

Merged
merged 1 commit into from
Feb 27, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 17 additions & 15 deletions cme/modules/laps.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from impacket.ldap import ldapasn1 as ldapasn1_impacket


class CMEModule:
'''
Module by technobro refactored by @mpgn (now compatible with LDAP protocol + filter by computer)
Expand All @@ -23,26 +24,27 @@ def options(self, context, module_options):
COMPUTER Computer name or wildcard ex: WIN-S10, WIN-* etc. Default: *
"""

self.computer = "*"
self.computer = None
if 'COMPUTER' in module_options:
self.computer = module_options['COMPUTER']

def on_login(self, context, connection):

context.log.info('Getting LAPS Passwords')

searchFilter = '(&(objectCategory=computer)(ms-MCS-AdmPwd=*)(name='+ self.computer +'))'
attributes = ['ms-MCS-AdmPwd','samAccountname']
result = connection.search(searchFilter, attributes, 10000)

for item in result:
if isinstance(item, ldapasn1_impacket.SearchResultEntry) is not True:
continue
if self.computer is not None:
searchFilter = '(&(objectCategory=computer)(ms-MCS-AdmPwd=*)(name=' + self.computer + '))'
else:
searchFilter = '(&(objectCategory=computer)(ms-MCS-AdmPwd=*))'
attributes = ['ms-MCS-AdmPwd', 'sAMAccountName']
results = connection.search(searchFilter, attributes, 10000)
results = [r for r in results if isinstance(r, ldapasn1_impacket.SearchResultEntry)]

laps_computers = []
for computer in results:
msMCSAdmPwd = ''
sAMAccountName = ''
for computer in item['attributes']:
if str(computer['type']) == "sAMAccountName":
sAMAccountName = str(computer['vals'][0])
else:
msMCSAdmPwd = str(computer['vals'][0])
values = {str(attr['type']).lower(): str(attr['vals'][0]) for attr in computer['attributes']}
laps_computers.append((values['samaccountname'], values['ms-mcs-admpwd']))

laps_computers = sorted(laps_computers, key=lambda x: x[0])
for sAMAccountName, msMCSAdmPwd in laps_computers:
context.log.highlight("Computer: {:<20} Password: {}".format(sAMAccountName, msMCSAdmPwd))