示例#1
0
def parse_args(args):
    args = parser.parse_args(args)
    if args.settings_dir is detect_settings_dir:
        args.settings_dir = detect_settings_dir()
    if maltego_version(args.settings_dir) >= '3.4.0':
        print("""
=========================== ERROR: NOT SUPPORTED ===========================

 Starting from Maltego v3.4.0 the 'canari uninstall-package' command is no
 longer supported. Please use the Maltego interface to uninstall packages.

=========================== ERROR: NOT SUPPORTED ===========================
        """)
        exit(-1)
    return args
示例#2
0
def parse_args(args):
    args = parser.parse_args(args)

    if args.settings_dir is detect_settings_dir:
        try:
            args.settings_dir = detect_settings_dir()
        except OSError:
            print "Make sure you've run Maltego for the first time and activated your license."
            exit(-1)

    if maltego_version(args.settings_dir) >= "3.4.0":
        print (
            """
=========================== ERROR: NOT SUPPORTED ===========================

 Starting from Maltego v3.4.0 the 'canari install-package' command is no
 longer supported. Please use the 'canari create-profile' command, instead.
 This will create an importable config file (*.mtz) which can be imported
 using the 'Import Configuration' option in Maltego. This option can be
 found by clicking on the <Maltego icon> in the top left corner of your
 Maltego window then scrolling to 'Import' then 'Import Configuration'.

 NOTE: This command will automatically install and configure the
 'canari.conf' file for you in the default location for your OS.

 EXAMPLE:

 shell> canari create-profile sploitego
 ...
 shell> ls
 sploitego.mtz <--- Import this file

=========================== ERROR: NOT SUPPORTED ===========================
        """
        )
        exit(-1)

    args.working_dir = os.path.realpath(args.working_dir)
    return args
示例#3
0
def parse_args(args):
    args = parser.parse_args(args)

    if args.settings_dir is detect_settings_dir:
        try:
            args.settings_dir = detect_settings_dir()
        except OSError:
            print "Make sure you've run Maltego for the first time and activated your license."
            exit(-1)

    if maltego_version(args.settings_dir) >= '3.4.0':
        print("""
=========================== ERROR: NOT SUPPORTED ===========================

 Starting from Maltego v3.4.0 the 'canari install-package' command is no
 longer supported. Please use the 'canari create-profile' command, instead.
 This will create an importable config file (*.mtz) which can be imported
 using the 'Import Configuration' option in Maltego. This option can be
 found by clicking on the <Maltego icon> in the top left corner of your
 Maltego window then scrolling to 'Import' then 'Import Configuration'.

 NOTE: This command will automatically install and configure the
 'canari.conf' file for you in the default location for your OS.

 EXAMPLE:

 shell> canari create-profile sploitego
 ...
 shell> ls
 sploitego.mtz <--- Import this file

=========================== ERROR: NOT SUPPORTED ===========================
        """)
        exit(-1)

    args.working_dir = os.path.realpath(args.working_dir)
    return args
示例#4
0
def run(args):
    opts = parse_args(args)

    if path.exists(opts.outfile) and not opts.append and not \
        parse_bool('%s already exists. Are you sure you want to overwrite it? [y/N]: ' % repr(opts.outfile),
                   default='n'):
        exit(-1)

    entity_source = None
    if opts.mtz_file is None:
        d = detect_settings_dir()
        if maltego_version(d) >= '3.4.0':
            print("""
=========================== ERROR: NOT SUPPORTED ===========================

 Starting from Maltego v3.4.0 the 'canari generate-entities' command can no
 longer generate entity definition files from the Maltego configuration
 directory. Entities can only be generated from export files (*.mtz). To
 export entities navigate to the 'Manage' tab in Maltego, then click on the
 'Export Entities' button and follow the prompts. Once the entities have
 been exported, run the following command:

 shell> canari generate-entities -m myentities.mtz

=========================== ERROR: NOT SUPPORTED ===========================
                """)
            exit(-1)
        entity_source = DirFile(
            path.join(d, 'config', 'Maltego', 'Entities')
        )
    else:
        entity_source = ZipFile(opts.mtz_file)

    entity_files = filter(lambda x: x.endswith('.entity'), entity_source.namelist())

    namespaces = dict()

    excluded_entities = []
    if opts.append:
        existing_entities = get_existing_entities(opts.outfile)
        # excluded_entities.extend([e._type_ for e in existing_entities])
        for entity_class in existing_entities:
            excluded_entities.extend(entity_class._type_)
            if entity_class._type_.endswith('Entity'):
                namespaces[entity_class._namespace_] = entity_class.__name__

    print 'Generating %s...' % repr(opts.outfile)
    outfile = open(opts.outfile, 'ab' if opts.append else 'wb')

    if opts.append:
        outfile.write('\n\n')
    else:
        outfile.write('#!/usr/bin/env python\n\nfrom canari.maltego.entities import EntityField, Entity\n\n\n')

    for entity_file in entity_files:
        xml = XML(entity_source.open(entity_file).read())
        id_ = xml.get('id')

        if (opts.entity and id_ not in opts.entity) or id_ in excluded_entities:
            continue

        namespace_entity = id_.split('.')

        base_classname = None
        namespace = '.'.join(namespace_entity[:-1])
        name = namespace_entity[-1]
        classname = name

        if (opts.namespace and namespace not in opts.namespace) or namespace in opts.exclude_namespace:
            continue

        if namespace not in namespaces:
            base_classname = '%sEntity' % (''.join([n.title() for n in namespace_entity[:-1]]))
            namespaces[namespace] = base_classname

            outfile.write('class %s(Entity):\n    _namespace_ = %s\n\n' % (base_classname, repr(namespace)))
        else:
            base_classname = namespaces[namespace]

        for field in xml.findall('Properties/Fields/Field'):
            fields = [
                'name=%s' % repr(field.get('name')),
                'propname=%s' % repr(normalize_fn(field.get('name'))),
                'displayname=%s' % repr(field.get('displayName'))

            ]
            outfile.write('@EntityField(%s)\n' % ', '.join(fields))

        outfile.write('class %s(%s):\n    pass\n\n\n' % (classname, base_classname))

    outfile.close()
    print 'done.'
示例#5
0
def run(args):
    opts = parse_args(args)

    if path.exists(opts.outfile) and not opts.append and not \
        parse_bool('%s already exists. Are you sure you want to overwrite it? [y/N]: ' % repr(opts.outfile),
                   default='n'):
        exit(-1)

    entity_source = None
    if opts.mtz_file is None:
        d = detect_settings_dir()
        if maltego_version(d) >= '3.4.0':
            print("""
=========================== ERROR: NOT SUPPORTED ===========================

 Starting from Maltego v3.4.0 the 'canari generate-entities' command can no
 longer generate entity definition files from the Maltego configuration
 directory. Entities can only be generated from export files (*.mtz). To
 export entities navigate to the 'Manage' tab in Maltego, then click on the
 'Export Entities' button and follow the prompts. Once the entities have
 been exported, run the following command:

 shell> canari generate-entities -m myentities.mtz

=========================== ERROR: NOT SUPPORTED ===========================
                """)
            exit(-1)
        entity_source = DirFile(path.join(d, 'config', 'Maltego', 'Entities'))
    else:
        entity_source = ZipFile(opts.mtz_file)

    entity_files = filter(lambda x: x.endswith('.entity'),
                          entity_source.namelist())

    namespaces = dict()

    excluded_entities = []
    if opts.append:
        existing_entities = get_existing_entities(opts.outfile)
        # excluded_entities.extend([e._type_ for e in existing_entities])
        for entity_class in existing_entities:
            excluded_entities.extend(entity_class._type_)
            if entity_class._type_.endswith('Entity'):
                namespaces[entity_class._namespace_] = entity_class.__name__

    print 'Generating %s...' % repr(opts.outfile)
    outfile = open(opts.outfile, 'ab' if opts.append else 'wb')

    if opts.append:
        outfile.write('\n\n')
    else:
        outfile.write(
            '#!/usr/bin/env python\n\nfrom canari.maltego.entities import EntityField, Entity\n\n\n'
        )

    for entity_file in entity_files:
        xml = XML(entity_source.open(entity_file).read())
        id_ = xml.get('id')

        if (opts.entity
                and id_ not in opts.entity) or id_ in excluded_entities:
            continue

        namespace_entity = id_.split('.')

        base_classname = None
        namespace = '.'.join(namespace_entity[:-1])
        name = namespace_entity[-1]
        classname = name

        if (opts.namespace and namespace
                not in opts.namespace) or namespace in opts.exclude_namespace:
            continue

        if namespace not in namespaces:
            base_classname = '%sEntity' % (''.join(
                [n.title() for n in namespace_entity[:-1]]))
            namespaces[namespace] = base_classname

            outfile.write('class %s(Entity):\n    _namespace_ = %s\n\n' %
                          (base_classname, repr(namespace)))
        else:
            base_classname = namespaces[namespace]

        for field in xml.findall('Properties/Fields/Field'):
            fields = [
                'name=%s' % repr(field.get('name')),
                'propname=%s' % repr(normalize_fn(field.get('name'))),
                'displayname=%s' % repr(field.get('displayName'))
            ]
            outfile.write('@EntityField(%s)\n' % ', '.join(fields))

        outfile.write('class %s(%s):\n    pass\n\n\n' %
                      (classname, base_classname))

    outfile.close()
    print 'done.'