Merge branch 'master' into cme_db_detailed
commit
c005d844e0
|
@ -120,6 +120,7 @@ class DatabaseNavigator(cmd.Cmd):
|
|||
filename = line[2]
|
||||
|
||||
if line[1].lower() == 'simple':
|
||||
|
||||
self.write_csv(filename,csv_header,shares)
|
||||
|
||||
|
||||
|
@ -155,9 +156,11 @@ class DatabaseNavigator(cmd.Cmd):
|
|||
|
||||
self.write_csv(filename,csv_header,formattedShares)
|
||||
|
||||
|
||||
#Format is domain\user
|
||||
#prettyuser = f"{self.db.get_users(userid)[0][1]}\{self.db.get_users(userid)[0][2]}"
|
||||
|
||||
|
||||
#Format is hostname
|
||||
#prettyhost = f"{}"
|
||||
|
||||
|
@ -168,6 +171,7 @@ class DatabaseNavigator(cmd.Cmd):
|
|||
elif line[0].lower() == 'local_admins':
|
||||
if len(line) < 3:
|
||||
print("[-] invalid arguments, export local_admins <simple|detailed> <filename>")
|
||||
|
||||
return
|
||||
|
||||
# These Values don't change between simple and detailed
|
||||
|
|
|
@ -148,13 +148,16 @@ class CMEModule:
|
|||
if RECORD_TYPE_MAPPING[dr['Type']] == "A":
|
||||
if dr['Type'] == 1:
|
||||
address = DNS_RPC_RECORD_A(dr['Data'])
|
||||
outdata.append({'name':recordname, 'type': RECORD_TYPE_MAPPING[dr['Type']], 'value': address.formatCanonical()})
|
||||
if str(recordname) != 'DomainDnsZones' and str(recordname) != 'ForestDnsZones':
|
||||
outdata.append({'name':recordname, 'type': RECORD_TYPE_MAPPING[dr['Type']], 'value': address.formatCanonical()})
|
||||
if dr['Type'] in [a for a in RECORD_TYPE_MAPPING if RECORD_TYPE_MAPPING[a] in ['CNAME', 'NS', 'PTR']]:
|
||||
address = DNS_RPC_RECORD_NODE_NAME(dr['Data'])
|
||||
outdata.append({'name':recordname, 'type':RECORD_TYPE_MAPPING[dr['Type']], 'value': address[list(address.fields)[0]].toFqdn()})
|
||||
if str(recordname) != 'DomainDnsZones' and str(recordname) != 'ForestDnsZones':
|
||||
outdata.append({'name':recordname, 'type':RECORD_TYPE_MAPPING[dr['Type']], 'value': address[list(address.fields)[0]].toFqdn()})
|
||||
elif dr['Type'] == 28:
|
||||
address = DNS_RPC_RECORD_AAAA(dr['Data'])
|
||||
outdata.append({'name':recordname, 'type':RECORD_TYPE_MAPPING[dr['Type']], 'value': address.formatCanonical()})
|
||||
if str(recordname) != 'DomainDnsZones' and str(recordname) != 'ForestDnsZones':
|
||||
outdata.append({'name':recordname, 'type':RECORD_TYPE_MAPPING[dr['Type']], 'value': address.formatCanonical()})
|
||||
|
||||
context.log.highlight('Found %d records' % len(outdata))
|
||||
path = os.path.expanduser('~/.cme/logs/{}_network_{}.log'.format(connection.domain, datetime.now().strftime("%Y-%m-%d_%H%M%S")))
|
||||
|
|
|
@ -504,6 +504,8 @@ class smb(connection):
|
|||
self.conn = SMBConnection(self.host, self.host, None, self.args.port, timeout=self.args.smb_timeout)
|
||||
self.smbv1 = False
|
||||
except socket.error:
|
||||
if str(e).find('Too many open files') != -1:
|
||||
self.logger.error('SMBv3 connection error on {}: {}'.format(self.host, e))
|
||||
return False
|
||||
except (Exception, NetBIOSTimeout) as e:
|
||||
logging.debug('Error creating SMBv3 connection to {}: {}'.format(self.host, e))
|
||||
|
@ -628,7 +630,7 @@ class smb(connection):
|
|||
|
||||
def shares(self):
|
||||
temp_dir = ntpath.normpath("\\" + gen_random_string())
|
||||
computer_id = self.db.get_computers(filterTerm=self.host)[0][0]
|
||||
#computer_id = self.db.get_computers(filterTerm=self.host)[0][0]
|
||||
try:
|
||||
user_id = self.db.get_user(
|
||||
self.domain.split('.')[0].upper(),
|
||||
|
@ -664,7 +666,7 @@ class smb(connection):
|
|||
|
||||
if share_name != "IPC$":
|
||||
try:
|
||||
self.db.add_share(computer_id, user_id, share_name, share_remark, read, write)
|
||||
self.db.add_share(self.hostname, user_id, share_name, share_remark, read, write)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
|
|
@ -66,13 +66,12 @@ class database:
|
|||
|
||||
db_conn.execute('''CREATE TABLE "shares" (
|
||||
"id" integer PRIMARY KEY,
|
||||
"computerid" integer,
|
||||
"computerid" text,
|
||||
"userid" integer,
|
||||
"name" text,
|
||||
"remark" text,
|
||||
"read" boolean,
|
||||
"write" boolean,
|
||||
FOREIGN KEY(computerid) REFERENCES computers(id),
|
||||
FOREIGN KEY(userid) REFERENCES users(id)
|
||||
UNIQUE(computerid, userid, name)
|
||||
)''')
|
||||
|
|
|
@ -67,7 +67,7 @@ class navigator(DatabaseNavigator):
|
|||
|
||||
def display_shares(self, shares):
|
||||
|
||||
data = [["ShareID", "Name", "Remark", "Read Access", "Write Access"]]
|
||||
data = [["ShareID", "computer", "Name", "Remark", "Read Access", "Write Access"]]
|
||||
|
||||
for share in shares:
|
||||
|
||||
|
@ -88,7 +88,7 @@ class navigator(DatabaseNavigator):
|
|||
permissions='w'
|
||||
)
|
||||
|
||||
data.append([shareID, name, remark, f"{len(users_r_access)} User(s)", f"{len(users_w_access)} Users"])
|
||||
data.append([shareID, computerid, name, remark, f"{len(users_r_access)} User(s)", f"{len(users_w_access)} Users"])
|
||||
|
||||
self.print_table(data)
|
||||
|
||||
|
|
Loading…
Reference in New Issue