Exemple #1
0
def export(table, db=None, valid=False, limit=None, path=None, format='csv', show=False):
    """
    OneForAll数据库导出模块

    Example:
        python3 dbexport.py --table name --format csv --dir= ./result.csv
        python3 dbexport.py --db result.db --table name --show False

    Note:
        参数format可选格式有'txt', 'rst', 'csv', 'tsv', 'json', 'yaml', 'html',
                          'jira', 'xls', 'xlsx', 'dbf', 'latex', 'ods'
        参数path默认None使用OneForAll结果目录自动生成路径

    :param str table:   要导出的表
    :param str db:      要导出的数据库路径(默认为results/result.sqlite3)
    :param bool valid:  只导出有效的子域结果(默认False)
    :param str limit:   导出限制条件(默认None)
    :param str format:  导出文件格式(默认csv)
    :param str path:    导出文件路径(默认None)
    :param bool show:   终端显示导出数据(默认False)
    """

    database = Database(db)
    rows = database.export_data(table, valid, limit)
    format = utils.check_format(format, len(rows))
    path = utils.check_path(path, table, format)
    if show:
        print(rows.dataset)
    data = rows.export(format)
    database.close()
    utils.save_data(path, data)
    logger.log('INFOR', f'{table}主域的子域结果 {path}')
    data_dict = rows.as_dict()
    return data_dict
    def run(self):
        start = time.time()
        logger.log('INFOR', f'开始执行{self.source}模块')
        self.subdomains = utils.get_domains(self.target)
        self.format = utils.check_format(self.format, len(self.subdomains))
        timestamp = utils.get_timestamp()
        name = f'takeover_check_result_{timestamp}'
        self.path = utils.check_path(self.path, name, self.format)
        if self.subdomains:
            logger.log('INFOR', f'正在检查子域接管风险')
            self.fingerprints = get_fingerprint()
            self.results.headers = ['subdomain', 'cname']
            # 创建待检查的子域队列
            for domain in self.subdomains:
                self.subdomainq.put(domain)
            # 检查线程
            for _ in range(self.thread):
                check_thread = Thread(target=self.check, daemon=True)
                check_thread.start()
            # 进度线程
            progress_thread = Thread(target=self.progress, daemon=True)
            progress_thread.start()

            self.subdomainq.join()
            self.save()
        else:
            logger.log('FATAL', f'获取域名失败')
        end = time.time()
        elapse = round(end - start, 1)
        logger.log(
            'INFOR', f'{self.source}模块耗时{elapse}秒'
            f'发现{len(self.results)}个子域存在接管风险')
        logger.log('INFOR', f'子域接管风险检查结果 {self.path}')
        logger.log('INFOR', f'结束执行{self.source}模块')
Exemple #3
0
def export(table, db=None, valid=None, dpath=None, format='csv', show=False):
    """
    OneForAll数据库导出模块

    Example:
        python3 dbexport.py --table name --format csv --dir= ./result.csv
        python3 dbexport.py --db result.db --table name --show False

    Note:
        参数port可选值有'small', 'medium', 'large', 'xlarge',详见config.py配置
        参数format可选格式有'txt', 'rst', 'csv', 'tsv', 'json', 'yaml', 'html',
                          'jira', 'xls', 'xlsx', 'dbf', 'latex', 'ods'
        参数dpath为None默认使用OneForAll结果目录

    :param str table:   要导出的表
    :param str db:      要导出的数据库路径(默认为results/result.sqlite3)
    :param int valid:   导出子域的有效性(默认None)
    :param str format:  导出格式(默认csv)
    :param str dpath:    导出目录(默认None)
    :param bool show:   终端显示导出数据(默认False)
    """
    format = utils.check_format(format)
    dpath = utils.check_dpath(dpath)
    database = Database(db)
    rows = database.export_data(table, valid)  # 意外情况导出全部子域
    if show:
        print(rows.dataset)
    if format == 'txt':
        data = str(rows.dataset)
    else:
        data = rows.export(format)
    database.close()
    fpath = dpath.joinpath(f'{table}_subdomain.{format}')
    utils.save_data(fpath, data)
Exemple #4
0
def export(table, db=None, valid=None, path=None, format='csv', show=False):
    """
    OneForAll数据库导出模块

    Example:
        python3 dbexport.py --table name --format csv --dir= ./result.csv
        python3 dbexport.py --db result.db --table name --show False

    Note:
        参数port可选值有'small', 'medium', 'large', 'xlarge',详见config.py配置
        参数format可选格式有'txt', 'rst', 'csv', 'tsv', 'json', 'yaml', 'html',
                          'jira', 'xls', 'xlsx', 'dbf', 'latex', 'ods'
        参数path默认None使用OneForAll结果目录生成路径

    :param str table:   要导出的表
    :param str db:      要导出的数据库路径(默认为results/result.sqlite3)
    :param int valid:   导出子域的有效性(默认None)
    :param str format:  导出文件格式(默认csv)
    :param str path:    导出文件路径(默认None)
    :param bool show:   终端显示导出数据(默认False)
    """

    database = Database(db)
    rows = database.export_data(table, valid)
    format = utils.check_format(format, len(rows))
    path = utils.check_path(path, table, format)
    if show:
        print(rows.dataset)
    if format == 'txt':
        data = str(rows.dataset)
    else:
        data = rows.export(format)
    database.close()
    utils.save_data(path, data)
Exemple #5
0
    def run(self):
        start = time.time()
        logger.log('INFOR', f'Start running {self.source} module')
        self.subdomains = utils.get_domains(self.target)
        self.format = utils.check_format(self.format, len(self.subdomains))
        timestamp = utils.get_timestamp()
        name = f'takeover_check_result_{timestamp}'
        self.path = utils.check_path(self.path, name, self.format)
        if self.subdomains:
            logger.log('INFOR', f'Checking subdomain takeover')
            self.fingerprints = get_fingerprint()
            self.results.headers = ['subdomain', 'cname']
            # 创建待检查的子域队列
            for domain in self.subdomains:
                self.subdomainq.put(domain)
            # 检查线程
            for _ in range(self.thread):
                check_thread = Thread(target=self.check, daemon=True)
                check_thread.start()
            # 进度线程
            progress_thread = Thread(target=self.progress, daemon=True)
            progress_thread.start()

            self.subdomainq.join()
            self.save()
        else:
            logger.log('FATAL', f'Failed to obtain domain')
        end = time.time()
        elapse = round(end - start, 1)
        logger.log(
            'INFOR', f'{self.source} module takes {elapse} seconds, '
            f'There are {len(self.results)} subdomains exists takeover')
        logger.log('INFOR', f'Subdomain takeover results: {self.path}')
        logger.log('INFOR', f'Finished {self.source} module')
Exemple #6
0
 def run(self):
     start = time.time()
     logger.log('INFOR', f'正在检查子域接管风险')
     self.format = utils.check_format(self.format)
     self.dpath = utils.check_dpath(self.dpath)
     self.subdomains = utils.get_domains(self.target)
     if self.subdomains:
         self.fingerprints = get_fingerprint()
         self.results.headers = ['subdomain', 'cname']
         for domain in self.subdomains:
             self.domainq.put(domain)
         threads = []
         for _ in range(self.thread):
             thread = Thread(target=self.check, daemon=True)
             thread.start()
             threads.append(thread)
         for thread in threads:
             thread.join()
         self.save()
     else:
         logger.log('FATAL', f'获取域名失败')
     end = time.time()
     elapsed = round(end - start, 1)
     logger.log(
         'INFOR', f'{self.source}模块耗时{elapsed}秒'
         f'发现{len(self.results)}个子域存在接管风险')
Exemple #7
0
def do_export(fmt, path, rows, show, domain, target):
    fmt = utils.check_format(fmt)
    path = utils.check_path(path, target, fmt)
    if show:
        print(rows.dataset)
    data = rows.export(fmt)
    utils.save_to_file(path, data)
    logger.log('ALERT', f'The subdomain result for {domain}: {path}')
    data = rows.as_dict()
    return data, fmt, path
Exemple #8
0
def export_data(format, path, rows, show, table_name, target):
    format = utils.check_format(format, len(rows))
    path = utils.check_path(path, target, format)
    if show:
        print(rows.dataset)
    data = rows.export(format)
    utils.save_data(path, data)
    logger.log('ALERT', f'The subdomain result for {table_name}: {path}')
    data = rows.as_dict()
    return data, format, path
Exemple #9
0
    def run(self):
        start = time.time()
        logger.log('INFOR', f'Start running {self.source} module')
        if isinstance(self.targets, set):
            self.subdomains = self.targets
        else:
            self.subdomains = utils.get_domains(self.target, self.targets)
        self.fmt = utils.check_format(self.fmt)
        timestamp = utils.get_timestamp()
        name = f'takeover_check_result_{timestamp}'
        self.path = utils.check_path(self.path, name, self.fmt)
        if self.subdomains:
            logger.log('INFOR', f'Checking subdomain takeover')
            self.fingerprints = get_fingerprint()
            self.results.headers = ['subdomain', 'cname']

            for domain in self.subdomains:
                self.queue.put(domain)

            progress_thread = Thread(target=self.progress,
                                     name='ProgressThread',
                                     daemon=True)
            progress_thread.start()

            for i in range(self.thread):
                check_thread = Thread(target=self.check,
                                      name=f'CheckThread{i}',
                                      daemon=True)
                check_thread.start()

            self.queue.join()
            self.save()
        else:
            logger.log('FATAL', f'Failed to obtain domain')
        end = time.time()
        elapse = round(end - start, 1)
        logger.log(
            'ALERT', f'{self.source} module takes {elapse} seconds, '
            f'There are {len(self.results)} subdomains exists takeover')
        logger.log('INFOR', f'Subdomain takeover results: {self.path}')
        logger.log('INFOR', f'Finished {self.source} module')
Exemple #10
0
def export(table,
           db=None,
           alive=False,
           limit=None,
           path=None,
           format='csv',
           show=False):
    """
    OneForAll export from database module

    Example:
        python3 dbexport.py --table name --format csv --dir= ./result.csv
        python3 dbexport.py --db result.db --table name --show False

    Note:
        --alive  True/False           Only export alive subdomains or not (default False)
        --format rst/csv/tsv/json/yaml/html/jira/xls/xlsx/dbf/latex/ods (result format)
        --path   Result directory (default directory is ./results)

    :param str  table:   Table to be exported
    :param str  db:      Database path to be exported (default ./results/result.sqlite3)
    :param bool alive:   Only export the results of alive subdomains (default False)
    :param str  limit:   Export limit (default None)
    :param str  format:  Result format (default csv)
    :param str  path:    Result directory (default None)
    :param bool show:    Displays the exported data in terminal (default False)
    """

    database = Database(db)
    rows = database.export_data(table, alive, limit)
    format = utils.check_format(format, len(rows))
    path = utils.check_path(path, table, format)
    if show:
        print(rows.dataset)
    data = rows.export(format)
    database.close()
    utils.save_data(path, data)
    logger.log('ALERT', f'The subdomain result for {table}: {path}')
    data_dict = rows.as_dict()
    return data_dict
Exemple #11
0
 def run(self):
     start = time.time()
     logger.log('INFOR', f'开始执行{self.source}模块')
     self.format = utils.check_format(self.format)
     self.dpath = utils.check_dpath(self.dpath)
     self.subdomains = utils.get_domains(self.target)
     if self.subdomains:
         logger.log('INFOR', f'正在检查子域接管风险')
         self.fingerprints = get_fingerprint()
         self.results.headers = ['subdomain', 'cname']
         # 创建待检查的子域队列
         for domain in self.subdomains:
             self.subdomainq.put(domain)
         # 设置进度
         self.bar.total = self.subdomainq.qsize()
         self.bar.desc = 'Progress'
         self.bar.ncols = True
         # 进度线程
         threads = []
         thread = Thread(target=self.progress, daemon=True)
         thread.start()
         threads.append(thread)
         # 检查线程
         for _ in range(self.thread):
             thread = Thread(target=self.check, daemon=True)
             thread.start()
             threads.append(thread)
         for thread in threads:
             thread.join()
         self.save()
     else:
         logger.log('FATAL', f'获取域名失败')
     end = time.time()
     elapsed = round(end - start, 1)
     logger.log('INFOR', f'{self.source}模块耗时{elapsed}秒'
                         f'发现{len(self.results)}个子域存在接管风险')
     logger.log('DEBUG', f'结束执行{self.source}模块')
Exemple #12
0
def export(target,
           type='target',
           db=None,
           alive=False,
           limit=None,
           path=None,
           format='csv',
           show=False):
    """
    OneForAll export from database module

    Example:
        python3 dbexport.py --target name --format csv --dir= ./result.csv
        python3 dbexport.py --db result.db --target name --show False
        python3 dbexport.py --target table_name --tb True --show False

    Note:
        --format rst/csv/tsv/json/yaml/html/jira/xls/xlsx/dbf/latex/ods (result format)
        --path   Result directory (default directory is ./results)

    :param str  target:  Table to be exported
    :param str  type:    Type of target
    :param str  db:      Database path to be exported (default ./results/result.sqlite3)
    :param bool alive:   Only export the results of alive subdomains (default False)
    :param str  limit:   Export limit (default None)
    :param str  format:  Result format (default csv)
    :param str  path:    Result directory (default None)
    :param bool show:    Displays the exported data in terminal (default False)
    """

    if type == 'target':
        database = Database(db)
        domains = utils.get_domains(target)
        datas = []
        if domains:
            for domain in domains:
                table_name = domain_to_table(domain)
                rows = database.export_data(table_name, alive, limit)
                if rows is None:
                    continue
                format = utils.check_format(format, len(rows))
                path = utils.check_path(path, target, format)
                if show:
                    print(rows.dataset)
                data = rows.export(format)
                utils.save_data(path, data)
                logger.log('ALERT',
                           f'The subdomain result for {table_name}: {path}')
                data = rows.as_dict()
                datas.extend(data)
        database.close()
        if len(domains) > 1:
            utils.export_all(alive, format, path, datas)
    elif type == 'table':
        database = Database(db)
        rows = database.export_data(target, alive, limit)
        format = utils.check_format(format, len(rows))
        path = utils.check_path(path, target, format)
        if show:
            print(rows.dataset)
        data = rows.export(format)
        database.close()
        utils.save_data(path, data)
        logger.log('ALERT', f'The subdomain result for {target}: {path}')
        data_dict = rows.as_dict()
        return data_dict