예제 #1
0
    def import_groups(self):
        print('Importing groups!')
        for groups in self.get_file('groups')['groups']:
            #pprint.pprint(groups)
            #input()
            try:
                ad_name = groups['Name'].rsplit('@', 1)[1]
                m = Group()
                m.ad_id = self.adn[ad_name]
                m.name = groups['Name'].split('@', 1)[0]
                m.objectSid = groups['Properties']['objectsid']
                m.description = groups['Properties'].get('description', None)

                self.db_session.add(m)
            except Exception as e:
                print(e)
                pprint.pprint(groups)
                input()
                continue
        self.db_session.commit()
예제 #2
0
    def import_groups(self):
        logger.debug('[BHIMPORT] Importing groups')
        meta = self.get_file('groups')['meta']
        total = meta['count']
        for groups in tqdm(self.get_file('groups')['groups'],
                           desc='Groups  ',
                           total=total,
                           disable=self.disable_print_progress):
            if self.debug is True:
                pretty(groups)
                input()

            try:
                if self.bloodhound_version == '2':
                    ad_name = groups['Name'].rsplit('@', 1)[1]
                    m = Group()
                    m.ad_id = self.adn[ad_name]
                    m.name = groups['Name'].split('@', 1)[0]
                    m.sAMAccountName = m.name

                    m.objectSid, _, m.oid, is_domainsid = self.breakup_groupsid(
                        groups['Properties']['objectsid'], m.ad_id)
                    if is_domainsid is False:
                        print('localgroup! %s' % m.oid)
                    m.description = groups['Properties'].get(
                        'description', None)
                    m.adminCount = groups['Properties'].get('admincount')

                    if groups['Properties'].get('highvalue') is True:
                        hvt = ADObjProps(self.graphid, m.objectSid, 'HVT')
                        self.db_session.add(hvt)

                else:
                    ad_name = groups['Properties']['name'].rsplit('@', 1)[1]
                    m = Group()
                    m.ad_id = self.adn[ad_name]
                    m.name = groups['Properties']['name'].split('@', 1)[0]
                    m.sAMAccountName = m.name

                    m.objectSid, _, m.oid, is_domainsid = self.breakup_groupsid(
                        groups['ObjectIdentifier'], m.ad_id)
                    if is_domainsid is False:
                        print('localgroup! %s' % m.oid)
                    m.description = groups['Properties'].get(
                        'description', None)
                    m.dn = groups['Properties'].get('distinguishedname')
                    m.adminCount = groups['Properties'].get('admincount')

                    if groups['Properties'].get('highvalue') is True:
                        hvt = ADObjProps(self.graphid, m.objectSid, 'HVT')
                        self.db_session.add(hvt)

                self.db_session.add(m)
                edgeinfo = EdgeLookup(m.ad_id, m.objectSid, 'group')
                self.db_session.add(edgeinfo)

                if self.bloodhound_version == '2':
                    for item in groups['Members']:
                        q_ad_name = groups['Name'].rsplit('@', 1)[1]
                        q_ad_id = self.adn[q_ad_name]
                        q_groupname = groups['Name'].split('@', 1)[0]
                        res = self.db_session.query(Group).filter_by(
                            name=q_groupname).filter(
                                Group.ad_id == q_ad_id).first()
                        if res is None:
                            raise Exception('Group not found ! %s ' %
                                            groups['Name'])
                        self.add_edge(
                            res.objectSid,
                            BHImport.member_type_lookup(item['MemberType']),
                            m.oid, 'group', 'member', self.adn[ad_name])

                else:
                    for item in groups['Members']:
                        self.add_edge(
                            item['MemberId'],
                            BHImport.member_type_lookup(item['MemberType']),
                            m.oid, 'group', 'member', self.adn[ad_name])

                if groups['Aces'] is not None:
                    self.insert_acl(m.oid, 'group', groups['Aces'], m.ad_id)

            except Exception as e:
                logger.debug(
                    '[BHIMPORT] Error while processing group %s Reason: %s' %
                    (groups, e))
                continue

        self.db_session.commit()