Пример #1
0
def qixi_eggs():
    data = ["2019-8-7", "2020-8-25", "2021-8-14"]
    i = datetime.datetime.now()
    now = "{}-{}-{}".format(i.year, i.month, i.day)
    msg = '''
>﹏< 又是一年七夕,善良的开发者找到女盆友没?
(ó﹏ò。) 没有。
访问链接:https://github.com/boy-hack/w13scan/issues/new 向开发者表白~

'''
    if now in data:
        dataToStdout(Fore.RED + msg)
Пример #2
0
def banner():
    _ = r'''
    ❤️ (  ⚫︎ー⚫︎  ) Woo,W13Scan~
     /      \      
     /     ○  \   Version:{version}   
    /  /     ヽ  \   
    | /     \ |   
     \Ԏ          |イ  
     卜−     ―イ   
      \  /\  /
       ︶  ︶
'''

    dataToStdout(Fore.GREEN + _.format(version=VERSION, git=REPOSITORY))
Пример #3
0
    def execute(self, request: Request, response: Response):
        self.target = ''
        self.requests = request
        self.response = response
        output = None
        try:
            output = self.audit()
        except NotImplementedError:
            msg = 'Plugin: {0} not defined "{1} mode'.format(
                self.name, 'audit')
            Share.dataToStdout(Share.dataToStdout('\r' + msg + '\n\r'))

        except (ConnectTimeout, requests.exceptions.ReadTimeout,
                urllib3.exceptions.ReadTimeoutError, socket.timeout):
            retry = conf["retry"]
            while retry > 0:
                msg = 'Plugin: {0} timeout, start it over.'.format(self.name)
                # Share.dataToStdout('\r' + msg + '\n\r')
                try:
                    output = self.audit()
                    break
                except (ConnectTimeout, requests.exceptions.ReadTimeout,
                        urllib3.exceptions.ReadTimeoutError, socket.timeout):
                    # msg = 'Plugin: {0} time-out retry failed!'.format(self.name)
                    # Share.dataToStdout('\r' + msg + '\n\r')
                    retry -= 1
                except:
                    raise
            else:
                msg = "connect target '{0}' failed!".format(self.target)
                # Share.dataToStdout('\r' + msg + '\n\r')

        except HTTPError as e:
            msg = 'Plugin: {0} HTTPError occurs, start it over.'.format(
                self.name)
            # Share.dataToStdout('\r' + msg + '\n\r')

        except ConnectionError:
            msg = "connect target '{0}' failed!".format(self.target)
            # Share.dataToStdout('\r' + msg + '\n\r')
        except requests.exceptions.ChunkedEncodingError:
            pass
        except ConnectionResetError:
            pass
        except TooManyRedirects as e:
            # Share.dataToStdout('\r' + str(e) + '\n\r')
            pass
        except NewConnectionError as ex:
            pass

        except PoolError as ex:
            pass
        except requests.exceptions.InvalidSchema:
            pass
        except KeyboardInterrupt:
            raise
        except Exception:
            errMsg = "W13scan plugin traceback:\n"
            errMsg += "Running version: {}\n".format(VERSION)
            errMsg += "Python version: {}\n".format(sys.version.split()[0])
            errMsg += "Operating system: {}\n".format(platform.platform())
            errMsg += "Threads: {}".format(conf["threads"])
            if request:
                errMsg += '\n\nrequest raw:\n'
                errMsg += request.to_data().decode()
            excMsg = traceback.format_exc()
            Share.lock.acquire()
            if conf["is_debug"]:
                dataToStdout('\r' + errMsg + '\n\r')
            if createGithubIssue(errMsg, excMsg):
                dataToStdout('\r' + "[x] a issue has reported" + '\n\r')
            Share.lock.release()

        return output
Пример #4
0
    def do_GET(self):
        '''
        处理GET请求
        :return:
        '''
        if self.path == 'http://baseproxy.ca/' or self.path == 'http://w13scan.ca/':
            self._send_ca()
            return
        request = None
        try:
            if not self.is_connected:
                # 如果不是https,需要连接http服务器
                try:
                    self._proxy_to_dst()
                except Exception as e:
                    try:
                        self.send_error(
                            500, '{} connect fail because of "{}"'.format(
                                self.hostname, str(e)))
                    except BrokenPipeError:
                        pass
                    finally:
                        return
            else:
                self._target = self.ssl_host + self.path
            # 这里就是代理发送请求,并接收响应信息
            request = Request(self)
            if request:
                if self.is_connected:
                    request.set_https(True)
                self._proxy_sock.sendall(request.to_data())
                # 将响应信息返回给客户端
                errMsg = ''
                try:
                    response = Response(request, self._proxy_sock)
                except ConnectionResetError:
                    response = None
                    errMsg = 'because ConnectionResetError'
                except _socket.timeout:
                    response = None
                    errMsg = 'because socket timeout'
                except http.client.BadStatusLine as e:
                    response = None
                    errMsg = 'because BadStatusLine {}'.format(str(e))

                if response:
                    try:
                        self.request.sendall(response.to_data())
                    except BrokenPipeError:
                        pass
                    except OSError:
                        pass
                else:
                    self.send_error(404, 'response is None {}'.format(errMsg))
                if not self._is_replay() and response:
                    KB['task_queue'].put(('loader', request, response))

            else:
                self.send_error(404, 'request is None')
        except ConnectionResetError:
            pass
        except ConnectionAbortedError:
            pass
        except (BrokenPipeError, IOError):
            pass
        except Exception:
            errMsg = "W13scan baseproxy get request traceback:\n"
            errMsg += "Running version: {}\n".format(VERSION)
            errMsg += "Python version: {}\n".format(sys.version.split()[0])
            errMsg += "Operating system: {}\n".format(platform.platform())
            errMsg += "Threads: {}".format(conf["threads"])
            if request:
                errMsg += '\n\nrequest raw:\n'
                errMsg += request.to_data().decode()
            excMsg = traceback.format_exc()
            Share.lock.acquire()
            if conf["is_debug"]:
                dataToStdout(errMsg)
            if createGithubIssue(errMsg, excMsg):
                dataToStdout('\r' + "[x] a issue has reported" + '\n\r')
            Share.lock.release()
Пример #5
0
    def execute(self, request: Request, response: Response):
        self.target = ''
        self.requests = request
        self.response = response
        output = None
        try:
            output = self.audit()
        except NotImplementedError:
            msg = 'Plugin: {0} not defined "{1} mode'.format(
                self.name, 'audit')
            Share.dataToStdout(Share.dataToStdout('\r' + msg + '\n\r'))

        except (ConnectTimeout, requests.exceptions.ReadTimeout,
                urllib3.exceptions.ReadTimeoutError, socket.timeout):
            retry = conf["retry"]
            while retry > 0:
                msg = 'Plugin: {0} timeout, start it over.'.format(self.name)
                if conf["is_debug"]:
                    dataToStdout('\r' + msg + '\n\r')
                # Share.dataToStdout('\r' + msg + '\n\r')
                try:
                    output = self.audit()
                    break
                except (ConnectTimeout, requests.exceptions.ReadTimeout,
                        urllib3.exceptions.ReadTimeoutError, socket.timeout):
                    retry -= 1
                except Exception:
                    return
            else:
                msg = "connect target '{0}' failed!".format(self.target)
                # Share.dataToStdout('\r' + msg + '\n\r')

        except HTTPError as e:
            msg = 'Plugin: {0} HTTPError occurs, start it over.'.format(
                self.name)
            # Share.dataToStdout('\r' + msg + '\n\r')

        except ConnectionError:
            msg = "connect target '{0}' failed!".format(self.target)
            # Share.dataToStdout('\r' + msg + '\n\r')
        except requests.exceptions.ChunkedEncodingError:
            pass
        except ConnectionResetError:
            pass
        except TooManyRedirects as e:
            # Share.dataToStdout('\r' + str(e) + '\n\r')
            pass
        except NewConnectionError as ex:
            pass

        except PoolError as ex:
            pass
        except UnicodeDecodeError:
            # 这是由于request redirect没有处理编码问题,导致一些网站编码转换被报错,又不能hook其中的关键函数
            # 暂时先pass这个错误
            # refer:https://github.com/boy-hack/w13scan/labels/Requests%20UnicodeDecodeError
            pass
        except (requests.exceptions.InvalidURL,
                requests.exceptions.InvalidSchema,
                requests.exceptions.ContentDecodingError):
            # 出现在跳转上的一个奇葩错误,一些网站会在收到敏感操作后跳转到不符合规范的网址,request跟进时就会抛出这个异常
            # refer: https://github.com/boy-hack/w13scan/labels/requests.exceptions.InvalidURL
            # 奇葩的ContentDecodingError
            # refer:https://github.com/boy-hack/w13scan/issues?q=label%3Arequests.exceptions.ContentDecodingError
            pass
        except KeyboardInterrupt:
            raise
        except Exception:
            errMsg = "W13scan plugin traceback:\n"
            errMsg += "Running version: {}\n".format(VERSION)
            errMsg += "Python version: {}\n".format(sys.version.split()[0])
            errMsg += "Operating system: {}\n".format(platform.platform())
            errMsg += "Threads: {}".format(conf["threads"])
            if request:
                errMsg += '\n\nrequest raw:\n'
                errMsg += request.to_data().decode()
            excMsg = traceback.format_exc()
            Share.lock.acquire()
            if conf["is_debug"]:
                dataToStdout('\r' + errMsg + '\n\r')
            if createGithubIssue(errMsg, excMsg):
                dataToStdout('\r' + "[x] a issue has reported" + '\n\r')
            Share.lock.release()

        return output
Пример #6
0
 def dataToStdout(self, msg):
     self.lock.acquire()
     dataToStdout(msg)
     self.lock.release()