add intial version of extended info

This commit is contained in:
Oran Nadler 2018-02-26 18:26:43 +02:00
parent f095639ad2
commit 6ed94293db
2 changed files with 80 additions and 3 deletions

View File

@ -14,3 +14,4 @@ ecdsa
netifaces netifaces
mock mock
nose nose
wmi

View File

@ -1,12 +1,26 @@
import os
import logging import logging
import traceback
from mimikatz_collector import MimikatzCollector import _winreg
from wmi import WMI
#from mimikatz_collector import MimikatzCollector
from . import InfoCollector from . import InfoCollector
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
__author__ = 'uri' __author__ = 'uri'
WMI_CLASSES = set(["Win32_OperatingSystem",
"Win32_ComputerSystem",
"Win32_GroupUser",
"Win32_LoggedOnUser",
"Win32_UserProfile",
"win32_UserAccount",
"Win32_Process",
"Win32_Product",
"Win32_Service"])
class WindowsInfoCollector(InfoCollector): class WindowsInfoCollector(InfoCollector):
""" """
@ -15,6 +29,7 @@ class WindowsInfoCollector(InfoCollector):
def __init__(self): def __init__(self):
super(WindowsInfoCollector, self).__init__() super(WindowsInfoCollector, self).__init__()
self.wmi = None
def get_info(self): def get_info(self):
""" """
@ -27,6 +42,67 @@ class WindowsInfoCollector(InfoCollector):
self.get_hostname() self.get_hostname()
self.get_process_list() self.get_process_list()
self.get_network_info() self.get_network_info()
mimikatz_collector = MimikatzCollector()
self.info["credentials"] = mimikatz_collector.get_logon_info() self.get_wmi_info()
self.get_reg_key(r"SYSTEM\CurrentControlSet\Control\Lsa")
self.get_installed_packages()
#mimikatz_collector = MimikatzCollector()
#self.info["credentials"] = mimikatz_collector.get_logon_info()
return self.info return self.info
def get_installed_packages(self):
self.info["installed_packages"] = os.popen("dism /online /get-packages").read()
self.info["installed_features"] = os.popen("dism /online /get-features").read()
def get_wmi_info(self):
for wmi_class_name in WMI_CLASSES:
self.info[wmi_class_name] = self.get_wmi_class(wmi_class_name)
def get_wmi_class(self, class_name):
if not self.wmi:
self.wmi = WMI()
try:
wmi_class = getattr(self.wmi, class_name)()
except:
LOG.error("Error getting wmi class '%s'" % (class_name, ))
LOG.error(traceback.format_exc())
return
result = []
for item in wmi_class:
row = {}
for prop in item.properties:
value = getattr(item, prop)
row[prop] = value
for method_name in item.methods:
if not method_name.startswith("GetOwner"):
continue
method = getattr(item, method_name)
try:
row[method_name[3:]] = method()
except:
LOG.error("Error running wmi method '%s'" % (method_name, ))
LOG.error(traceback.format_exc())
continue
result.append(row)
return result
def get_reg_key(self, subkey_path, store=_winreg.HKEY_LOCAL_MACHINE):
key = _winreg.ConnectRegistry(None, store)
subkey = _winreg.OpenKey(key, subkey_path)
self.info[subkey_path] = [_winreg.EnumValue(subkey, i) for i in xrange(_winreg.QueryInfoKey(subkey)[0])]
subkey.Close()
key.Close()