Ejemplo n.º 1
0
    def execute(self, target, headers=None, params=None, mode='verify', verbose=True):
        self.target = target
        self.url = parse_target_url(target) if self.current_protocol == POC_CATEGORY.PROTOCOL.HTTP else self.build_url()
        self.headers = headers
        self.params = str_to_dict(params) if params else {}
        self.mode = mode
        self.verbose = verbose
        self.expt = (0, 'None')
        # TODO
        output = None

        try:
            output = self._execute()

        except NotImplementedError as e:
            self.expt = (ERROR_TYPE_ID.NOTIMPLEMENTEDERROR, e)
            logger.log(CUSTOM_LOGGING.ERROR, 'POC: {0} not defined "{1}" mode'.format(self.name, self.mode))
            output = Output(self)

        except ConnectTimeout as e:
            self.expt = (ERROR_TYPE_ID.CONNECTTIMEOUT, e)
            while conf.retry > 0:
                logger.debug('POC: {0} timeout, start it over.'.format(self.name))
                try:
                    output = self._execute()
                    break
                except ConnectTimeout:
                    logger.debug('POC: {0} time-out retry failed!'.format(self.name))
                conf.retry -= 1
            else:
                msg = "connect target '{0}' failed!".format(target)
                logger.error(msg)
                output = Output(self)

        except HTTPError as e:
            self.expt = (ERROR_TYPE_ID.HTTPERROR, e)
            logger.warn('POC: {0} HTTPError occurs, start it over.'.format(self.name))
            output = Output(self)

        except ConnectionError as e:
            self.expt = (ERROR_TYPE_ID.CONNECTIONERROR, e)
            msg = "connect target '{0}' failed!".format(target)
            logger.error(msg)
            output = Output(self)

        except TooManyRedirects as e:
            self.expt = (ERROR_TYPE_ID.TOOMANYREDIRECTS, e)
            logger.debug(str(e))
            output = Output(self)


        except Exception as e:
            self.expt = (ERROR_TYPE_ID.OTHER, e)
            # logger.debug(str(e))
            logger.exception(e)
            output = Output(self)

        return output
Ejemplo n.º 2
0
 def show_result(self):
     if self.status == OUTPUT_STATUS.SUCCESS:
         for k, v in self.result.items():
             if isinstance(v, dict):
                 for kk, vv in v.items():
                     logger.log(CUSTOM_LOGGING.SUCCESS,
                                "%s : %s" % (kk, vv))
             else:
                 logger.log(CUSTOM_LOGGING.SUCCESS, "%s : %s" % (k, v))
Ejemplo n.º 3
0
 def show_result(self):
     if self.status == OUTPUT_STATUS.SUCCESS:
         for k, v in self.result.items():
             if isinstance(v, dict):
                 for kk, vv in v.items():
                     if (kk == "URL" or kk == "IP") and conf.ppt:
                         vv = desensitization(vv)
                     logger.log(CUSTOM_LOGGING.SUCCESS, "%s : %s" % (kk, vv))
             else:
                 if (k == "URL" or k == "IP") and conf.ppt:
                     v = desensitization(v)
                 logger.log(CUSTOM_LOGGING.SUCCESS, "%s : %s" % (k, v))
Ejemplo n.º 4
0
def listener_worker():
    s = get_tcp_listener(ipv6=conf.ipv6, listen_port=int(conf.connect_back_port))
    while True:
        try:
            conn, address = s.accept()
            conn.setblocking(1)
            client = AttribDict()
            client.conn = conn
            client.address = address
            kb.data.clients.append(client)
            info_msg = "new connection established from {0}".format(address[0])
            logger.log(CUSTOM_LOGGING.SUCCESS, info_msg)
        except Exception:
            pass
Ejemplo n.º 5
0
def get_sock_listener(listen_port,
                      listen_host="0.0.0.0",
                      ipv6=False,
                      protocol=None):
    if protocol in [None, "TCP"]:
        protocol = socket.SOCK_STREAM
    elif protocol in ["UDP"]:
        protocol = socket.SOCK_DGRAM

    if ipv6:
        s = socket.socket(socket.AF_INET6, protocol)
        if listen_host == "0.0.0.0":
            listen_host = "::"
    else:
        s = socket.socket(socket.AF_INET, protocol)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    msg = ''
    if conf.enable_tls_listener and protocol == socket.SOCK_STREAM:
        import ssl
        context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
        cert_path = os.path.join(paths.POCSUITE_TMP_PATH, 'cacert.pem')
        gen_cert(filepath=cert_path)
        context.load_cert_chain(cert_path)
        s = context.wrap_socket(s, server_side=True)
        msg = 'TLS '
    try:
        s.bind((listen_host, listen_port))
    except socket.error:
        s.close()
        # import traceback
        # traceback.print_exc()
        return None

    if protocol == socket.SOCK_STREAM:
        msg += "listening on {0}:{1}".format(listen_host, listen_port)
        logger.log(CUSTOM_LOGGING.SYSINFO, msg)
        s.listen(5)
    return s
Ejemplo n.º 6
0
def str_to_dict(value):
    try:
        return ast.literal_eval(value)
    except ValueError as e:
        logger.log(CUSTOM_LOGGING.ERROR,
                   "conv string failed : {}".format(str(e)))