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)
def banner(): _ = r''' ❤️ ( ⚫︎ー⚫︎ ) Woo,W13Scan~ / \ / ○ \ Version:{version} / / ヽ \ | / \ | \Ԏ |イ 卜− ―イ \ /\ / ︶ ︶ ''' dataToStdout(Fore.GREEN + _.format(version=VERSION, git=REPOSITORY))
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
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()
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
def dataToStdout(self, msg): self.lock.acquire() dataToStdout(msg) self.lock.release()