コード例 #1
0
ファイル: remote_transform.py プロジェクト: mgcfish/canari3
def remote_transform(args):
    entity_type, value = split_validate(args.input, 'entity')
    fields = {}
    params = []

    for f in args.entity_field:
        name, value = split_validate(f, 'entity field')
        fields[name] = Field(name=name, value=value)

    for p in args.transform_parameter:
        name, value = split_validate(p, 'transform parameter')
        params += Field(name=name, value=value)

    try:
        r = remote_canari_transform_runner(
            args.host, args.base_path, args.transform,
            [_Entity(type=entity_type, value=value, fields=fields)], params,
            Limits(soft=args.soft_limit, hard=args.hard_limit), args.ssl)

        if r.status == 200:
            data = r.read()
            if args.raw_output:
                print data
            else:
                console_writer(MaltegoMessage.parse(data))
                exit(0)

        print 'ERROR: Received status %d for %s://%s/%s. Are you sure you got the right server?' % (
            r.status, 'https' if args.ssl else 'http', args.host,
            args.transform)
    except Exception, e:
        print 'ERROR: %s' % e
コード例 #2
0
ファイル: plume.py プロジェクト: jakub/canari3
def do_transform(transform):
    try:
        # Let's get an XML object tree
        req = MaltegoMessage.parse(request.data).message

        # If our transform define an input entity type then we should check
        # whether the request contains the right type
        if transform.input_type and transform.input_type is not Unknown and \
                not isinstance(req.entity, transform.input_type):
            return Response(application.four_o_four, status=404)

        # Execute it!
        msg = transform().do_transform(req, MaltegoTransformResponseMessage(),
                                       load_config())

        # Let's serialize the return response and clean up whatever mess was left behind
        if isinstance(msg, MaltegoTransformResponseMessage):
            return message(msg)
        else:
            raise MaltegoException(str(msg))

    # Unless we croaked somewhere, then we need to fix things up here...
    except MaltegoException as me:
        return croak(str(me))
    except Exception:
        if application.debug:
            return croak(traceback.format_exc())
        else:
            return croak('Transform execution failed.')
コード例 #3
0
ファイル: plume.py プロジェクト: redcanari/canari3
def do_transform(transform):
    try:
        # Let's get an XML object tree
        req = MaltegoMessage.parse(request.data).message

        # If our transform define an input entity type then we should check
        # whether the request contains the right type
        if transform.input_type and transform.input_type is not Unknown and \
                not isinstance(req.entity, transform.input_type):
            return Response(application.four_o_four, status=404)

        # Execute it!
        msg = transform().do_transform(
                req,
                MaltegoTransformResponseMessage(),
                load_config()
        )

        # Let's serialize the return response and clean up whatever mess was left behind
        if isinstance(msg, MaltegoTransformResponseMessage):
            return message(msg)
        else:
            raise MaltegoException(str(msg))

    # Unless we croaked somewhere, then we need to fix things up here...
    except MaltegoException, me:
        return croak(str(me))
コード例 #4
0
def remote_transform(host, transform, input, entity_field, transform_parameter, raw_output, 
                     ssl, base_path, soft_limit, hard_limit, verbose):
    if verbose:
        set_canari_mode(CanariMode.LocalDebug)

    entity_type, entity_value = split_validate(input, 'entity')
    fields = {}
    params = []

    for f in entity_field:
        name, value = split_validate(f, 'entity field')
        fields[name] = Field(name=name, value=value)

    for p in transform_parameter:
        name, value = split_validate(p, 'transform parameter')
        params.append(Field(name=name, value=value))

    try:
        r = remote_canari_transform_runner(
            host,
            base_path,
            transform,
            [_Entity(type=entity_type, value=entity_value, fields=fields)],
            params,
            Limits(soft=soft_limit, hard=hard_limit),
            ssl
        )

        if r.status == 200:
            data = r.read().decode('utf8')
            if raw_output:
                click.echo(data, err=True)
                exit(0)
            else:
                console_writer(MaltegoMessage.parse(data))
                exit(0)

        click.echo('ERROR: Received status %d for %s://%s/%s. Are you sure you got the right server?' % (
            r.status,
            'https' if ssl else 'http',
            host,
            transform
        ), err=True)
        
        if verbose:
            click.echo(r.read(), err=True)
    except Exception as e:
        click.echo('ERROR: %s' % e, err=True)
        if verbose:
            traceback.print_exc()
    exit(-1)
コード例 #5
0
ファイル: run_server.py プロジェクト: Silobreaker/canari
    def dotransform(self, transform, valid_input_entity_types):
        try:
            if "Content-Length" not in self.headers:
                self.send_error(500, "What?")
                return
            request_str = self.rfile.read(int(self.headers["Content-Length"]))

            msg = MaltegoMessage.parse(request_str).message

            e = msg.entity
            entity_type = e.type

            if valid_input_entity_types and entity_type not in valid_input_entity_types:
                self.send_error(400, "Unsupported input entity!")
                return

            for k, i in msg.parameters.iteritems():
                if "." in k:
                    config[k.replace(".", "/", 1)] = i
                else:
                    config["plume/%s" % k] = i

            msg = (
                transform(
                    msg,
                    request_str
                    if hasattr(transform, "cmd") and callable(transform.cmd)
                    else MaltegoTransformResponseMessage(),
                )
                if get_transform_version(transform) == 2
                else transform(
                    msg,
                    request_str
                    if hasattr(transform, "cmd") and callable(transform.cmd)
                    else MaltegoTransformResponseMessage(),
                    config,
                )
            )

            if isinstance(msg, MaltegoTransformResponseMessage) or isinstance(msg, basestring):
                message(msg, self)
                return
            else:
                raise MaltegoException("Could not resolve message type returned by transform.")

        except MaltegoException, me:
            croak(str(me), self)
コード例 #6
0
 def __call__(self, request, *args):
     self.args.append(request.entity.value)
     if isinstance(request.parameters, list) and request.parameters:
         self.args.extend(request.parameters)
     if request.entity.fields:
         self.args.append('#'.join([
             '%s=%s' % (k, v.value.replace('#', '\\#').replace('=', '\\='))
             for k, v in request.entity.fields.items()
         ]))
     if is_local_exec_mode():
         p = Popen(self.args, env=self.env)
         p.communicate()
         exit(p.returncode)
     else:
         p = Popen(self.args, env=self.env, stdout=PIPE)
         out, _ = p.communicate()
         return MaltegoMessage.parse(out)
コード例 #7
0
ファイル: plume.py プロジェクト: Silobreaker/canari
def dotransform(transform, valid_input_entity_types):
    try:
        # Get the body of the request
        request_str = request.data

        # Let's get an XML object tree
        maltego_request = MaltegoMessage.parse(request_str).message

        # Get the entity being passed in.
        e = maltego_request.entity
        entity_type = e.type

        if valid_input_entity_types and entity_type not in valid_input_entity_types:
            return Response(app.four_o_four, status=404)

        # Initialize a private copy of the config to pass into the transform
        config = _config.CanariConfigParser()
        for p in maltego_request.parameters.values():
            if '.' in p.name:
                config[p.name.replace('.', '/', 1)] = p
            else:
                config['plume/%s' % p.name] = p.value
        # The private config variables CANNOT override the server's settings. This is for security?
        config._sections.update(_config.config._sections)

        # Execute it!
        msg = transform(
            maltego_request,
            request_str if hasattr(transform, 'cmd') and callable(transform.cmd) else MaltegoTransformResponseMessage(),
            config
        )

        # Let's serialize the return response and clean up whatever mess was left behind
        if (
            isinstance(msg, MaltegoTransformResponseMessage) or
            isinstance(msg, basestring) or
            isinstance(msg, MaltegoTransformExceptionMessage)
           ):
            return message(msg)
        else:
            raise MaltegoException('Could not resolve message type returned by transform.')

    # Unless we croaked somewhere, then we need to fix things up here...
    except MaltegoException, me:
        return croak(str(me))
コード例 #8
0
ファイル: remote_transform.py プロジェクト: wtfuzz/canari3
def remote_transform(args):
    if args.verbose:
        set_canari_mode(CanariMode.LocalDebug)

    entity_type, entity_value = split_validate(args.input, 'entity')
    fields = {}
    params = []

    for f in args.entity_field:
        name, value = split_validate(f, 'entity field')
        fields[name] = Field(name=name, value=value)

    for p in args.transform_parameter:
        name, value = split_validate(p, 'transform parameter')
        params.append(Field(name=name, value=value))

    try:
        r = remote_canari_transform_runner(
            args.host,
            args.base_path,
            args.transform,
            [_Entity(type=entity_type, value=entity_value, fields=fields)],
            params,
            Limits(soft=args.soft_limit, hard=args.hard_limit),
            args.ssl
        )

        if r.status == 200:
            data = r.read()
            if args.raw_output:
                print data
                exit(0)
            else:
                console_writer(MaltegoMessage.parse(data))
                exit(0)

        print 'ERROR: Received status %d for %s://%s/%s. Are you sure you got the right server?' % (
            r.status,
            'https' if args.ssl else 'http',
            args.host,
            args.transform
        )
    except Exception, e:
        print 'ERROR: %s' % e
コード例 #9
0
def dotransform(transform, valid_input_entity_types):
    try:
        # Get the body of the request
        request_str = request.data

        # Let's get an XML object tree
        maltego_request = MaltegoMessage.parse(request_str).message

        # Get the entity being passed in.
        e = maltego_request.entity
        entity_type = e.type

        if valid_input_entity_types and entity_type not in valid_input_entity_types:
            return Response(app.four_o_four, status=404)

        # Initialize a private copy of the config to pass into the transform
        config = _config.CanariConfigParser()
        for p in maltego_request.parameters.values():
            if '.' in p.name:
                config[p.name.replace('.', '/', 1)] = p.value
            else:
                config['plume/%s' % p.name] = p.value
        # The private config variables CANNOT override the server's settings. This is for security?
        config._sections.update(_config.config._sections)

        # Execute it!
        msg = transform(
            maltego_request, request_str if hasattr(transform, 'cmd')
            and callable(transform.cmd) else MaltegoTransformResponseMessage(),
            config)

        # Let's serialize the return response and clean up whatever mess was left behind
        if isinstance(msg, MaltegoTransformResponseMessage) or isinstance(
                msg, basestring):
            return message(msg)
        else:
            raise MaltegoException(
                'Could not resolve message type returned by transform.')

    # Unless we croaked somewhere, then we need to fix things up here...
    except MaltegoException, me:
        return croak(str(me))