├── LICENSE ├── README.md ├── Third ├── JSFinder.py ├── __init__.py └── wafw00f │ ├── __init__.py │ ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── entrance.cpython-36.pyc │ ├── main.cpython-36.pyc │ ├── main1.cpython-36.pyc │ ├── manager.cpython-36.pyc │ └── wafprio.cpython-36.pyc │ ├── entrance.py │ ├── lib │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── asciiarts.cpython-36.pyc │ │ └── evillib.cpython-36.pyc │ ├── asciiarts.py │ └── evillib.py │ ├── manager.py │ ├── plugins │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── aesecure.cpython-36.pyc │ │ ├── airee.cpython-36.pyc │ │ ├── airlock.cpython-36.pyc │ │ ├── alertlogic.cpython-36.pyc │ │ ├── aliyundun.cpython-36.pyc │ │ ├── anquanbao.cpython-36.pyc │ │ ├── anyu.cpython-36.pyc │ │ ├── approach.cpython-36.pyc │ │ ├── armor.cpython-36.pyc │ │ ├── arvancloud.cpython-36.pyc │ │ ├── aspa.cpython-36.pyc │ │ ├── aspnetgen.cpython-36.pyc │ │ ├── astra.cpython-36.pyc │ │ ├── awswaf.cpython-36.pyc │ │ ├── azion.cpython-36.pyc │ │ ├── baidu.cpython-36.pyc │ │ ├── barikode.cpython-36.pyc │ │ ├── barracuda.cpython-36.pyc │ │ ├── bekchy.cpython-36.pyc │ │ ├── beluga.cpython-36.pyc │ │ ├── binarysec.cpython-36.pyc │ │ ├── bitninja.cpython-36.pyc │ │ ├── blockdos.cpython-36.pyc │ │ ├── bluedon.cpython-36.pyc │ │ ├── bulletproof.cpython-36.pyc │ │ ├── cachefly.cpython-36.pyc │ │ ├── cachewall.cpython-36.pyc │ │ ├── cdnns.cpython-36.pyc │ │ ├── cerber.cpython-36.pyc │ │ ├── chinacache.cpython-36.pyc │ │ ├── chuangyu.cpython-36.pyc │ │ ├── ciscoacexml.cpython-36.pyc │ │ ├── cloudbric.cpython-36.pyc │ │ ├── cloudflare.cpython-36.pyc │ │ ├── cloudfloordns.cpython-36.pyc │ │ ├── cloudfront.cpython-36.pyc │ │ ├── comodo.cpython-36.pyc │ │ ├── crawlprotect.cpython-36.pyc │ │ ├── denyall.cpython-36.pyc │ │ ├── distil.cpython-36.pyc │ │ ├── dosarrest.cpython-36.pyc │ │ ├── dotdefender.cpython-36.pyc │ │ ├── dynamicweb.cpython-36.pyc │ │ ├── edgecast.cpython-36.pyc │ │ ├── eisoo.cpython-36.pyc │ │ ├── expressionengine.cpython-36.pyc │ │ ├── f5bigipapm.cpython-36.pyc │ │ ├── f5bigipasm.cpython-36.pyc │ │ ├── f5bigipltm.cpython-36.pyc │ │ ├── f5firepass.cpython-36.pyc │ │ ├── f5trafficshield.cpython-36.pyc │ │ ├── fastly.cpython-36.pyc │ │ ├── fortiweb.cpython-36.pyc │ │ ├── frontdoor.cpython-36.pyc │ │ ├── godaddy.cpython-36.pyc │ │ ├── greywizard.cpython-36.pyc │ │ ├── huaweicloud.cpython-36.pyc │ │ ├── hyperguard.cpython-36.pyc │ │ ├── ibmdatapower.cpython-36.pyc │ │ ├── imunify360.cpython-36.pyc │ │ ├── incapsula.cpython-36.pyc │ │ ├── indusguard.cpython-36.pyc │ │ ├── instartdx.cpython-36.pyc │ │ ├── isaserver.cpython-36.pyc │ │ ├── janusec.cpython-36.pyc │ │ ├── jiasule.cpython-36.pyc │ │ ├── keycdn.cpython-36.pyc │ │ ├── knownsec.cpython-36.pyc │ │ ├── kona.cpython-36.pyc │ │ ├── limelight.cpython-36.pyc │ │ ├── litespeed.cpython-36.pyc │ │ ├── malcare.cpython-36.pyc │ │ ├── maxcdn.cpython-36.pyc │ │ ├── missioncontrol.cpython-36.pyc │ │ ├── modsecurity.cpython-36.pyc │ │ ├── naxsi.cpython-36.pyc │ │ ├── nemesida.cpython-36.pyc │ │ ├── netcontinuum.cpython-36.pyc │ │ ├── netscaler.cpython-36.pyc │ │ ├── nevisproxy.cpython-36.pyc │ │ ├── newdefend.cpython-36.pyc │ │ ├── nexusguard.cpython-36.pyc │ │ ├── ninja.cpython-36.pyc │ │ ├── nsfocus.cpython-36.pyc │ │ ├── nullddos.cpython-36.pyc │ │ ├── onmessage.cpython-36.pyc │ │ ├── openresty.cpython-36.pyc │ │ ├── oraclecloud.cpython-36.pyc │ │ ├── paloalto.cpython-36.pyc │ │ ├── pentawaf.cpython-36.pyc │ │ ├── perimeterx.cpython-36.pyc │ │ ├── pksec.cpython-36.pyc │ │ ├── powercdn.cpython-36.pyc │ │ ├── profense.cpython-36.pyc │ │ ├── ptaf.cpython-36.pyc │ │ ├── puhui.cpython-36.pyc │ │ ├── qiniu.cpython-36.pyc │ │ ├── radware.cpython-36.pyc │ │ ├── reblaze.cpython-36.pyc │ │ ├── rsfirewall.cpython-36.pyc │ │ ├── rvmode.cpython-36.pyc │ │ ├── sabre.cpython-36.pyc │ │ ├── safe3.cpython-36.pyc │ │ ├── safedog.cpython-36.pyc │ │ ├── safeline.cpython-36.pyc │ │ ├── secking.cpython-36.pyc │ │ ├── secupress.cpython-36.pyc │ │ ├── secureentry.cpython-36.pyc │ │ ├── secureiis.cpython-36.pyc │ │ ├── securesphere.cpython-36.pyc │ │ ├── senginx.cpython-36.pyc │ │ ├── serverdefender.cpython-36.pyc │ │ ├── shadowd.cpython-36.pyc │ │ ├── shieldsecurity.cpython-36.pyc │ │ ├── siteground.cpython-36.pyc │ │ ├── siteguard.cpython-36.pyc │ │ ├── sitelock.cpython-36.pyc │ │ ├── sonicwall.cpython-36.pyc │ │ ├── sophos.cpython-36.pyc │ │ ├── squarespace.cpython-36.pyc │ │ ├── squidproxy.cpython-36.pyc │ │ ├── stackpath.cpython-36.pyc │ │ ├── sucuri.cpython-36.pyc │ │ ├── tencent.cpython-36.pyc │ │ ├── teros.cpython-36.pyc │ │ ├── transip.cpython-36.pyc │ │ ├── uewaf.cpython-36.pyc │ │ ├── urlmaster.cpython-36.pyc │ │ ├── urlscan.cpython-36.pyc │ │ ├── varnish.cpython-36.pyc │ │ ├── viettel.cpython-36.pyc │ │ ├── virusdie.cpython-36.pyc │ │ ├── wallarm.cpython-36.pyc │ │ ├── watchguard.cpython-36.pyc │ │ ├── webarx.cpython-36.pyc │ │ ├── webknight.cpython-36.pyc │ │ ├── webland.cpython-36.pyc │ │ ├── webray.cpython-36.pyc │ │ ├── webseal.cpython-36.pyc │ │ ├── webtotem.cpython-36.pyc │ │ ├── west263cdn.cpython-36.pyc │ │ ├── wordfence.cpython-36.pyc │ │ ├── wts.cpython-36.pyc │ │ ├── wzb360.cpython-36.pyc │ │ ├── xlabssecuritywaf.cpython-36.pyc │ │ ├── xuanwudun.cpython-36.pyc │ │ ├── yundun.cpython-36.pyc │ │ ├── yunsuo.cpython-36.pyc │ │ ├── yxlink.cpython-36.pyc │ │ ├── zenedge.cpython-36.pyc │ │ └── zscaler.cpython-36.pyc │ ├── aesecure.py │ ├── airee.py │ ├── airlock.py │ ├── alertlogic.py │ ├── aliyundun.py │ ├── anquanbao.py │ ├── anyu.py │ ├── approach.py │ ├── armor.py │ ├── arvancloud.py │ ├── aspa.py │ ├── aspnetgen.py │ ├── astra.py │ ├── awswaf.py │ ├── azion.py │ ├── baidu.py │ ├── barikode.py │ ├── barracuda.py │ ├── bekchy.py │ ├── beluga.py │ ├── binarysec.py │ ├── bitninja.py │ ├── blockdos.py │ ├── bluedon.py │ ├── bulletproof.py │ ├── cachefly.py │ ├── cachewall.py │ ├── cdnns.py │ ├── cerber.py │ ├── chinacache.py │ ├── chuangyu.py │ ├── ciscoacexml.py │ ├── cloudbric.py │ ├── cloudflare.py │ ├── cloudfloordns.py │ ├── cloudfront.py │ ├── comodo.py │ ├── crawlprotect.py │ ├── denyall.py │ ├── distil.py │ ├── dosarrest.py │ ├── dotdefender.py │ ├── dynamicweb.py │ ├── edgecast.py │ ├── eisoo.py │ ├── expressionengine.py │ ├── f5bigipapm.py │ ├── f5bigipasm.py │ ├── f5bigipltm.py │ ├── f5firepass.py │ ├── f5trafficshield.py │ ├── fastly.py │ ├── fortiweb.py │ ├── frontdoor.py │ ├── godaddy.py │ ├── greywizard.py │ ├── huaweicloud.py │ ├── hyperguard.py │ ├── ibmdatapower.py │ ├── imunify360.py │ ├── incapsula.py │ ├── indusguard.py │ ├── instartdx.py │ ├── isaserver.py │ ├── janusec.py │ ├── jiasule.py │ ├── keycdn.py │ ├── knownsec.py │ ├── kona.py │ ├── limelight.py │ ├── litespeed.py │ ├── malcare.py │ ├── maxcdn.py │ ├── missioncontrol.py │ ├── modsecurity.py │ ├── naxsi.py │ ├── nemesida.py │ ├── netcontinuum.py │ ├── netscaler.py │ ├── nevisproxy.py │ ├── newdefend.py │ ├── nexusguard.py │ ├── ninja.py │ ├── nsfocus.py │ ├── nullddos.py │ ├── onmessage.py │ ├── openresty.py │ ├── oraclecloud.py │ ├── paloalto.py │ ├── pentawaf.py │ ├── perimeterx.py │ ├── pksec.py │ ├── powercdn.py │ ├── profense.py │ ├── ptaf.py │ ├── puhui.py │ ├── qiniu.py │ ├── radware.py │ ├── reblaze.py │ ├── rsfirewall.py │ ├── rvmode.py │ ├── sabre.py │ ├── safe3.py │ ├── safedog.py │ ├── safeline.py │ ├── secking.py │ ├── secupress.py │ ├── secureentry.py │ ├── secureiis.py │ ├── securesphere.py │ ├── senginx.py │ ├── serverdefender.py │ ├── shadowd.py │ ├── shieldsecurity.py │ ├── siteground.py │ ├── siteguard.py │ ├── sitelock.py │ ├── sonicwall.py │ ├── sophos.py │ ├── squarespace.py │ ├── squidproxy.py │ ├── stackpath.py │ ├── sucuri.py │ ├── tencent.py │ ├── teros.py │ ├── transip.py │ ├── uewaf.py │ ├── urlmaster.py │ ├── urlscan.py │ ├── varnish.py │ ├── viettel.py │ ├── virusdie.py │ ├── wallarm.py │ ├── watchguard.py │ ├── webarx.py │ ├── webknight.py │ ├── webland.py │ ├── webray.py │ ├── webseal.py │ ├── webtotem.py │ ├── west263cdn.py │ ├── wordfence.py │ ├── wts.py │ ├── wzb360.py │ ├── xlabssecuritywaf.py │ ├── xuanwudun.py │ ├── yundun.py │ ├── yunsuo.py │ ├── yxlink.py │ ├── zenedge.py │ └── zscaler.py │ └── wafprio.py ├── common.py ├── config.py ├── lib ├── css │ └── bootstrap.min.css ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 ├── imgs │ ├── operating.png │ └── result.png └── whois │ ├── __init__.py │ ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── parser.cpython-36.pyc │ └── whois.cpython-36.pyc │ ├── data │ └── public_suffix_list.dat │ ├── parser.py │ ├── time_zones.py │ └── whois.py ├── main.py ├── output └── www.xxx.com_report.html ├── request.py └── requestments.txt /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2021, kracer127 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

SiteScan

2 | 3 |

渗透本质--信息收集

4 |

5 | SiteScan 6 | SiteScan 7 | SiteScan 8 |

9 | 10 | ## 🏝 0x01 介绍 11 | 作者:kracer 12 | 13 | 定位:专注一站式解决渗透测试的信息收集任务。 14 | 15 | 语言:python3开发 16 | 17 | 功能:包括域名ip历史解析、nmap常见端口爆破、子域名信息收集、旁站信息收集、whois信息收集、网站架构分析、cms解析、备案号信息收集、CDN信息解析、是否存在waf检测、后台寻找以及生成检测结果html报告表等。 18 | 19 | 20 | 21 | ## 🎸0x02 安装使用 22 | 23 | 1、所需库安装 24 | 25 | ```python 26 | pip3 install -r requirements.txt 27 | ``` 28 | 29 | 2、使用 30 | 31 | ```python 32 | >>python3 main.py -u http://www.xxx.com 33 | >>python3 main.py -f url.txt 34 | >>python3 main.py -u http://www.xxx.com -p http://127.0.0.1:8080 35 | ``` 36 | 37 | 3、说明 38 | 39 | ```python 40 | 文件夹:lib文件夹 --- 配置文件。 41 | 文件夹: output文件夹 --- 探测结果生成的html报告表。 42 | 文件夹:Third --- 第三方模块, 包含wafwoof识别云waf、JSFinder爬取js文件。 43 | 文件:commom.py --- 用户输入处理、网址存活检测及处理最终结果并生成html报告。 44 | 文件:config.py --- requests库的请求设置:header头部、超时时间、google的url提取量、网络错误尝试次数、重定向和代理设置,以及定义扫描的端口。 45 | 文件:main.py --- 主函数入口。 46 | 文件:request.py --- 封装的所有请求类。 47 | ``` 48 | 49 | 50 | 51 | ## 💡0x03 效果展示 52 | **1、程序运行过程:** 53 | 54 | operating 55 | 56 | 57 | 58 | **2、生成的html报告:** 59 | 60 | result 61 | 62 | ## 📝0x04 声明: 63 | 64 | ​ **本项目仅供学习, 测试, 交流使用, 勿用于非法用途。** 65 | 66 | ​ **请使用者遵守《中华人民共和国网络安全法》,勿用于非授权测试,如作他用所承受的法律责任一概与** 67 | 68 | **作者无关,下载使用即代表使用者同意上述观点**。 69 | 70 | ​ **喜欢❤️请收藏给一个star吧👍** 71 | 72 | ​ **借鉴:**https://github.com/Threezh1/JSFinder 73 | 74 | ​ https://github.com/EnableSecurity/wafw00f 75 | -------------------------------------------------------------------------------- /Third/JSFinder.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python" 2 | # coding: utf-8 3 | # By Threezh1 4 | # https://threezh1.github.io/ 5 | 6 | 7 | from requests.packages import urllib3 8 | urllib3.disable_warnings() 9 | import requests, argparse, sys, re 10 | from urllib.parse import urlparse 11 | from bs4 import BeautifulSoup 12 | import gevent 13 | from gevent import Greenlet 14 | from gevent.queue import Queue 15 | 16 | 17 | tasks = Queue() 18 | 19 | 20 | def extract_URL(JS): 21 | pattern_raw = r""" 22 | (?:"|') # Start newline delimiter 23 | ( 24 | ((?:[a-zA-Z]{1,10}://|//) # Match a scheme [a-Z]*1-10 or // 25 | [^"'/]{1,}\. # Match a domainname (any character + dot) 26 | [a-zA-Z]{2,}[^"']{0,}) # The domainextension and/or path 27 | | 28 | ((?:/|\.\./|\./) # Start with /,../,./ 29 | [^"'><,;| *()(%%$^/\\\[\]] # Next character can't be... 30 | [^"'><,;|()]{1,}) # Rest of the characters can't be 31 | | 32 | ([a-zA-Z0-9_\-/]{1,}/ # Relative endpoint with / 33 | [a-zA-Z0-9_\-/]{1,} # Resource name 34 | \.(?:[a-zA-Z]{1,4}|action) # Rest + extension (length 1-4 or action) 35 | (?:[\?|/][^"|']{0,}|)) # ? mark with parameters 36 | | 37 | ([a-zA-Z0-9_\-]{1,} # filename 38 | \.(?:php|asp|aspx|jsp|json| 39 | action|html|js|txt|xml) # . + extension 40 | (?:\?[^"|']{0,}|)) # ? mark with parameters 41 | ) 42 | (?:"|') # End newline delimiter 43 | """ 44 | pattern = re.compile(pattern_raw, re.VERBOSE) 45 | result = re.finditer(pattern, str(JS)) 46 | if result == None: 47 | return None 48 | js_url = [] 49 | return [match.group().strip('"').strip("'") for match in result 50 | if match.group() not in js_url] 51 | 52 | # Get the page source 53 | def Extract_html(URL): 54 | header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36"} 55 | try: 56 | raw = requests.get(URL, headers=header, timeout=10, verify=False) 57 | raw = raw.content.decode("utf-8", "ignore") 58 | return raw 59 | except: 60 | return None 61 | 62 | # Handling relative URLs 63 | def process_url(URL, re_URL): 64 | black_url = ["javascript:"] # Add some keyword for filter url. 65 | URL_raw = urlparse(URL) 66 | ab_URL = URL_raw.netloc 67 | host_URL = URL_raw.scheme 68 | if re_URL[0:2] == "//": 69 | result = host_URL + ":" + re_URL 70 | elif re_URL[0:4] == "http": 71 | result = re_URL 72 | elif re_URL[0:2] != "//" and re_URL not in black_url: 73 | if re_URL[0:1] == "/": 74 | result = host_URL + "://" + ab_URL + re_URL 75 | else: 76 | if re_URL[0:1] == ".": 77 | if re_URL[0:2] == "..": 78 | result = host_URL + "://" + ab_URL + re_URL[2:] 79 | else: 80 | result = host_URL + "://" + ab_URL + re_URL[1:] 81 | else: 82 | result = host_URL + "://" + ab_URL + "/" + re_URL 83 | else: 84 | result = URL 85 | return result 86 | 87 | def find_last(string,str): 88 | positions = [] 89 | last_position = -1 90 | while True: 91 | position = string.find(str, last_position+1) 92 | if position == -1:break 93 | last_position = position 94 | positions.append(position) 95 | return positions 96 | 97 | def find_robots(url1): 98 | header = {"Host": url1, "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36"} 99 | robots_txt = [] 100 | url_real = 'http://'+url1+'/robots.txt' 101 | try: 102 | r = requests.get(url=url_real, headers=header, timeout=10, verify=False).text 103 | if r == None: 104 | return robots_txt 105 | else: 106 | if 'User-agent:' in r: 107 | paths = re.findall('(/(.*?).*)', r) 108 | for path in paths: 109 | path_str = 'http://'+url1+path[0] 110 | robots_txt.append(path_str) 111 | return robots_txt 112 | except Exception as e: 113 | return [] 114 | 115 | def find_by_url(url): 116 | html_raw = Extract_html(url) 117 | if html_raw == None: 118 | tasks.put_nowait(url) 119 | return [] 120 | else: 121 | html = BeautifulSoup(html_raw, "html.parser") 122 | html_scripts = html.findAll("script") 123 | script_array = {} 124 | script_temp = "" 125 | for html_script in html_scripts: 126 | script_src = html_script.get("src") 127 | if script_src == None: 128 | script_temp += html_script.get_text() + "\n" 129 | else: 130 | purl = process_url(url, script_src) 131 | script_array[purl] = Extract_html(purl) 132 | script_array[url] = script_temp 133 | allurls = [] 134 | for script in script_array: 135 | #print(script) 136 | temp_urls = extract_URL(script_array[script]) 137 | if len(temp_urls) == 0: continue 138 | for temp_url in temp_urls: 139 | allurls.append(process_url(script, temp_url)) 140 | result = [] 141 | for singerurl in allurls: 142 | url_raw = urlparse(url) 143 | domain = url_raw.netloc 144 | positions = find_last(domain, ".") 145 | miandomain = domain 146 | if len(positions) > 1:miandomain = domain[positions[-2] + 1:] 147 | #print(miandomain) 148 | suburl = urlparse(singerurl) 149 | subdomain = suburl.netloc 150 | #print(singerurl) 151 | if miandomain in subdomain or subdomain.strip() == "": 152 | if singerurl.strip() not in result: 153 | result.append(singerurl) 154 | return list(set(result)) 155 | 156 | def find_subdomain(urls, mainurl): 157 | subdomain = mainurl.split('.') 158 | if len(subdomain) == 3: 159 | subdomain = '.'.join(subdomain[1:]) 160 | elif len(subdomain) == 2: 161 | subdomain = mainurl 162 | else: 163 | subdomain = '.'.join(subdomain[-3:]) 164 | tempDomain_list = [] 165 | for i in urls: 166 | getChar = i[0:i.find(subdomain)].split('//')[-1] 167 | if getChar != '': 168 | newDomain = getChar + subdomain 169 | tempDomain_list.append(newDomain) 170 | return tempDomain_list 171 | 172 | def Prepare(allDict, url1): 173 | if not url1.startswith('http'): 174 | url1 = url1.split('/')[0] 175 | url = 'http://' + url1 176 | else: 177 | domain = url1[url1.find(':')+3:] 178 | subdomain = domain.split('/')[0] 179 | url = url1 180 | url1 = subdomain # url = 'http://'+url1 181 | html_raw = Extract_html(url) 182 | if (html_raw != None) and (url not in allDict['urlPATH']): 183 | html = BeautifulSoup(html_raw, "html.parser") 184 | html_as = html.findAll("a") 185 | links = find_robots(url1) 186 | for html_a in html_as: 187 | src = html_a.get("href") 188 | if src == "" or src == None: continue 189 | link = process_url(url, src) 190 | if link not in links: 191 | links.append(link) 192 | new_links = [] 193 | for j in links: 194 | if url1 in j: 195 | new_links.append(j.strip('\r')) 196 | print("\033[1;36m[+] 当前网址一共找到" + str(len(new_links)) + "条links!\033[0m") 197 | '''多协程进行爬取''' 198 | gevent_list = [] 199 | for k in new_links: 200 | tasks.put_nowait(k) 201 | for t in range(100): 202 | gev = gevent.spawn(find_by_url_deep, allDict, new_links, url1) 203 | gevent_list.append(gev) 204 | gevent.joinall(gevent_list) 205 | print("\033[1;34m[*] 完成当前网址的所有js文件信息提取!!\033[0m") 206 | else: 207 | print('\033[1;35m[-] 当前网址不可访问,执行跳过!\033[0m') 208 | 209 | def find_by_url_deep(allDict, new_links, url1): 210 | while not tasks.empty(): 211 | link = tasks.get_nowait() 212 | if (link not in allDict['urlPATH']): 213 | temp_urls = find_by_url(link) 214 | print("\033[1;36m[+] 在探测URL " + link +" 中找到" + str(len(temp_urls)) + "条数据!\033[0m") 215 | else: 216 | temp_urls = [] 217 | if temp_urls != []: 218 | for temp_url in temp_urls: 219 | if (temp_url.strip('\r') not in new_links) and (url1 in temp_url): 220 | new_links.append(temp_url) 221 | tasks.put_nowait(temp_url) 222 | giveresult(allDict, new_links, url1) 223 | 224 | def giveresult(allDict, urls, domian): 225 | if urls == None: 226 | allDict['urlPATH'] += [] 227 | domain_list = [] 228 | for url in urls: 229 | if domian in url: 230 | allDict['urlPATH'].append(url) 231 | domain_list.append(url) 232 | subdomains = find_subdomain(domain_list, domian) 233 | if subdomains == []: 234 | allDict['domain'] += [] 235 | else: 236 | allDict['domain'] += subdomains 237 | 238 | 239 | -------------------------------------------------------------------------------- /Third/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | # Date: 2021-09-03 3 | # Author:kracer 4 | # Version: 1.0 5 | 6 | -------------------------------------------------------------------------------- /Third/wafw00f/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | __version__ = '2.1.0' 4 | __license__ = 'BSD 3-Clause' 5 | -------------------------------------------------------------------------------- /Third/wafw00f/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/__pycache__/entrance.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/__pycache__/entrance.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/__pycache__/main.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/__pycache__/main.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/__pycache__/main1.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/__pycache__/main1.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/__pycache__/manager.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/__pycache__/manager.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/__pycache__/wafprio.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/__pycache__/wafprio.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/entrance.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | ''' 4 | Copyright (C) 2020, WAFW00F Developers. 5 | See the LICENSE file for copying permission. 6 | ''' 7 | # For keeping python2 support for now 8 | from __future__ import print_function 9 | 10 | import csv 11 | import io 12 | import json 13 | import logging 14 | import os 15 | import random 16 | import re 17 | import sys 18 | from collections import defaultdict 19 | from optparse import OptionParser 20 | from Third.wafw00f.lib.asciiarts import * 21 | from Third.wafw00f import __version__, __license__ 22 | from Third.wafw00f.manager import load_plugins 23 | from Third.wafw00f.wafprio import wafdetectionsprio 24 | from Third.wafw00f.lib.evillib import urlParser, waftoolsengine, def_headers 25 | 26 | 27 | 28 | class WAFW00F(waftoolsengine): 29 | 30 | xsstring = '' 31 | sqlistring = "UNION SELECT ALL FROM information_schema AND ' or SLEEP(5) or '" 32 | lfistring = '../../../../etc/passwd' 33 | rcestring = '/bin/cat /etc/passwd; ping 127.0.0.1; curl google.com' 34 | xxestring = ']>&hack;' 35 | 36 | def __init__(self, target='www.example.com', debuglevel=0, path='/', 37 | followredirect=True, extraheaders={}, proxies=None): 38 | 39 | self.log = logging.getLogger('wafw00f') 40 | self.attackres = None 41 | waftoolsengine.__init__(self, target, debuglevel, path, proxies, followredirect, extraheaders) 42 | self.knowledge = dict(generic=dict(found=False, reason=''), wafname=list()) 43 | 44 | def normalRequest(self): 45 | return self.Request() 46 | 47 | def customRequest(self, headers=None): 48 | return self.Request(headers=headers) 49 | 50 | def nonExistent(self): 51 | return self.Request(path=self.path + str(random.randrange(100, 999)) + '.html') 52 | 53 | def xssAttack(self): 54 | return self.Request(path=self.path, params= {'s': self.xsstring}) 55 | 56 | def xxeAttack(self): 57 | return self.Request(path=self.path, params= {'s': self.xxestring}) 58 | 59 | def lfiAttack(self): 60 | return self.Request(path=self.path + self.lfistring) 61 | 62 | def centralAttack(self): 63 | return self.Request(path=self.path, params={'a': self.xsstring, 'b': self.sqlistring, 'c': self.lfistring}) 64 | 65 | def sqliAttack(self): 66 | return self.Request(path=self.path, params= {'s': self.sqlistring}) 67 | 68 | def oscAttack(self): 69 | return self.Request(path=self.path, params= {'s': self.rcestring}) 70 | 71 | def performCheck(self, request_method): 72 | r = request_method() 73 | if r is None: 74 | raise RequestBlocked() 75 | return r 76 | 77 | # Most common attacks used to detect WAFs 78 | attcom = [xssAttack, sqliAttack, lfiAttack] 79 | attacks = [xssAttack, xxeAttack, lfiAttack, sqliAttack, oscAttack] 80 | 81 | def genericdetect(self): 82 | reason = '' 83 | reasons = ['Blocking is being done at connection/packet level.', 84 | 'The server header is different when an attack is detected.', 85 | 'The server returns a different response code when an attack string is used.', 86 | 'It closed the connection for a normal request.', 87 | 'The response was different when the request wasn\'t made from a browser.' 88 | ] 89 | try: 90 | # Testing for no user-agent response. Detects almost all WAFs out there. 91 | resp1 = self.performCheck(self.normalRequest) 92 | if 'User-Agent' in self.headers: 93 | del self.headers['User-Agent'] # Deleting the user-agent key from object not dict. 94 | resp3 = self.customRequest(headers=def_headers) 95 | if resp1.status_code != resp3.status_code: 96 | reason = reasons[4] 97 | reason += '\r\n' 98 | reason += 'Normal response code is "%s",' % resp1.status_code 99 | reason += ' while the response code to a modified request is "%s"' % resp3.status_code 100 | self.knowledge['generic']['reason'] = reason 101 | self.knowledge['generic']['found'] = True 102 | return True 103 | 104 | # Testing the status code upon sending a xss attack 105 | resp2 = self.performCheck(self.xssAttack) 106 | if resp1.status_code != resp2.status_code: 107 | reason = reasons[2] 108 | reason += '\r\n' 109 | reason += 'Normal response code is "%s",' % resp1.status_code 110 | reason += ' while the response code to cross-site scripting attack is "%s"' % resp2.status_code 111 | self.knowledge['generic']['reason'] = reason 112 | self.knowledge['generic']['found'] = True 113 | return True 114 | 115 | # Testing the status code upon sending a lfi attack 116 | resp2 = self.performCheck(self.lfiAttack) 117 | if resp1.status_code != resp2.status_code: 118 | reason = reasons[2] 119 | reason += '\r\n' 120 | reason += 'Normal response code is "%s",' % resp1.status_code 121 | reason += ' while the response code to a file inclusion attack is "%s"' % resp2.status_code 122 | self.knowledge['generic']['reason'] = reason 123 | self.knowledge['generic']['found'] = True 124 | return True 125 | 126 | # Testing the status code upon sending a sqli attack 127 | resp2 = self.performCheck(self.sqliAttack) 128 | if resp1.status_code != resp2.status_code: 129 | reason = reasons[2] 130 | reason += '\r\n' 131 | reason += 'Normal response code is "%s",' % resp1.status_code 132 | reason += ' while the response code to a SQL injection attack is "%s"' % resp2.status_code 133 | self.knowledge['generic']['reason'] = reason 134 | self.knowledge['generic']['found'] = True 135 | return True 136 | 137 | # Checking for the Server header after sending malicious requests 138 | response = self.attackres 139 | normalserver = resp1.headers.get('Server') 140 | attackresponse_server = response.headers.get('Server') 141 | if attackresponse_server: 142 | if attackresponse_server != normalserver: 143 | reason = reasons[1] 144 | reason += '\r\nThe server header for a normal response is "%s",' % normalserver 145 | reason += ' while the server header a response to an attack is "%s",' % attackresponse_server 146 | self.knowledge['generic']['reason'] = reason 147 | self.knowledge['generic']['found'] = True 148 | return True 149 | 150 | # If at all request doesn't go, press F 151 | except RequestBlocked: 152 | self.knowledge['generic']['reason'] = reasons[0] 153 | self.knowledge['generic']['found'] = True 154 | return True 155 | return False 156 | 157 | def matchHeader(self, headermatch, attack=False): 158 | if attack: 159 | r = self.attackres 160 | else: r = rq 161 | if r is None: 162 | return 163 | header, match = headermatch 164 | headerval = r.headers.get(header) 165 | if headerval: 166 | # set-cookie can have multiple headers, python gives it to us 167 | # concatinated with a comma 168 | if header == 'Set-Cookie': 169 | headervals = headerval.split(', ') 170 | else: 171 | headervals = [headerval] 172 | for headerval in headervals: 173 | if re.search(match, headerval, re.I): 174 | return True 175 | return False 176 | 177 | def matchStatus(self, statuscode, attack=True): 178 | if attack: 179 | r = self.attackres 180 | else: r = rq 181 | if r is None: 182 | return 183 | if r.status_code == statuscode: 184 | return True 185 | return False 186 | 187 | def matchCookie(self, match, attack=False): 188 | return self.matchHeader(('Set-Cookie', match), attack=attack) 189 | 190 | def matchReason(self, reasoncode, attack=True): 191 | if attack: 192 | r = self.attackres 193 | else: r = rq 194 | if r is None: 195 | return 196 | # We may need to match multiline context in response body 197 | if str(r.reason) == reasoncode: 198 | return True 199 | return False 200 | 201 | def matchContent(self, regex, attack=True): 202 | if attack: 203 | r = self.attackres 204 | else: r = rq 205 | if r is None: 206 | return 207 | # We may need to match multiline context in response body 208 | if re.search(regex, r.text, re.I): 209 | return True 210 | return False 211 | 212 | wafdetections = dict() 213 | 214 | plugin_dict = load_plugins() 215 | result_dict = {} 216 | for plugin_module in plugin_dict.values(): 217 | wafdetections[plugin_module.NAME] = plugin_module.is_waf 218 | # Check for prioritized ones first, then check those added externally 219 | checklist = wafdetectionsprio 220 | checklist += list(set(wafdetections.keys()) - set(checklist)) 221 | 222 | def identwaf(self, findall=False): 223 | detected = list() 224 | try: 225 | self.attackres = self.performCheck(self.centralAttack) 226 | except RequestBlocked: 227 | return detected 228 | for wafvendor in self.checklist: 229 | if self.wafdetections[wafvendor](self): 230 | detected.append(wafvendor) 231 | if not findall: 232 | break 233 | self.knowledge['wafname'] = detected 234 | return detected 235 | 236 | def calclogginglevel(verbosity): 237 | default = 40 # errors are printed out 238 | level = default - (verbosity * 10) 239 | if level < 0: 240 | level = 0 241 | return level 242 | 243 | def buildResultRecord(url, waf): 244 | result = {} 245 | result['url'] = url 246 | if waf: 247 | result['detected'] = True 248 | if waf == 'generic': 249 | result['firewall'] = 'Generic' 250 | result['manufacturer'] = 'Unknown' 251 | else: 252 | result['firewall'] = waf.split('(')[0].strip() 253 | result['manufacturer'] = waf.split('(')[1].replace(')', '').strip() 254 | else: 255 | result['detected'] = False 256 | result['firewall'] = 'None' 257 | result['manufacturer'] = 'None' 258 | return result 259 | 260 | def getTextResults(res=None): 261 | # leaving out some space for future possibilities of newer columns 262 | # newer columns can be added to this tuple below 263 | keys = ('detected') 264 | res = [({key: ba[key] for key in ba if key not in keys}) for ba in res] 265 | rows = [] 266 | for dk in res: 267 | p = [str(x) for _, x in dk.items()] 268 | rows.append(p) 269 | for m in rows: 270 | m[1] = '%s (%s)' % (m[1], m[2]) 271 | m.pop() 272 | defgen = [ 273 | (max([len(str(row[i])) for row in rows]) + 3) 274 | for i in range(len(rows[0])) 275 | ] 276 | rwfmt = "".join(["{:>"+str(dank)+"}" for dank in defgen]) 277 | textresults = [] 278 | for row in rows: 279 | textresults.append(rwfmt.format(*row)) 280 | return textresults 281 | 282 | def disableStdOut(): 283 | sys.stdout = None 284 | 285 | def enableStdOut(): 286 | sys.stdout = sys.__stdout__ 287 | 288 | def getheaders(fn): 289 | headers = {} 290 | if not os.path.exists(fn): 291 | logging.getLogger('wafw00f').critical('Headers file "%s" does not exist!' % fn) 292 | return 293 | with io.open(fn, 'r', encoding='utf-8') as f: 294 | for line in f.readlines(): 295 | _t = line.split(':', 2) 296 | if len(_t) == 2: 297 | h, v = map(lambda x: x.strip(), _t) 298 | headers[h] = v 299 | return headers 300 | 301 | class RequestBlocked(Exception): 302 | pass 303 | 304 | def main(allDict, target): 305 | global rq 306 | results = [] 307 | if not target.startswith('http'): 308 | target = 'http://' + target 309 | if not target.endswith('/'): 310 | target = target + '/' 311 | attacker = WAFW00F(target, debuglevel=0, path='/', 312 | followredirect=True, extraheaders={}, 313 | proxies=None) 314 | rq = attacker.normalRequest() 315 | if rq is None: 316 | print('\033[1;31m[-] 网址 {0} 不可访问, 侦测waf类型失败!\033[0m'.format(target)) 317 | waf = attacker.identwaf(True) 318 | if len(waf) > 0: 319 | allDict['framework'][2] = {'waf': str(waf)} 320 | if len(waf) == 0: 321 | allDict['framework'][2] = {'waf': '没有侦测到waf'} 322 | 323 | 324 | 325 | 326 | -------------------------------------------------------------------------------- /Third/wafw00f/lib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/lib/__init__.py -------------------------------------------------------------------------------- /Third/wafw00f/lib/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/lib/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/lib/__pycache__/asciiarts.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/lib/__pycache__/asciiarts.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/lib/__pycache__/evillib.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/lib/__pycache__/evillib.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/lib/asciiarts.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | from sys import platform 8 | from random import randint 9 | from Third.wafw00f import __version__ 10 | 11 | # Colors for terminal 12 | W = '\033[1;97m' 13 | Y = '\033[1;93m' 14 | G = '\033[1;92m' 15 | R = '\033[1;91m' 16 | B = '\033[1;94m' 17 | C = '\033[1;96m' 18 | E = '\033[0m' 19 | 20 | # Windows based systems do not support ANSI sequences, 21 | # hence not displaying them. 22 | if 'win' in platform: 23 | W = Y = G = R = B = C = E = '' 24 | 25 | def randomArt(): 26 | 27 | woof = ''' 28 | '''+W+'''______ 29 | '''+W+'''/ \\ 30 | '''+W+'''( Woof! ) 31 | '''+W+r'''\ ____/ '''+R+''') 32 | '''+W+''',, '''+R+''') ('''+Y+'''_ 33 | '''+Y+'''.-. '''+W+'''- '''+G+'''_______ '''+R+'''( '''+Y+'''|__| 34 | '''+Y+'''()``; '''+G+'''|==|_______) '''+R+'''.)'''+Y+'''|__| 35 | '''+Y+'''/ (' '''+G+'''/|\ '''+R+'''( '''+Y+'''|__| 36 | '''+Y+'''( / ) '''+G+''' / | \ '''+R+'''. '''+Y+'''|__| 37 | '''+Y+r'''\(_)_)) '''+G+'''/ | \ '''+Y+'''|__|'''+E+''' 38 | 39 | '''+C+'~ WAFW00F : '+B+'v'+__version__+''' ~'''+W+''' 40 | The Web Application Firewall Fingerprinting Toolkit 41 | '''+E 42 | 43 | w00f = ''' 44 | '''+W+'''______ 45 | '''+W+'''/ \\ 46 | '''+W+'''( W00f! ) 47 | '''+W+'''\ ____/ 48 | '''+W+''',, '''+G+'''__ '''+Y+'''404 Hack Not Found 49 | '''+C+'''|`-.__ '''+G+'''/ / '''+R+''' __ __ 50 | '''+C+'''/" _/ '''+G+'''/_/ '''+R+'''\ \ / / 51 | '''+B+'''*===* '''+G+'''/ '''+R+'''\ \_/ / '''+Y+'''405 Not Allowed 52 | '''+C+'''/ )__// '''+R+'''\ / 53 | '''+C+'''/| / /---` '''+Y+'''403 Forbidden 54 | '''+C+r'''\\/` \ | '''+R+'''/ _ \\ 55 | '''+C+r'''`\ /_\\_ '''+Y+'''502 Bad Gateway '''+R+'''/ / \ \ '''+Y+'''500 Internal Error 56 | '''+C+'''`_____``-` '''+R+'''/_/ \_\\ 57 | 58 | '''+C+'~ WAFW00F : '+B+'v'+__version__+''' ~'''+W+''' 59 | The Web Application Firewall Fingerprinting Toolkit 60 | '''+E 61 | 62 | arts = [woof, w00f] 63 | return arts[randint(0,1)] -------------------------------------------------------------------------------- /Third/wafw00f/lib/evillib.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | import re 8 | import sys 9 | import time 10 | import logging 11 | from copy import copy 12 | 13 | import requests 14 | import urllib3 15 | try: 16 | from urlparse import urlparse, urlunparse 17 | except ImportError: 18 | from urllib.parse import urlparse, urlunparse 19 | try: 20 | from urllib import quote, unquote 21 | except ImportError: 22 | from urllib.parse import quote, unquote 23 | # For requests < 2.16, this should be used. 24 | # requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 25 | # For requests >= 2.16, this is the convention 26 | urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) 27 | 28 | def_headers = {'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', 29 | 'Accept-Encoding': 'gzip, deflate', 30 | 'Accept-Language': 'en-US,en;q=0.9', 31 | 'DNT' : '1', # Do Not Track request header 32 | 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3770.100 Safari/537.36', 33 | 'Upgrade-Insecure-Requests': '1' # 34 | } 35 | proxies = {} 36 | 37 | def urlParser(target): 38 | log = logging.getLogger('urlparser') 39 | 40 | ssl = False 41 | o = urlparse(target) 42 | if o[0] not in ['http', 'https', '']: 43 | log.error('scheme %s not supported' % o[0]) 44 | return 45 | if o[0] == 'https': 46 | ssl = True 47 | if len(o[2]) > 0: 48 | path = o[2] 49 | else: 50 | path = '/' 51 | tmp = o[1].split(':') 52 | if len(tmp) > 1: 53 | port = tmp[1] 54 | else: 55 | port = None 56 | hostname = tmp[0] 57 | query = o[4] 58 | return (hostname, port, path, query, ssl) 59 | 60 | class waftoolsengine: 61 | def __init__(self, target='https://example.com', debuglevel=0, path='/', proxies=None, 62 | redir=True, head=None): 63 | self.target = target 64 | self.debuglevel = debuglevel 65 | self.requestnumber = 0 66 | self.path = path 67 | self.redirectno = 0 68 | self.allowredir = redir 69 | self.proxies = proxies 70 | self.log = logging.getLogger('wafw00f') 71 | if head: 72 | self.headers = head 73 | else: 74 | self.headers = copy(def_headers) #copy object by value not reference. Fix issue #90 75 | 76 | def Request(self, headers=None, path=None, params={}, delay=0, timeout=7): 77 | try: 78 | time.sleep(delay) 79 | if not headers: 80 | h = self.headers 81 | else: h = headers 82 | req = requests.get(self.target, proxies=self.proxies, headers=h, timeout=timeout, 83 | allow_redirects=self.allowredir, params=params, verify=False) 84 | self.requestnumber += 1 85 | return req 86 | except requests.exceptions.RequestException as e: 87 | pass 88 | -------------------------------------------------------------------------------- /Third/wafw00f/manager.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | import os 8 | from functools import partial 9 | from pluginbase import PluginBase 10 | 11 | def load_plugins(): 12 | here = os.path.abspath(os.path.dirname(__file__)) 13 | get_path = partial(os.path.join, here) 14 | plugin_dir = get_path('plugins') 15 | 16 | plugin_base = PluginBase( 17 | package='Third.wafw00f.plugins', searchpath=[plugin_dir] 18 | ) 19 | plugin_source = plugin_base.make_plugin_source( 20 | searchpath=[plugin_dir], persist=True 21 | ) 22 | 23 | plugin_dict = {} 24 | for plugin_name in plugin_source.list_plugins(): 25 | plugin_dict[plugin_name] = plugin_source.load_plugin(plugin_name) 26 | 27 | return plugin_dict 28 | -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__init__.py -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/aesecure.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/aesecure.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/airee.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/airee.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/airlock.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/airlock.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/alertlogic.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/alertlogic.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/aliyundun.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/aliyundun.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/anquanbao.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/anquanbao.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/anyu.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/anyu.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/approach.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/approach.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/armor.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/armor.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/arvancloud.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/arvancloud.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/aspa.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/aspa.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/aspnetgen.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/aspnetgen.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/astra.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/astra.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/awswaf.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/awswaf.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/azion.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/azion.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/baidu.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/baidu.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/barikode.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/barikode.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/barracuda.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/barracuda.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/bekchy.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/bekchy.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/beluga.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/beluga.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/binarysec.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/binarysec.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/bitninja.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/bitninja.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/blockdos.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/blockdos.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/bluedon.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/bluedon.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/bulletproof.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/bulletproof.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/cachefly.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/cachefly.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/cachewall.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/cachewall.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/cdnns.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/cdnns.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/cerber.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/cerber.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/chinacache.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/chinacache.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/chuangyu.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/chuangyu.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/ciscoacexml.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/ciscoacexml.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/cloudbric.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/cloudbric.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/cloudflare.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/cloudflare.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/cloudfloordns.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/cloudfloordns.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/cloudfront.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/cloudfront.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/comodo.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/comodo.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/crawlprotect.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/crawlprotect.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/denyall.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/denyall.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/distil.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/distil.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/dosarrest.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/dosarrest.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/dotdefender.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/dotdefender.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/dynamicweb.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/dynamicweb.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/edgecast.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/edgecast.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/eisoo.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/eisoo.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/expressionengine.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/expressionengine.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/f5bigipapm.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/f5bigipapm.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/f5bigipasm.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/f5bigipasm.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/f5bigipltm.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/f5bigipltm.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/f5firepass.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/f5firepass.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/f5trafficshield.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/f5trafficshield.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/fastly.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/fastly.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/fortiweb.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/fortiweb.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/frontdoor.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/frontdoor.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/godaddy.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/godaddy.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/greywizard.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/greywizard.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/huaweicloud.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/huaweicloud.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/hyperguard.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/hyperguard.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/ibmdatapower.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/ibmdatapower.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/imunify360.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/imunify360.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/incapsula.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/incapsula.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/indusguard.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/indusguard.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/instartdx.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/instartdx.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/isaserver.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/isaserver.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/janusec.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/janusec.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/jiasule.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/jiasule.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/keycdn.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/keycdn.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/knownsec.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/knownsec.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/kona.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/kona.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/limelight.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/limelight.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/litespeed.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/litespeed.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/malcare.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/malcare.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/maxcdn.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/maxcdn.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/missioncontrol.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/missioncontrol.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/modsecurity.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/modsecurity.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/naxsi.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/naxsi.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/nemesida.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/nemesida.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/netcontinuum.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/netcontinuum.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/netscaler.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/netscaler.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/nevisproxy.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/nevisproxy.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/newdefend.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/newdefend.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/nexusguard.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/nexusguard.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/ninja.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/ninja.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/nsfocus.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/nsfocus.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/nullddos.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/nullddos.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/onmessage.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/onmessage.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/openresty.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/openresty.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/oraclecloud.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/oraclecloud.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/paloalto.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/paloalto.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/pentawaf.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/pentawaf.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/perimeterx.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/perimeterx.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/pksec.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/pksec.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/powercdn.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/powercdn.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/profense.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/profense.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/ptaf.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/ptaf.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/puhui.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/puhui.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/qiniu.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/qiniu.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/radware.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/radware.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/reblaze.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/reblaze.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/rsfirewall.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/rsfirewall.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/rvmode.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/rvmode.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/sabre.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/sabre.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/safe3.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/safe3.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/safedog.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/safedog.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/safeline.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/safeline.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/secking.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/secking.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/secupress.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/secupress.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/secureentry.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/secureentry.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/secureiis.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/secureiis.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/securesphere.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/securesphere.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/senginx.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/senginx.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/serverdefender.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/serverdefender.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/shadowd.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/shadowd.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/shieldsecurity.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/shieldsecurity.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/siteground.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/siteground.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/siteguard.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/siteguard.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/sitelock.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/sitelock.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/sonicwall.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/sonicwall.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/sophos.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/sophos.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/squarespace.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/squarespace.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/squidproxy.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/squidproxy.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/stackpath.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/stackpath.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/sucuri.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/sucuri.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/tencent.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/tencent.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/teros.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/teros.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/transip.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/transip.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/uewaf.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/uewaf.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/urlmaster.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/urlmaster.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/urlscan.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/urlscan.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/varnish.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/varnish.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/viettel.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/viettel.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/virusdie.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/virusdie.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/wallarm.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/wallarm.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/watchguard.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/watchguard.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/webarx.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/webarx.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/webknight.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/webknight.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/webland.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/webland.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/webray.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/webray.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/webseal.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/webseal.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/webtotem.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/webtotem.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/west263cdn.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/west263cdn.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/wordfence.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/wordfence.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/wts.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/wts.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/wzb360.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/wzb360.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/xlabssecuritywaf.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/xlabssecuritywaf.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/xuanwudun.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/xuanwudun.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/yundun.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/yundun.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/yunsuo.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/yunsuo.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/yxlink.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/yxlink.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/zenedge.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/zenedge.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/__pycache__/zscaler.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/Third/wafw00f/plugins/__pycache__/zscaler.cpython-36.pyc -------------------------------------------------------------------------------- /Third/wafw00f/plugins/aesecure.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'aeSecure (aeSecure)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('aeSecure-code', '.+?')), 13 | self.matchContent(r'aesecure_denied\.png') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/airee.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'AireeCDN (Airee)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'Airee')), 13 | self.matchHeader(('X-Cache', r'(\w+\.)?airee\.cloud')), 14 | self.matchContent(r'airee\.cloud') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/airlock.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Airlock (Phion/Ergon)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | # This method of detection is old (though most reliable), so we check it first 13 | self.matchCookie(r'^al[_-]?(sess|lb)='), 14 | self.matchContent(r'server detected a syntax error in your request') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/alertlogic.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Alert Logic (Alert Logic)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'<(title|h\d{1})>requested url cannot be found'), 13 | self.matchContent(r'we are sorry.{0,10}?but the page you are looking for cannot be found'), 14 | self.matchContent(r'back to previous page'), 15 | self.matchContent(r'proceed to homepage'), 16 | self.matchContent(r'reference id'), 17 | ] 18 | if all(i for i in schemes): 19 | return True 20 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/aliyundun.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'AliYunDun (Alibaba Cloud Computing)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'error(s)?\.aliyun(dun)?\.(com|net)?'), 13 | self.matchCookie(r'^aliyungf_tc='), 14 | self.matchContent(r'cdn\.aliyun(cs)?\.com'), 15 | self.matchStatus(405) 16 | ] 17 | if all(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/anquanbao.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Anquanbao (Anquanbao)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-Powered-By-Anquanbao', '.+?')), 13 | self.matchContent(r'aqb_cc/error/') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/anyu.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'AnYu (AnYu Technologies)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'anyu.{0,10}?the green channel'), 13 | self.matchContent(r'your access has been intercepted by anyu') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/approach.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Approach (Approach)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | # This method of detection is old (though most reliable), so we check it first 13 | self.matchContent(r'approach.{0,10}?web application (firewall|filtering)'), 14 | self.matchContent(r'approach.{0,10}?infrastructure team') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/armor.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Armor Defense (Armor)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'blocked by website protection from armor'), 13 | self.matchContent(r'please create an armor support ticket') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/arvancloud.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'ArvanCloud (ArvanCloud)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'ArvanCloud')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/aspa.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'ASPA Firewall (ASPA Engineering Co.)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'ASPA[\-_]?WAF')), 13 | self.matchHeader(('ASPA-Cache-Status', r'.+?')) 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/aspnetgen.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'ASP.NET Generic (Microsoft)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'iis (\d+.)+?detailed error'), 13 | self.matchContent(r'potentially dangerous request querystring'), 14 | self.matchContent(r'application error from being viewed remotely (for security reasons)?'), 15 | self.matchContent(r'An application error occurred on the server'), 16 | ] 17 | if any(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/astra.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Astra (Czar Securities)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^cz_astra_csrf_cookie'), 13 | self.matchContent(r'astrawebsecurity\.freshdesk\.com'), 14 | self.matchContent(r'www\.getastra\.com/assets/images') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/awswaf.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'AWS Elastic Load Balancer (Amazon)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-AMZ-ID', '.+?')), 13 | self.matchHeader(('X-AMZ-Request-ID', '.+?')), 14 | self.matchCookie(r'^aws.?alb='), 15 | self.matchHeader(('Server', r'aws.?elb'), attack=True) 16 | ] 17 | if any(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/azion.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'AzionCDN (AzionCDN)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'Azion([-_]CDN)?')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/baidu.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Yunjiasu (Baidu Cloud Computing)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'Yunjiasu(.+)?')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/barikode.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Barikode (Ethic Ninja)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'barikode<.strong>'), 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/barracuda.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Barracuda (Barracuda Networks)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^barra_counter_session='), 13 | self.matchCookie(r'^BNI__BARRACUDA_LB_COOKIE='), 14 | self.matchCookie(r'^BNI_persistence='), 15 | self.matchCookie(r'^BN[IE]S_.*?='), 16 | self.matchContent(r'Barracuda.Networks') 17 | ] 18 | if any(i for i in schemes): 19 | return True 20 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/bekchy.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Bekchy (Faydata Technologies Inc.)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | # Both signatures are contained within response, so checking for any one of them 13 | # Sometimes I observed that there is an XHR request being being made to submit the 14 | # report data automatically upon page load. In those cases a missing https is causing 15 | # false negatives. 16 | self.matchContent(r'Bekchy.{0,10}?Access Denied'), 17 | self.matchContent(r'bekchy\.com/report') 18 | ] 19 | if any(i for i in schemes): 20 | return True 21 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/beluga.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Beluga CDN (Beluga)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'Beluga')), 13 | self.matchCookie(r'^beluga_request_trail=') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/binarysec.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'BinarySec (BinarySec)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'BinarySec')), 13 | self.matchHeader(('x-binarysec-via', '.+')), 14 | self.matchHeader(('x-binarysec-nocache', '.+')) 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/bitninja.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'BitNinja (BitNinja)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'Security check by BitNinja'), 13 | self.matchContent(r'Visitor anti-robot validation') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/blockdos.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'BlockDoS (BlockDoS)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'blockdos\.net')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/bluedon.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Bluedon (Bluedon IST)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | # Found sample servers returning 'Server: BDWAF/2.0' 13 | self.matchHeader(('Server', r'BDWAF')), 14 | self.matchContent(r'bluedon web application firewall') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/bulletproof.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'BulletProof Security Pro (AITpro Security)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'\+?bpsMessage'), 13 | self.matchContent(r'403 Forbidden Error Page'), 14 | self.matchContent(r'If you arrived here due to a search') 15 | ] 16 | if all(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/cachefly.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'CacheFly CDN (CacheFly)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('BestCDN', r'Cachefly')), 13 | self.matchCookie(r'^cfly_req.*=') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/cachewall.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'CacheWall (Varnish)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'Varnish')), 13 | self.matchHeader(('X-Varnish', '.+')), 14 | self.matchHeader(('X-Cachewall-Action', '.+?')), 15 | self.matchHeader(('X-Cachewall-Reason', '.+?')), 16 | self.matchContent(r'security by cachewall'), 17 | self.matchContent(r'403 naughty.{0,10}?not nice!'), 18 | self.matchContent(r'varnish cache server') 19 | ] 20 | if any(i for i in schemes): 21 | return True 22 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/cdnns.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'CdnNS Application Gateway (CdnNs/WdidcNet)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'cdnnswaf application gateway') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/cerber.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'WP Cerber Security (Cerber Tech)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'your request looks suspicious or similar to automated'), 13 | self.matchContent(r'our server stopped processing your request'), 14 | self.matchContent(r'We.re sorry.{0,10}?you are not allowed to proceed'), 15 | self.matchContent(r'requests from spam posting software'), 16 | self.matchContent(r'403 Access Forbidden') 17 | ] 18 | if all(i for i in schemes): 19 | return True 20 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/chinacache.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'ChinaCache Load Balancer (ChinaCache)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Powered-By-ChinaCache', '.+')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/chuangyu.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Chuang Yu Shield (Yunaq)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'www\.365cyd\.com'), 13 | self.matchContent(r'help\.365cyd\.com/cyd\-error\-help.html\?code=403') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/ciscoacexml.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'ACE XML Gateway (Cisco)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'ACE XML Gateway')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/cloudbric.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Cloudbric (Penta Security)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'<title>Cloudbric.{0,5}?ERROR!'), 13 | self.matchContent(r'Your request was blocked by Cloudbric'), 14 | self.matchContent(r'please contact Cloudbric Support'), 15 | self.matchContent(r'cloudbric\.zendesk\.com'), 16 | self.matchContent(r'Cloudbric Help Center'), 17 | self.matchContent(r'malformed request syntax.{0,4}?invalid request message framing.{0,4}?or deceptive request routing') 18 | ] 19 | if any(i for i in schemes): 20 | return True 21 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/cloudflare.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Cloudflare (Cloudflare Inc.)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('server', 'cloudflare')), 13 | self.matchHeader(('server', r'cloudflare[-_]nginx')), 14 | self.matchHeader(('cf-ray', r'.+?')), 15 | self.matchCookie('__cfduid') 16 | ] 17 | if any(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/cloudfloordns.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Cloudfloor (Cloudfloor DNS)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'CloudfloorDNS(.WAF)?')), 13 | self.matchContent(r'<(title|h\d{1})>CloudfloorDNS.{0,6}?Web Application Firewall Error'), 14 | self.matchContent(r'www\.cloudfloordns\.com/contact') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/cloudfront.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Cloudfront (Amazon)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | # This is standard detection schema, checking the server header 13 | self.matchHeader(('Server', 'Cloudfront')), 14 | # Found samples returning 'Via: 1.1 58bfg7h6fg76h8fg7jhdf2.cloudfront.net (CloudFront)' 15 | self.matchHeader(('Via', r'([0-9\.]+?)? \w+?\.cloudfront\.net \(Cloudfront\)')), 16 | # The request token is sent along with this header, eg: 17 | # X-Amz-Cf-Id: sX5QSkbAzSwd-xx3RbJmxYHL3iVNNyXa1UIebDNCshQbHxCjVcWDww== 18 | self.matchHeader(('X-Amz-Cf-Id', '.+?'), attack=True), 19 | # This is another reliable fingerprint found on headers 20 | self.matchHeader(('X-Cache', 'Error from Cloudfront'), attack=True), 21 | # These fingerprints are found on the blockpage itself 22 | self.matchContent(r'Generated by cloudfront \(CloudFront\)') 23 | ] 24 | if any(i for i in schemes): 25 | return True 26 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/comodo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Comodo cWatch (Comodo CyberSecurity)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'Protected by COMODO WAF(.+)?')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/crawlprotect.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'CrawlProtect (Jean-Denis Brun)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^crawlprotecttag='), 13 | self.matchContent(r'<title>crawlprotect'), 14 | self.matchContent(r'this site is protected by crawlprotect') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/denyall.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'DenyALL (Rohde & Schwarz CyberSecurity)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchStatus(200), 13 | self.matchReason('Condition Intercepted') 14 | ] 15 | if all(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/distil.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Distil (Distil Networks)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'cdn\.distilnetworks\.com/images/anomaly\.detected\.png'), 13 | self.matchContent(r'distilCaptchaForm'), 14 | self.matchContent(r'distilCallbackGuard') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/dosarrest.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'DOSarrest (DOSarrest Internet Security)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-DIS-Request-ID', '.+')), 13 | # Found samples of DOSArrest returning 'Server: DoSArrest/3.5' 14 | self.matchHeader(('Server', r'DOSarrest(.*)?')) 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/dotdefender.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'DotDefender (Applicure Technologies)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-dotDefender-denied', r'.+?'), attack=True), 13 | self.matchContent(r'dotdefender blocked your request'), 14 | self.matchContent(r'Applicure is the leading provider of web application security') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/dynamicweb.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'DynamicWeb Injection Check (DynamicWeb)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-403-Status-By', r'dw.inj.check'), attack=True), 13 | self.matchContent(r'by dynamic check(.{0,10}?module)?') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/edgecast.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Edgecast (Verizon Digital Media)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'^ECD(.+)?')), 13 | self.matchHeader(('Server', r'^ECS(.*)?')) 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/eisoo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Eisoo Cloud Firewall (Eisoo)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'EisooWAF(\-AZURE)?/?')), 13 | self.matchContent(r'<link.{0,10}?href=\"/eisoo\-firewall\-block\.css'), 14 | self.matchContent(r'www\.eisoo\.com'), 15 | self.matchContent(r'© \d{4} Eisoo Inc') 16 | ] 17 | if any(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/expressionengine.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Expression Engine (EllisLab)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | # I have seen some sites use a tracking header and sets a cookie upon authentication 13 | # 'Set-Cookie: _exp_tracking=rufyhweiuitefgcxyniercyft5-6dctuxeygfr' 14 | self.matchCookie(r'^exp_track.+?='), 15 | # There are traces found where cookie is returning values like: 16 | # Set-Cookie: exp_last_query=834y8d73y94d8g983u4shn8u4shr3uh3 17 | # Set-Cookie: exp_last_id=b342b432b1a876r8 18 | self.matchCookie(r'^exp_last_.+?=', attack=True), 19 | # In-page fingerprints vary a lot in different sites. Hence these are not quite reliable. 20 | self.matchContent(r'invalid get data') 21 | ] 22 | if any(i for i in schemes): 23 | return True 24 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/f5bigipapm.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'BIG-IP AP Manager (F5 Networks)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchCookie('^LastMRH_Session'), 13 | self.matchCookie('^MRHSession') 14 | ] 15 | schema2 = [ 16 | self.matchCookie('^MRHSession'), 17 | self.matchHeader(('Server', r'Big([-_])?IP'), attack=True) 18 | ] 19 | schema3 = [ 20 | self.matchCookie('^F5_fullWT'), 21 | self.matchCookie('^F5_fullWT'), 22 | self.matchCookie('^F5_HT_shrinked') 23 | ] 24 | if all(i for i in schema1): 25 | return True 26 | if all(i for i in schema2): 27 | return True 28 | if any(i for i in schema3): 29 | return True 30 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/f5bigipasm.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'BIG-IP AppSec Manager (F5 Networks)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent('the requested url was rejected'), 13 | self.matchContent('please consult with your administrator') 14 | ] 15 | if all(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/f5bigipltm.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'BIG-IP Local Traffic Manager (F5 Networks)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie('^bigipserver'), 13 | self.matchHeader(('X-Cnection', 'close'), attack=True) 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/f5firepass.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'FirePass (F5 Networks)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchCookie('^VHOST'), 13 | self.matchHeader(('Location', r'\/my\.logon\.php3')) 14 | ] 15 | schema2 = [ 16 | self.matchCookie(r'^F5_fire.+?'), 17 | self.matchCookie('^F5_passid_shrinked') 18 | ] 19 | if all(i for i in schema1): 20 | return True 21 | if all(i for i in schema2): 22 | return True 23 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/f5trafficshield.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Trafficshield (F5 Networks)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie('^ASINFO='), 13 | self.matchHeader(('Server', 'F5-TrafficShield')) 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/fastly.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Fastly (Fastly CDN)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-Fastly-Request-ID', r'\w+')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/fortiweb.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'FortiWeb (Fortinet)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchCookie(r'^FORTIWAFSID='), 13 | self.matchContent('.fgd_icon') 14 | ] 15 | schema2 = [ 16 | self.matchContent('fgd_icon'), 17 | self.matchContent('web.page.blocked'), 18 | self.matchContent('url'), 19 | self.matchContent('attack.id'), 20 | self.matchContent('message.id'), 21 | self.matchContent('client.ip') 22 | ] 23 | if any(i for i in schema1): 24 | return True 25 | if all(i for i in schema2): 26 | return True 27 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/frontdoor.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Azure Front Door (Microsoft)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-Azure-Ref', '.+?')), 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/godaddy.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'GoDaddy Website Protection (GoDaddy)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'GoDaddy (security|website firewall)') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/greywizard.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Greywizard (Grey Wizard)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'greywizard')), 13 | self.matchContent(r'<(title|h\d{1})>Grey Wizard'), 14 | self.matchContent(r'contact the website owner or Grey Wizard'), 15 | self.matchContent(r'We.ve detected attempted attack or non standard traffic from your ip address') 16 | ] 17 | if any(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/huaweicloud.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Huawei Cloud Firewall (Huawei)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^HWWAFSESID='), 13 | self.matchHeader(('Server', r'HuaweiCloudWAF')), 14 | self.matchContent(r'hwclouds\.com'), 15 | self.matchContent(r'hws_security@') 16 | ] 17 | if any(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/hyperguard.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'HyperGuard (Art of Defense)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie('^WODSESSION=') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/ibmdatapower.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'DataPower (IBM)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-Backside-Transport', r'(OK|FAIL)')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/imunify360.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Imunify360 (CloudLinux)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'imunify360.{0,10}?')), 13 | self.matchContent(r'protected.by.{0,10}?imunify360'), 14 | self.matchContent(r'powered.by.{0,10}?imunify360'), 15 | self.matchContent(r'imunify360.preloader') 16 | ] 17 | if any(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/incapsula.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Incapsula (Imperva Inc.)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^incap_ses.*?='), 13 | self.matchCookie(r'^visid_incap.*?='), 14 | self.matchContent(r'incapsula incident id'), 15 | self.matchContent(r'powered by incapsula'), 16 | self.matchContent(r'/_Incapsula_Resource') 17 | ] 18 | if any(i for i in schemes): 19 | return True 20 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/indusguard.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'IndusGuard (Indusface)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'IF_WAF')), 13 | self.matchContent(r'This website is secured against online attacks. Your request was blocked') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/instartdx.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Instart DX (Instart Logic)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchHeader(('X-Instart-Request-ID', '.+')), 13 | self.matchHeader(('X-Instart-Cache', '.+')), 14 | self.matchHeader(('X-Instart-WL', '.+')) 15 | ] 16 | schema2 = [ 17 | self.matchContent(r'the requested url was rejected'), 18 | self.matchContent(r'please consult with your administrator'), 19 | self.matchContent(r'your support id is') 20 | ] 21 | if any(i for i in schema1): 22 | return True 23 | if all(i for i in schema2): 24 | return True 25 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/isaserver.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'ISA Server (Microsoft)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'The.{0,10}?(isa.)?server.{0,10}?denied the specified uniform resource locator \(url\)'), 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/janusec.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Janusec Application Gateway (Janusec)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'janusec application gateway') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/jiasule.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Jiasule (Jiasule)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'jiasule\-waf')), 13 | self.matchCookie(r'^jsl_tracking(.+)?='), 14 | self.matchCookie(r'__jsluid='), 15 | self.matchContent(r'notice\-jiasule'), 16 | self.matchContent(r'static\.jiasule\.com') 17 | ] 18 | if any(i for i in schemes): 19 | return True 20 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/keycdn.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'KeyCDN (KeyCDN)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'KeyCDN')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/knownsec.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'KS-WAF (KnownSec)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'/ks[-_]waf[-_]error\.png') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/kona.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | 4 | #!/usr/bin/env python 5 | ''' 6 | Copyright (C) 2020, WAFW00F Developers. 7 | See the LICENSE file for copying permission. 8 | ''' 9 | 10 | NAME = 'Kona SiteDefender (Akamai)' 11 | 12 | 13 | def is_waf(self): 14 | schemes = [ 15 | self.matchHeader(('Server', 'AkamaiGHost')), 16 | self.matchHeader(('Server', 'AkamaiGHost'), attack=True) 17 | ] 18 | if any(i for i in schemes): 19 | return True 20 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/limelight.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'LimeLight CDN (LimeLight)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^limelight'), 13 | self.matchCookie(r'^l[mg]_sessid=') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/litespeed.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'LiteSpeed (LiteSpeed Technologies)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchHeader(('Server', 'LiteSpeed')), 13 | self.matchStatus(403) 14 | ] 15 | schema2 = [ 16 | self.matchContent(r'Proudly powered by litespeed web server'), 17 | self.matchContent(r'www\.litespeedtech\.com/error\-page') 18 | ] 19 | if all(i for i in schema1): 20 | return True 21 | if any(i for i in schema2): 22 | return True 23 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/malcare.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Malcare (Inactiv)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'firewall.{0,15}?powered.by.{0,15}?malcare.{0,15}?pro'), 13 | self.matchContent('blocked because of malicious activities') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/maxcdn.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'MaxCDN (MaxCDN)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-CDN', r'maxcdn')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/missioncontrol.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Mission Control Shield (Mission Control)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'Mission Control Application Shield')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/modsecurity.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'ModSecurity (SpiderLabs)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchHeader(('Server', r'(mod_security|Mod_Security|NOYB)')), 13 | self.matchContent(r'This error was generated by Mod.?Security'), 14 | self.matchContent(r'rules of the mod.security.module'), 15 | self.matchContent(r'mod.security.rules triggered'), 16 | self.matchContent(r'Protected by Mod.?Security'), 17 | self.matchContent(r'/modsecurity[\-_]errorpage/'), 18 | self.matchContent(r'modsecurity iis') 19 | ] 20 | schema2 = [ 21 | self.matchReason('ModSecurity Action'), 22 | self.matchStatus(403) 23 | ] 24 | schema3 = [ 25 | self.matchReason('ModSecurity Action'), 26 | self.matchStatus(406) 27 | ] 28 | if any(i for i in schema1): 29 | return True 30 | if all(i for i in schema2): 31 | return True 32 | if all(i for i in schema3): 33 | return True 34 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/naxsi.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'NAXSI (NBS Systems)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-Data-Origin', r'^naxsi(.+)?')), 13 | self.matchHeader(('Server', r'naxsi(.+)?')), 14 | self.matchContent(r'blocked by naxsi'), 15 | self.matchContent(r'naxsi blocked information') 16 | ] 17 | if any(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/nemesida.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Nemesida (PentestIt)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'@?nemesida(\-security)?\.com'), 13 | self.matchContent(r'Suspicious activity detected.{0,10}?Access to the site is blocked'), 14 | self.matchContent(r'nwaf@'), 15 | self.matchStatus(222) 16 | ] 17 | if any(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/netcontinuum.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'NetContinuum (Barracuda Networks)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^NCI__SessionId=') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/netscaler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'NetScaler AppFirewall (Citrix Systems)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | # This header can be obtained without attack mode 13 | self.matchHeader(('Via', r'NS\-CACHE')), 14 | # Cookies are set only when someone is authenticated. 15 | # Not much reliable since wafw00f isn't authenticating. 16 | self.matchCookie(r'^(ns_af=|citrix_ns_id|NSC_)'), 17 | self.matchContent(r'(NS Transaction|AppFW Session) id'), 18 | self.matchContent(r'Violation Category.{0,5}?APPFW_'), 19 | self.matchContent(r'Citrix\|NetScaler'), 20 | # Reliable but not all servers return this header 21 | self.matchHeader(('Cneonction', r'^(keep alive|close)'), attack=True), 22 | self.matchHeader(('nnCoection', r'^(keep alive|close)'), attack=True) 23 | ] 24 | if any(i for i in schemes): 25 | return True 26 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/nevisproxy.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'NevisProxy (AdNovum)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^Navajo'), 13 | self.matchCookie(r'^NP_ID') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/newdefend.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Newdefend (NewDefend)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | # This header can be obtained without attack mode 13 | # Most reliable fingerprint 14 | self.matchHeader(('Server', 'Newdefend')), 15 | # Reliable ones within blockpage 16 | self.matchContent(r'www\.newdefend\.com/feedback'), 17 | self.matchContent(r'/nd\-block/') 18 | ] 19 | if any(i for i in schemes): 20 | return True 21 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/nexusguard.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'NexusGuard Firewall (NexusGuard)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'Powered by Nexusguard'), 13 | self.matchContent(r'nexusguard\.com/wafpage/.+#\d{3};') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/ninja.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'NinjaFirewall (NinTechNet)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'<title>NinjaFirewall.{0,10}?\d{3}.forbidden'), 13 | self.matchContent(r'For security reasons?.{0,10}?it was blocked and logged') 14 | ] 15 | if all(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/nsfocus.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'NSFocus (NSFocus Global Inc.)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'NSFocus')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/nullddos.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'NullDDoS Protection (NullDDoS)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'NullDDoS(.System)?')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/onmessage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'OnMessage Shield (BlackBaud)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-Engine', 'onMessage Shield')), 13 | self.matchContent(r'Blackbaud K\-12 conducts routine maintenance'), 14 | self.matchContent(r'onMessage SHEILD'), 15 | self.matchContent(r'maintenance\.blackbaud\.com'), 16 | self.matchContent(r'status\.blackbaud\.com') 17 | ] 18 | if any(i for i in schemes): 19 | return True 20 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/openresty.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Open-Resty Lua Nginx (FLOSS)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchHeader(('Server', r'^openresty/[0-9\.]+?')), 13 | self.matchStatus(403) 14 | ] 15 | schema2 = [ 16 | self.matchContent(r'openresty/[0-9\.]+?'), 17 | self.matchStatus(406) 18 | ] 19 | if all(i for i in schema1): 20 | return True 21 | if all(i for i in schema2): 22 | return True 23 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/oraclecloud.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Oracle Cloud (Oracle)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'<title>fw_error_www'), 13 | self.matchContent(r'src=\"/oralogo_small\.gif\"'), 14 | self.matchContent(r'www\.oracleimg\.com/us/assets/metrics/ora_ocom\.js') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/paloalto.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Palo Alto Next Gen Firewall (Palo Alto Networks)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'Download of virus.spyware blocked'), 13 | self.matchContent(r'Palo Alto Next Generation Security Platform') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/pentawaf.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'PentaWAF (Global Network Services)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'PentaWaf(/[0-9\.]+)?')), 13 | self.matchContent(r'Penta.?Waf/[0-9\.]+?.server') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/perimeterx.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'PerimeterX (PerimeterX)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'www\.perimeterx\.(com|net)/whywasiblocked'), 13 | self.matchContent(r'client\.perimeterx\.(net|com)'), 14 | self.matchContent(r'denied because we believe you are using automation tools') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/pksec.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'pkSecurity IDS (pkSec)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchContent(r'pk.?Security.?Module'), 13 | self.matchContent(r'Security.Alert') 14 | ] 15 | schema2 = [ 16 | self.matchContent(r'As this could be a potential hack attack'), 17 | self.matchContent(r'A safety critical (call|request) was (detected|discovered) and blocked'), 18 | self.matchContent(r'maximum number of reloads per minute and prevented access') 19 | ] 20 | if any(i for i in schema2): 21 | return True 22 | if all(i for i in schema1): 23 | return True 24 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/powercdn.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'PowerCDN (PowerCDN)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Via', r'(.*)?powercdn.com(.*)?')), 13 | self.matchHeader(('X-Cache', r'(.*)?powercdn.com(.*)?')), 14 | self.matchHeader(('X-CDN', r'PowerCDN')) 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/profense.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Profense (ArmorLogic)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'Profense')), 13 | self.matchCookie(r'^PLBSID=') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/ptaf.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'PT Application Firewall (Positive Technologies)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'<h1.{0,10}?Forbidden'), 13 | self.matchContent(r'<pre>Request.ID:.{0,10}?\d{4}\-(\d{2})+.{0,15}?pre>') 14 | ] 15 | if all(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/puhui.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Puhui (Puhui)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'Puhui[\-_]?WAF')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/qiniu.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Qiniu (Qiniu CDN)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-Qiniu-CDN', r'\d+?')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/radware.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'AppWall (Radware)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchContent(r'CloudWebSec\.radware\.com'), 13 | self.matchHeader(('X-SL-CompState', '.+')) 14 | ] 15 | schema2 = [ 16 | self.matchContent(r'because we have detected unauthorized activity'), 17 | self.matchContent(r'<title>Unauthorized Request Blocked'), 18 | self.matchContent(r'if you believe that there has been some mistake'), 19 | self.matchContent(r'\?Subject=Security Page.{0,10}?Case Number') 20 | ] 21 | if any(i for i in schema1): 22 | return True 23 | if all(i for i in schema2): 24 | return True 25 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/reblaze.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Reblaze (Reblaze)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchCookie(r'^rbzid'), 13 | self.matchHeader(('Server', 'Reblaze Secure Web Gateway')) 14 | ] 15 | schema2 = [ 16 | self.matchContent(r'current session has been terminated'), 17 | self.matchContent(r'do not hesitate to contact us'), 18 | self.matchContent(r'access denied \(\d{3}\)') 19 | ] 20 | if any(i for i in schema1): 21 | return True 22 | if all(i for i in schema2): 23 | return True 24 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/rsfirewall.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'RSFirewall (RSJoomla!)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'com_rsfirewall_(\d{3}_forbidden|event)?') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/rvmode.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'RequestValidationMode (Microsoft)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'Request Validation has detected a potentially dangerous client input'), 13 | self.matchContent(r'ASP\.NET has detected data in the request'), 14 | self.matchContent(r'HttpRequestValidationException') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/sabre.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Sabre Firewall (Sabre)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchContent(r'dxsupport\.sabre\.com') 13 | ] 14 | schema2 = [ 15 | self.matchContent(r'<title>Application Firewall Error'), 16 | self.matchContent(r'add some important details to the email for us to investigate') 17 | ] 18 | if any(i for i in schema1): 19 | return True 20 | if all(i for i in schema2): 21 | return True 22 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/safe3.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Safe3 Web Firewall (Safe3)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'Safe3 Web Firewall')), 13 | self.matchHeader(('X-Powered-By', r'Safe3WAF/[\.0-9]+?')), 14 | self.matchContent(r'Safe3waf/[0-9\.]+?') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/safedog.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Safedog (SafeDog)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^safedog\-flow\-item='), 13 | self.matchHeader(('Server', 'Safedog')), 14 | self.matchContent(r'safedogsite/broswer_logo\.jpg'), 15 | self.matchContent(r'404\.safedog\.cn/sitedog_stat.html'), 16 | self.matchContent(r'404\.safedog\.cn/images/safedogsite/head\.png') 17 | ] 18 | if any(i for i in schemes): 19 | return True 20 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/safeline.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Safeline (Chaitin Tech.)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'safeline|<!\-\-\sevent id:') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/secking.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'SecKing (SecKing)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'secking(.?waf)?')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/secupress.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'SecuPress WP Security (SecuPress)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'<(title|h\d{1})>SecuPress'), 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/secureentry.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Secure Entry (United Security Providers)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'Secure Entry Server')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/secureiis.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'eEye SecureIIS (BeyondTrust)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'SecureIIS is an internet security application'), 13 | self.matchContent(r'Download SecureIIS Personal Edition'), 14 | self.matchContent(r'https?://www\.eeye\.com/Secure\-?IIS') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/securesphere.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'SecureSphere (Imperva Inc.)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'<(title|h2)>Error'), 13 | self.matchContent(r'The incident ID is'), 14 | self.matchContent(r"This page can't be displayed"), 15 | self.matchContent(r'Contact support for additional information') 16 | ] 17 | if all(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/senginx.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'SEnginx (Neusoft)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'SENGINX\-ROBOT\-MITIGATION') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/serverdefender.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'ServerDefender VP (Port80 Software)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-Pint', r'p(ort\-)?80')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/shadowd.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Shadow Daemon (Zecure)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"<h\d{1}>\d{3}.forbidden<.h\d{1}>"), 13 | self.matchContent(r"request forbidden by administrative rules") 14 | ] 15 | if all(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/shieldsecurity.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Shield Security (One Dollar Plugin)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"You were blocked by the Shield"), 13 | self.matchContent(r"remaining transgression\(s\) against this site"), 14 | self.matchContent(r"Something in the URL.{0,5}?Form or Cookie data wasn\'t appropriate") 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/siteground.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'SiteGround (SiteGround)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"Our system thinks you might be a robot!"), 13 | self.matchContent(r'access is restricted due to a security rule') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/siteguard.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'SiteGuard (Sakura Inc.)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"Powered by SiteGuard"), 13 | self.matchContent(r'The server refuse to browse the page') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/sitelock.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Sitelock (TrueShield)' 8 | 9 | # Well this is confusing, Sitelock itself uses Incapsula from Imperva 10 | # So the fingerprints obtained on blockpage are similar to those of Incapsula. 11 | 12 | def is_waf(self): 13 | schemes = [ 14 | self.matchContent(r"SiteLock will remember you"), 15 | self.matchContent(r"Sitelock is leader in Business Website Security Services"), 16 | self.matchContent(r"sitelock[_\-]shield([_\-]logo|[\-_]badge)?"), 17 | self.matchContent(r'SiteLock incident ID') 18 | ] 19 | if any(i for i in schemes): 20 | return True 21 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/sonicwall.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'SonicWall (Dell)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'SonicWALL')), 13 | self.matchContent(r"<(title|h\d{1})>Web Site Blocked"), 14 | self.matchContent(r'\+?nsa_banner') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/sophos.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'UTM Web Protection (Sophos)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchContent(r'www\.sophos\.com'), 13 | self.matchContent(r'Powered by.?(Sophos)? UTM Web Protection') 14 | ] 15 | schema2 = [ 16 | self.matchContent(r'<title>Access to the requested URL was blocked'), 17 | self.matchContent(r'Access to the requested URL was blocked'), 18 | self.matchContent(r'incident was logged with the following log identifier'), 19 | self.matchContent(r'Inbound Anomaly Score exceeded'), 20 | self.matchContent(r'Your cache administrator is') 21 | ] 22 | if any(i for i in schema1): 23 | return True 24 | if all(i for i in schema2): 25 | return True 26 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/squarespace.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Squarespace (Squarespace)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'Squarespace')), 13 | self.matchCookie(r'^SS_ANALYTICS_ID='), 14 | self.matchCookie(r'^SS_MATTR='), 15 | self.matchCookie(r'^SS_MID='), 16 | self.matchCookie(r'SS_CVT='), 17 | self.matchContent(r'status\.squarespace\.com'), 18 | self.matchContent(r'BRICK\-\d{2}') 19 | ] 20 | if any(i for i in schemes): 21 | return True 22 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/squidproxy.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'SquidProxy IDS (SquidProxy)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'squid(/[0-9\.]+)?')), 13 | self.matchContent(r'Access control configuration prevents your request') 14 | ] 15 | if all(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/stackpath.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'StackPath (StackPath)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"This website is using a security service to protect itself"), 13 | self.matchContent(r'You performed an action that triggered the service and blocked your request') 14 | ] 15 | if all(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/sucuri.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Sucuri CloudProxy (Sucuri Inc.)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-Sucuri-ID', r'.+?')), 13 | self.matchHeader(('X-Sucuri-Cache', r'.+?')), 14 | self.matchHeader(('Server', r'Sucuri(\-Cloudproxy)?')), 15 | self.matchHeader(('X-Sucuri-Block', r'.+?'), attack=True), 16 | self.matchContent(r"Access Denied.{0,6}?Sucuri Website Firewall"), 17 | self.matchContent(r"<title>Sucuri WebSite Firewall.{0,6}?(CloudProxy)?.{0,6}?Access Denied"), 18 | self.matchContent(r"sucuri\.net/privacy\-policy"), 19 | self.matchContent(r"cdn\.sucuri\.net/sucuri[-_]firewall[-_]block\.css"), 20 | self.matchContent(r'cloudproxy@sucuri\.net') 21 | ] 22 | if any(i for i in schemes): 23 | return True 24 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/tencent.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Tencent Cloud Firewall (Tencent Technologies)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'waf\.tencent\-?cloud\.com/') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/teros.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Teros (Citrix Systems)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^st8id=') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/transip.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'TransIP Web Firewall (TransIP)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-TransIP-Backend', '.+')), 13 | self.matchHeader(('X-TransIP-Balancer', '.+')) 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/uewaf.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'UEWaf (UCloud)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'uewaf(/[0-9\.]+)?')), 13 | self.matchContent(r'/uewaf_deny_pages/default/img/'), 14 | self.matchContent(r'ucloud\.cn') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/urlmaster.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'URLMaster SecurityCheck (iFinity/DotNetNuke)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchHeader(('X-UrlMaster-Debug', '.+')), 13 | self.matchHeader(('X-UrlMaster-Ex', '.+')), 14 | ] 15 | schema2 = [ 16 | self.matchContent(r"Ur[li]RewriteModule"), 17 | self.matchContent(r'SecurityCheck') 18 | ] 19 | if any(i for i in schema1): 20 | return True 21 | if all(i for i in schema2): 22 | return True 23 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/urlscan.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'URLScan (Microsoft)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"Rejected[-_]By[_-]UrlScan"), 13 | self.matchContent(r'A custom filter or module.{0,4}?such as URLScan') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/varnish.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Varnish (OWASP)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r'Request rejected by xVarnish\-WAF') 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/viettel.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Viettel (Cloudrity)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"Access Denied.{0,10}?Viettel WAF"), 13 | self.matchContent(r"cloudrity\.com\.(vn)?/"), 14 | self.matchContent(r"Viettel WAF System") 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/virusdie.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'VirusDie (VirusDie LLC)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"cdn\.virusdie\.ru/splash/firewallstop\.png"), 13 | self.matchContent(r'copy.{0,10}?Virusdie\.ru') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/wallarm.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Wallarm (Wallarm Inc.)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'nginx[\-_]wallarm')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/watchguard.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'WatchGuard (WatchGuard Technologies)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'WatchGuard')), 13 | self.matchContent(r"Request denied by WatchGuard Firewall"), 14 | self.matchContent(r'WatchGuard Technologies Inc\.') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/webarx.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'WebARX (WebARX Security Solutions)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"WebARX.{0,10}?Web Application Firewall"), 13 | self.matchContent(r"www\.webarxsecurity\.com"), 14 | self.matchContent(r'/wp\-content/plugins/webarx/includes/') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/webknight.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'WebKnight (AQTRONIX)' 8 | 9 | 10 | def is_waf(self): 11 | schema1 = [ 12 | self.matchStatus(999), 13 | self.matchReason('No Hacking') 14 | ] 15 | schema2 = [ 16 | self.matchStatus(404), 17 | self.matchReason('Hack Not Found') 18 | ] 19 | schema3 = [ 20 | self.matchContent(r'WebKnight Application Firewall Alert'), 21 | self.matchContent(r'What is webknight\?'), 22 | self.matchContent(r'AQTRONIX WebKnight is an application firewall'), 23 | self.matchContent(r'WebKnight will take over and protect'), 24 | self.matchContent(r'aqtronix\.com/WebKnight'), 25 | self.matchContent(r'AQTRONIX.{0,10}?WebKnight'), 26 | ] 27 | if all(i for i in schema1): 28 | return True 29 | if all(i for i in schema2): 30 | return True 31 | if any(i for i in schema3): 32 | return True 33 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/webland.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'WebLand (WebLand)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'protected by webland')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/webray.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'RayWAF (WebRay Solutions)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'WebRay\-WAF')), 13 | self.matchHeader(('DrivedBy', r'RaySrv.RayEng/[0-9\.]+?')) 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/webseal.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'WebSEAL (IBM)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'WebSEAL')), 13 | self.matchContent(r"This is a WebSEAL error message template file"), 14 | self.matchContent(r"WebSEAL server received an invalid HTTP request") 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/webtotem.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'WebTotem (WebTotem)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"The current request was blocked.{0,8}?>WebTotem") 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/west263cdn.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'West263 CDN (West263CDN)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-Cache', r'WS?T263CDN')) 13 | ] 14 | if any(i for i in schemes): 15 | return True 16 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/wordfence.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Wordfence (Defiant)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'wf[_\-]?WAF')), 13 | self.matchContent(r"Generated by Wordfence"), 14 | self.matchContent(r'broke one of (the )?Wordfence (advanced )?blocking rules'), 15 | self.matchContent(r"/plugins/wordfence") 16 | ] 17 | if any(i for i in schemes): 18 | return True 19 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/wts.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'WTS-WAF (WTS)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'wts/[0-9\.]+?')), 13 | self.matchContent(r"<(title|h\d{1})>WTS\-WAF") 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/wzb360.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = '360WangZhanBao (360 Technologies)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'qianxin\-waf')), 13 | self.matchHeader(('WZWS-Ray', r'.+?')), 14 | self.matchHeader(('X-Powered-By-360WZB', r'.+?')), 15 | self.matchContent(r'wzws\-waf\-cgi/'), 16 | self.matchContent(r'wangshan\.360\.cn'), 17 | self.matchStatus(493) 18 | ] 19 | if any(i for i in schemes): 20 | return True 21 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/xlabssecuritywaf.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'XLabs Security WAF (XLabs)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('X-CDN', r'XLabs Security')), 13 | self.matchHeader(('Secured', r'^By XLabs Security')), 14 | self.matchHeader(('Server', r'XLabs[-_]?.?WAF'), attack=True) 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/xuanwudun.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Xuanwudun (Xuanwudun)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchContent(r"admin\.dbappwaf\.cn/(index\.php/Admin/ClientMisinform/)?"), 13 | self.matchContent(r'class=.(db[\-_]?)?waf(.)?([\-_]?row)?>') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/yundun.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Yundun (Yundun)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'YUNDUN')), 13 | self.matchHeader(('X-Cache', 'YUNDUN')), 14 | self.matchCookie(r'^yd_cookie='), 15 | self.matchContent(r'Blocked by YUNDUN Cloud WAF'), 16 | self.matchContent(r'yundun\.com/yd[-_]http[_-]error/'), 17 | self.matchContent(r'www\.yundun\.com/(static/js/fingerprint\d{1}?\.js)?') 18 | ] 19 | if any(i for i in schemes): 20 | return True 21 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/yunsuo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Yunsuo (Yunsuo)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^yunsuo_session='), 13 | self.matchContent(r'class=\"yunsuologo\"') 14 | ] 15 | if any(i for i in schemes): 16 | return True 17 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/yxlink.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'YXLink (YxLink Technologies)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchCookie(r'^yx_ci_session='), 13 | self.matchCookie(r'^yx_language='), 14 | self.matchHeader(('Server', r'Yxlink([\-_]?WAF)?')) 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/zenedge.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'Zenedge (Zenedge)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', 'ZENEDGE')), 13 | self.matchHeader(('X-Zen-Fury', r'.+?')), 14 | self.matchContent(r'/__zenedge/') 15 | ] 16 | if any(i for i in schemes): 17 | return True 18 | return False -------------------------------------------------------------------------------- /Third/wafw00f/plugins/zscaler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | NAME = 'ZScaler (Accenture)' 8 | 9 | 10 | def is_waf(self): 11 | schemes = [ 12 | self.matchHeader(('Server', r'ZScaler')), 13 | self.matchContent(r"Access Denied.{0,10}?Accenture Policy"), 14 | self.matchContent(r'policies\.accenture\.com'), 15 | self.matchContent(r'login\.zscloud\.net/img_logo_new1\.png'), 16 | self.matchContent(r'Zscaler to protect you from internet threats'), 17 | self.matchContent(r"Internet Security by ZScaler"), 18 | self.matchContent(r"Accenture.{0,10}?webfilters indicate that the site likely contains") 19 | ] 20 | if any(i for i in schemes): 21 | return True 22 | return False -------------------------------------------------------------------------------- /Third/wafw00f/wafprio.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Copyright (C) 2020, WAFW00F Developers. 4 | See the LICENSE file for copying permission. 5 | ''' 6 | 7 | # NOTE: this priority list is used so that each check can be prioritized, 8 | # so that the quick checks are done first and ones that require more 9 | # requests, are done later 10 | 11 | 12 | wafdetectionsprio = [ 13 | 'ACE XML Gateway (Cisco)', 14 | 'aeSecure (aeSecure)', 15 | 'AireeCDN (Airee)', 16 | 'Airlock (Phion/Ergon)', 17 | 'Alert Logic (Alert Logic)', 18 | 'AliYunDun (Alibaba Cloud Computing)', 19 | 'Anquanbao (Anquanbao)', 20 | 'AnYu (AnYu Technologies)', 21 | 'Approach (Approach)', 22 | 'AppWall (Radware)', 23 | 'Armor Defense (Armor)', 24 | 'ArvanCloud (ArvanCloud)', 25 | 'ASP.NET Generic (Microsoft)', 26 | 'ASPA Firewall (ASPA Engineering Co.)', 27 | 'Astra (Czar Securities)', 28 | 'AWS Elastic Load Balancer (Amazon)', 29 | 'AzionCDN (AzionCDN)', 30 | 'Azure Front Door (Microsoft)', 31 | 'Barikode (Ethic Ninja)', 32 | 'Barracuda (Barracuda Networks)', 33 | 'Bekchy (Faydata Technologies Inc.)', 34 | 'Beluga CDN (Beluga)', 35 | 'BIG-IP Local Traffic Manager (F5 Networks)', 36 | 'BinarySec (BinarySec)', 37 | 'BitNinja (BitNinja)', 38 | 'BlockDoS (BlockDoS)', 39 | 'Bluedon (Bluedon IST)', 40 | 'BulletProof Security Pro (AITpro Security)', 41 | 'CacheWall (Varnish)', 42 | 'CacheFly CDN (CacheFly)', 43 | 'Comodo cWatch (Comodo CyberSecurity)', 44 | 'CdnNS Application Gateway (CdnNs/WdidcNet)', 45 | 'ChinaCache Load Balancer (ChinaCache)', 46 | 'Chuang Yu Shield (Yunaq)', 47 | 'Cloudbric (Penta Security)', 48 | 'Cloudflare (Cloudflare Inc.)', 49 | 'Cloudfloor (Cloudfloor DNS)', 50 | 'Cloudfront (Amazon)', 51 | 'CrawlProtect (Jean-Denis Brun)', 52 | 'DataPower (IBM)', 53 | 'DenyALL (Rohde & Schwarz CyberSecurity)', 54 | 'Distil (Distil Networks)', 55 | 'DOSarrest (DOSarrest Internet Security)', 56 | 'DotDefender (Applicure Technologies)', 57 | 'DynamicWeb Injection Check (DynamicWeb)', 58 | 'Edgecast (Verizon Digital Media)', 59 | 'Eisoo Cloud Firewall (Eisoo)', 60 | 'Expression Engine (EllisLab)', 61 | 'BIG-IP AppSec Manager (F5 Networks)', 62 | 'BIG-IP AP Manager (F5 Networks)', 63 | 'Fastly (Fastly CDN)', 64 | 'FirePass (F5 Networks)', 65 | 'FortiWeb (Fortinet)', 66 | 'GoDaddy Website Protection (GoDaddy)', 67 | 'Greywizard (Grey Wizard)', 68 | 'Huawei Cloud Firewall (Huawei)', 69 | 'HyperGuard (Art of Defense)', 70 | 'Imunify360 (CloudLinux)', 71 | 'Incapsula (Imperva Inc.)', 72 | 'IndusGuard (Indusface)', 73 | 'Instart DX (Instart Logic)', 74 | 'ISA Server (Microsoft)', 75 | 'Janusec Application Gateway (Janusec)', 76 | 'Jiasule (Jiasule)', 77 | 'Kona SiteDefender (Akamai)', 78 | 'KS-WAF (KnownSec)', 79 | 'KeyCDN (KeyCDN)', 80 | 'LimeLight CDN (LimeLight)', 81 | 'LiteSpeed (LiteSpeed Technologies)', 82 | 'Open-Resty Lua Nginx (FLOSS)', 83 | 'Oracle Cloud (Oracle)', 84 | 'Malcare (Inactiv)', 85 | 'MaxCDN (MaxCDN)', 86 | 'Mission Control Shield (Mission Control)', 87 | 'ModSecurity (SpiderLabs)', 88 | 'NAXSI (NBS Systems)', 89 | 'Nemesida (PentestIt)', 90 | 'NevisProxy (AdNovum)', 91 | 'NetContinuum (Barracuda Networks)', 92 | 'NetScaler AppFirewall (Citrix Systems)', 93 | 'Newdefend (NewDefend)', 94 | 'NexusGuard Firewall (NexusGuard)', 95 | 'NinjaFirewall (NinTechNet)', 96 | 'NullDDoS Protection (NullDDoS)', 97 | 'NSFocus (NSFocus Global Inc.)', 98 | 'OnMessage Shield (BlackBaud)', 99 | 'Palo Alto Next Gen Firewall (Palo Alto Networks)', 100 | 'PerimeterX (PerimeterX)', 101 | 'PentaWAF (Global Network Services)', 102 | 'pkSecurity IDS (pkSec)', 103 | 'PT Application Firewall (Positive Technologies)', 104 | 'PowerCDN (PowerCDN)', 105 | 'Profense (ArmorLogic)', 106 | 'Puhui (Puhui)', 107 | 'Qiniu (Qiniu CDN)', 108 | 'Reblaze (Reblaze)', 109 | 'RSFirewall (RSJoomla!)', 110 | 'RequestValidationMode (Microsoft)', 111 | 'Sabre Firewall (Sabre)', 112 | 'Safe3 Web Firewall (Safe3)', 113 | 'Safedog (SafeDog)', 114 | 'Safeline (Chaitin Tech.)', 115 | 'SecKing (SecKing)', 116 | 'eEye SecureIIS (BeyondTrust)', 117 | 'SecuPress WP Security (SecuPress)', 118 | 'SecureSphere (Imperva Inc.)', 119 | 'Secure Entry (United Security Providers)', 120 | 'SEnginx (Neusoft)', 121 | 'ServerDefender VP (Port80 Software)', 122 | 'Shield Security (One Dollar Plugin)', 123 | 'Shadow Daemon (Zecure)', 124 | 'SiteGround (SiteGround)', 125 | 'SiteGuard (Sakura Inc.)', 126 | 'Sitelock (TrueShield)', 127 | 'SonicWall (Dell)', 128 | 'UTM Web Protection (Sophos)', 129 | 'Squarespace (Squarespace)', 130 | 'SquidProxy IDS (SquidProxy)', 131 | 'StackPath (StackPath)', 132 | 'Sucuri CloudProxy (Sucuri Inc.)', 133 | 'Tencent Cloud Firewall (Tencent Technologies)', 134 | 'Teros (Citrix Systems)', 135 | 'Trafficshield (F5 Networks)', 136 | 'TransIP Web Firewall (TransIP)', 137 | 'URLMaster SecurityCheck (iFinity/DotNetNuke)', 138 | 'URLScan (Microsoft)', 139 | 'UEWaf (UCloud)', 140 | 'Varnish (OWASP)', 141 | 'Viettel (Cloudrity)', 142 | 'VirusDie (VirusDie LLC)', 143 | 'Wallarm (Wallarm Inc.)', 144 | 'WatchGuard (WatchGuard Technologies)', 145 | 'WebARX (WebARX Security Solutions)', 146 | 'WebKnight (AQTRONIX)', 147 | 'WebLand (WebLand)', 148 | 'RayWAF (WebRay Solutions)', 149 | 'WebSEAL (IBM)', 150 | 'WebTotem (WebTotem)', 151 | 'West263 CDN (West263CDN)', 152 | 'Wordfence (Defiant)', 153 | 'WP Cerber Security (Cerber Tech)', 154 | 'WTS-WAF (WTS)', 155 | '360WangZhanBao (360 Technologies)', 156 | 'XLabs Security WAF (XLabs)', 157 | 'Xuanwudun (Xuanwudun)', 158 | 'Yundun (Yundun)', 159 | 'Yunsuo (Yunsuo)', 160 | 'Yunjiasu (Baidu Cloud Computing)', 161 | 'YXLink (YxLink Technologies)', 162 | 'Zenedge (Zenedge)', 163 | 'ZScaler (Accenture)' 164 | ] 165 | -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | # Date: 2021-09-02 3 | # Author:kracer 4 | # Version: 1.5 5 | 6 | import sys 7 | 8 | # 请求包的头部 9 | def headers(host): 10 | header = { 11 | 'Host': '{0}'.format(host), 12 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' 13 | } 14 | return header 15 | 16 | 17 | # api密钥更新 18 | api_key_beianx = "921768f997404c1db7d1e0d0e454c780" # beianx.com 备案查询接口 19 | 20 | 21 | # 是否允许url重定向 22 | allow_redirects = True 23 | 24 | 25 | # 超时时间 26 | timeout = 10 27 | 28 | 29 | # 是否开启代理 30 | try: 31 | inputList = sys.argv[1:] 32 | index = inputList.index('-p') 33 | proxy = inputList[index+1] 34 | except: 35 | proxy = '' 36 | proxies = {'http': proxy} 37 | 38 | 39 | # 是否开启https服务器的证书校验 40 | allow_ssl_verify = False 41 | 42 | 43 | # 网络错误后重新发包的次数 44 | tryTimes = 3 45 | 46 | 47 | # google搜索过程中的提取量 48 | num2google = 100 49 | 50 | 51 | # 扫描1224个常见端口(nmap + 自己的收集) 52 | ports = [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 260, 27, 29, 30, 31, 32, 33, 35, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 109, 110, 111, 113, 115, 117, 119, 120, 121, 123, 125, 135, 137, 138, 139, 143, 144, 146, 153, 158, 161, 162, 163, 170, 175, 177, 179, 194, 199, 211, 212, 222, 233, 254, 255, 256, 259, 264, 280, 301, 306, 311, 315, 340, 366, 389, 400, 406, 407, 416, 417, 425, 427, 443, 444, 445, 456, 458, 464, 465, 481, 497, 500, 512, 513, 514, 515, 517, 518, 520, 524, 526, 530, 531, 532, 533, 540, 541, 543, 544, 545, 548, 550, 553, 554, 555, 556, 563, 568, 569, 587, 593, 600, 616, 617, 625, 631, 635, 636, 646, 648, 666, 667, 668, 683, 687, 691, 698, 700, 705, 711, 714, 720, 722, 726, 749, 750, 751, 754, 765, 777, 783, 787, 800, 801, 808, 843, 873, 880, 888, 898, 900, 901, 902, 903, 911, 912, 981, 987, 990, 992, 993, 995, 999, 1000, 1001, 1002, 1007, 1009, 1010, 1011, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1102, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1117, 1119, 1121, 1122, 1123, 1124, 1126, 1130, 1131, 1132, 1137, 1138, 1141, 1145, 1147, 1148, 1149, 1151, 1152, 1154, 1158, 1163, 1164, 1165, 1166, 1169, 1170, 1174, 1175, 1183, 1185, 1186, 1187, 1192, 1198, 1199, 1201, 1213, 1216, 1217, 1218, 1233, 1234, 1236, 1243, 1244, 1245, 1247, 1248, 1259, 1269, 1271, 1272, 1277, 1287, 1296, 1300, 1301, 1309, 1310, 1311, 1322, 1328, 1334, 1352, 1417, 1433, 1434, 1443, 1455, 1461, 1492, 1494, 1500, 1501, 1503, 1509, 1521, 1524, 1533, 1556, 1580, 1583, 1594, 1600, 1641, 1645, 1646, 1658, 1666, 1687, 1688, 1700, 1701, 1717, 1718, 1719, 1720, 1721, 1723, 1731, 1755, 1761, 1782, 1783, 1801, 1805, 1807, 1812, 1813, 1839, 1840, 1862, 1863, 1864, 1875, 1900, 1914, 1935, 1947, 1971, 1972, 1974, 1981, 1984, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013, 2020, 2021, 2022, 2023, 2030, 2033, 2034, 2035, 2038, 2040, 2041, 2042, 2043, 2045, 2046, 2047, 2048, 2049, 2053, 2065, 2068, 2099, 2100, 2101, 2103, 2105, 2106, 2107, 2111, 2115, 2119, 2121, 2126, 2135, 2140, 2144, 2160, 2161, 2170, 2179, 2190, 2191, 2196, 2200, 2222, 2251, 2260, 2283, 2288, 2301, 2323, 2366, 2381, 2382, 2383, 2393, 2394, 2399, 2401, 2492, 2500, 2504, 2522, 2525, 2557, 2565, 2583, 2601, 2602, 2604, 2605, 2607, 2608, 2638, 2701, 2702, 2710, 2717, 2718, 2725, 2800, 2801, 2809, 2811, 2869, 2875, 2909, 2910, 2920, 2967, 2968, 2998, 3000, 3001, 3003, 3005, 3006, 3007, 3011, 3013, 3017, 3024, 3030, 3031, 3052, 3071, 3077, 3128, 3129, 3150, 3168, 3210, 3211, 3221, 3260, 3261, 3268, 3269, 3283, 3300, 3301, 3306, 3322, 3323, 3324, 3325, 3333, 3351, 3367, 3369, 3370, 3371, 3372, 3389, 3390, 3404, 3476, 3493, 3517, 3527, 3546, 3551, 3580, 3659, 3689, 3690, 3700, 3703, 3737, 3766, 3784, 3800, 3801, 3809, 3814, 3826, 3827, 3828, 3851, 3869, 3871, 3878, 3880, 3889, 3905, 3914, 3918, 3920, 3945, 3971, 3986, 3995, 3996, 3998, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4045, 4060, 4092, 4111, 4125, 4126, 4129, 4224, 4242, 4279, 4321, 4343, 4443, 4444, 4445, 4446, 4449, 4550, 4567, 4590, 4662, 4848, 4899, 4900, 4950, 4998, 5000, 5001, 5002, 5003, 5004, 5009, 5030, 5033, 5050, 5051, 5054, 5060, 5061, 5080, 5087, 5100, 5101, 5102, 5120, 5190, 5200, 5214, 5221, 5222, 5225, 5226, 5269, 5280, 5298, 5321, 5357, 5400, 5401, 5402, 5405, 5414, 5431, 5432, 5440, 5500, 5510, 5544, 5550, 5555, 5556, 5560, 5566, 5569, 5631, 5632, 5633, 5666, 5678, 5679, 5714, 5718, 5730, 5742, 5800, 5801, 5802, 5810, 5811, 5815, 5822, 5825, 5850, 5859, 5862, 5877, 5900, 5901, 5902, 5903, 5904, 5906, 5907, 5910, 5911, 5915, 5922, 5925, 5950, 5952, 5959, 5960, 5961, 5962, 5963, 5987, 5988, 5989, 5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6009, 6025, 6059, 6100, 6101, 6106, 6112, 6123, 6129, 6156, 6267, 6346, 6389, 6400, 6502, 6510, 6543, 6547, 6565, 6566, 6567, 6580, 6646, 6666, 6667, 6668, 6669, 6670, 6671, 6689, 6692, 6699, 6711, 6713, 6767, 6771, 6776, 6779, 6788, 6789, 6792, 6839, 6881, 6883, 6901, 6939, 6969, 6970, 7000, 7001, 7002, 7004, 7007, 7019, 7025, 7070, 7100, 7103, 7106, 7170, 7200, 7201, 7300, 7301, 7306, 7307, 7308, 7323, 7402, 7435, 7443, 7496, 7512, 7625, 7626, 7627, 7676, 7741, 7777, 7778, 7789, 7800, 7911, 7920, 7921, 7937, 7938, 7999, 8000, 8001, 8002, 8007, 8008, 8009, 8010, 8011, 8021, 8022, 8031, 8042, 8045, 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8093, 8099, 8100, 8180, 8181, 8192, 8193, 8194, 8200, 8222, 8254, 8290, 8291, 8292, 8300, 8333, 8383, 8400, 8402, 8443, 8500, 8600, 8649, 8651, 8652, 8654, 8701, 8800, 8873, 8888, 8899, 8994, 9000, 9001, 9002, 9003, 9009, 9010, 9011, 9040, 9050, 9071, 9080, 9081, 9090, 9091, 9099, 9100, 9101, 9102, 9103, 9110, 9111, 9200, 9207, 9220, 9290, 9400, 9401, 9402, 9415, 9418, 9485, 9500, 9502, 9503, 9535, 9536, 9537, 9575, 9593, 9594, 9595, 9618, 9666, 9872, 9873, 9874, 9875, 9876, 9877, 9878, 9898, 9900, 9917, 9929, 9943, 9944, 9968, 9989, 9998, 9999, 10000, 10001, 10002, 10003, 10004, 10009, 10010, 10012, 10024, 10025, 10067, 10082, 10167, 10180, 10215, 10243, 10566, 10607, 10616, 10617, 10621, 10626, 10628, 10629, 10778, 11000, 11110, 11111, 11223, 11967, 12000, 12076, 12174, 12223, 12265, 12345, 12346, 12361, 12631, 13223, 13456, 13722, 13782, 13783, 14000, 14238, 14441, 14442, 15000, 15002, 15003, 15004, 15660, 15742, 16000, 16001, 16012, 16016, 16018, 16080, 16113, 16969, 16992, 16993, 17027, 17300, 17877, 17988, 18040, 18101, 18988, 19101, 19191, 19283, 19315, 19350, 19780, 19801, 19842, 20000, 20001, 20005, 20031, 20034, 20221, 20222, 20331, 20828, 21554, 21571, 22222, 22939, 23456, 23502, 24444, 24800, 25734, 25735, 26214, 26274, 27000, 27352, 27353, 27355, 27356, 27374, 27715, 28201, 29891, 30000, 30029, 30100, 30303, 30718, 30951, 30999, 31038, 31337, 31338, 31339, 31666, 31787, 32768, 32769, 32770, 32771, 32772, 32773, 32774, 32775, 32776, 32777, 32778, 32779, 32780, 32781, 32782, 32783, 32784, 32785, 33333, 33354, 33899, 33911, 34324, 34571, 34572, 34573, 35500, 38292, 40193, 40412, 40421, 40422, 40423, 40426, 40911, 41511, 42510, 43210, 44176, 44442, 44443, 44445, 44501, 45100, 47262, 47878, 48080, 49152, 49153, 49154, 49155, 49156, 49157, 49158, 49159, 49160, 49161, 49163, 49165, 49167, 49175, 49176, 49400, 49999, 50000, 50001, 50002, 50003, 50006, 50300, 50389, 50500, 50505, 50636, 50766, 50800, 51103, 51493, 52673, 52822, 52848, 52869, 53001, 54045, 54320, 54321, 54328, 55055, 55056, 55555, 55600, 56737, 56738, 57294, 57797, 58080, 60020, 60443, 61466, 61532, 61900, 62078, 63331, 64623, 64680, 65000, 65129, 65389] 53 | 54 | -------------------------------------------------------------------------------- /lib/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/lib/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /lib/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/lib/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /lib/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/lib/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /lib/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/lib/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /lib/imgs/operating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/lib/imgs/operating.png -------------------------------------------------------------------------------- /lib/imgs/result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/lib/imgs/result.png -------------------------------------------------------------------------------- /lib/whois/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from __future__ import print_function 4 | from __future__ import absolute_import 5 | from __future__ import unicode_literals 6 | from __future__ import division 7 | from future import standard_library 8 | standard_library.install_aliases() 9 | from builtins import * 10 | import re 11 | import sys 12 | import os 13 | import subprocess 14 | import socket 15 | from .parser import WhoisEntry 16 | from .whois import NICClient 17 | 18 | 19 | # thanks to https://www.regextester.com/104038 20 | IPV4_OR_V6 = re.compile(r"((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)|(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$))") 21 | 22 | 23 | def whois(url, command=False, flags=0): 24 | # clean domain to expose netloc 25 | ip_match = IPV4_OR_V6.match(url) 26 | if ip_match: 27 | domain = url 28 | try: 29 | result = socket.gethostbyaddr(url) 30 | except socket.herror as e: 31 | pass 32 | else: 33 | domain = extract_domain(result[0]) 34 | else: 35 | domain = extract_domain(url) 36 | if command: 37 | # try native whois command 38 | r = subprocess.Popen(['whois', domain], stdout=subprocess.PIPE) 39 | text = r.stdout.read().decode() 40 | else: 41 | # try builtin client 42 | nic_client = NICClient() 43 | text = nic_client.whois_lookup(None, domain.encode('idna'), flags) 44 | return WhoisEntry.load(domain, text) 45 | 46 | 47 | suffixes = None 48 | def extract_domain(url): 49 | """Extract the domain from the given URL 50 | 51 | >>> print(extract_domain('http://www.google.com.au/tos.html')) 52 | google.com.au 53 | >>> print(extract_domain('abc.def.com')) 54 | def.com 55 | >>> print(extract_domain(u'www.公司.hk')) 56 | 公司.hk 57 | >>> print(extract_domain('chambagri.fr')) 58 | chambagri.fr 59 | >>> print(extract_domain('www.webscraping.com')) 60 | webscraping.com 61 | >>> print(extract_domain('198.252.206.140')) 62 | stackoverflow.com 63 | >>> print(extract_domain('102.112.2O7.net')) 64 | 2o7.net 65 | >>> print(extract_domain('globoesporte.globo.com')) 66 | globo.com 67 | >>> print(extract_domain('1-0-1-1-1-0-1-1-1-1-1-1-1-.0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info')) 68 | 0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info 69 | >>> print(extract_domain('2607:f8b0:4006:802::200e')) 70 | 1e100.net 71 | >>> print(extract_domain('172.217.3.110')) 72 | 1e100.net 73 | """ 74 | if IPV4_OR_V6.match(url): 75 | # this is an IP address 76 | return socket.gethostbyaddr(url)[0] 77 | 78 | # load known TLD suffixes 79 | global suffixes 80 | if not suffixes: 81 | # downloaded from https://publicsuffix.org/list/public_suffix_list.dat 82 | tlds_path = os.path.join(os.getcwd(), os.path.dirname(__file__), 'data', 'public_suffix_list.dat') 83 | with open(tlds_path, encoding='utf-8') as tlds_fp: 84 | suffixes = set(line.encode('utf-8') for line in tlds_fp.read().splitlines() if line and not line.startswith('//')) 85 | 86 | if not isinstance(url, str): 87 | url = url.decode('utf-8') 88 | url = re.sub('^.*://', '', url) 89 | url = url.split('/')[0].lower() 90 | 91 | # find the longest suffix match 92 | domain = b'' 93 | for section in reversed(url.split('.')): 94 | if domain: 95 | domain = b'.' + domain 96 | domain = section.encode('utf-8') + domain 97 | if domain not in suffixes: 98 | break 99 | return domain.decode('utf-8') 100 | 101 | 102 | if __name__ == '__main__': 103 | try: 104 | url = sys.argv[1] 105 | except IndexError: 106 | print('Usage: %s url' % sys.argv[0]) 107 | else: 108 | print(whois(url)) 109 | -------------------------------------------------------------------------------- /lib/whois/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/lib/whois/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /lib/whois/__pycache__/parser.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/lib/whois/__pycache__/parser.cpython-36.pyc -------------------------------------------------------------------------------- /lib/whois/__pycache__/whois.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/lib/whois/__pycache__/whois.cpython-36.pyc -------------------------------------------------------------------------------- /lib/whois/time_zones.py: -------------------------------------------------------------------------------- 1 | from __future__ import unicode_literals 2 | from __future__ import print_function 3 | from __future__ import division 4 | from __future__ import absolute_import 5 | from future import standard_library 6 | standard_library.install_aliases() 7 | from builtins import * 8 | _tz_string = '''-12 Y 9 | -11 X NUT SST 10 | -10 W CKT HAST HST TAHT TKT 11 | -9 V AKST GAMT GIT HADT HNY 12 | -8 U AKDT CIST HAY HNP PST PT 13 | -7 T HAP HNR MST PDT 14 | -6 S CST EAST GALT HAR HNC MDT 15 | -5 R CDT COT EASST ECT EST ET HAC HNE PET 16 | -4 Q AST BOT CLT COST EDT FKT GYT HAE HNA PYT 17 | -3 P ADT ART BRT CLST FKST GFT HAA PMST PYST SRT UYT WGT 18 | -2 O BRST FNT PMDT UYST WGST 19 | -1 N AZOT CVT EGT 20 | 0 Z EGST GMT UTC WET WT 21 | 1 A CET DFT WAT WEDT WEST 22 | 2 B CAT CEDT CEST EET SAST WAST 23 | 3 C EAT EEDT EEST IDT MSK 24 | 4 D AMT AZT GET GST KUYT MSD MUT RET SAMT SCT 25 | 5 E AMST AQTT AZST HMT MAWT MVT PKT TFT TJT TMT UZT YEKT 26 | 6 F ALMT BIOT BTT IOT KGT NOVT OMST YEKST 27 | 7 G CXT DAVT HOVT ICT KRAT NOVST OMSST THA WIB 28 | 8 H ACT AWST BDT BNT CAST HKT IRKT KRAST MYT PHT SGT ULAT WITA WST 29 | 9 I AWDT IRKST JST KST PWT TLT WDT WIT YAKT 30 | 10 K AEST ChST PGT VLAT YAKST YAPT 31 | 11 L AEDT LHDT MAGT NCT PONT SBT VLAST VUT 32 | 12 M ANAST ANAT FJT GILT MAGST MHT NZST PETST PETT TVT WFT 33 | 13 FJST NZDT 34 | 11.5 NFT 35 | 10.5 ACDT LHST 36 | 9.5 ACST 37 | 6.5 CCT MMT 38 | 5.75 NPT 39 | 5.5 SLT 40 | 4.5 AFT IRDT 41 | 3.5 IRST 42 | -2.5 HAT NDT 43 | -3.5 HNT NST NT 44 | -4.5 HLV VET 45 | -9.5 MART MIT''' 46 | 47 | tz_data = {} 48 | 49 | for tz_descr in (tz_spec.split() for tz_spec in _tz_string.split('\n')): 50 | tz_offset = int(float(tz_descr[0]) * 3600) 51 | for tz_code in tz_descr[1:]: 52 | tz_data[tz_code] = tz_offset 53 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | # by:kracer 3 | # Version: 1.5 4 | 5 | # 引入模块、包部分 6 | from request import * # 获取返回内容 7 | from common import * 8 | from threading import Thread 9 | from colorama import init 10 | init(autoreset=True) # 让终端输出字体变色效果只对当前输出起作用 11 | import warnings 12 | warnings.filterwarnings("ignore") 13 | 14 | 15 | 16 | # 定义的常量、变量 17 | t = [] # 线程组 18 | logo = '''\033[1;32m 19 | ____ * _ ____ 20 | /___ | _ _| |_ ___ , /___ | ____ _____ _____ 21 | \_ \ | | |__ __| / ___, | \_ \ / ___/ / __\ \ | ___ \ 22 | __) | | | | | | \__|_| __) | | (__ | |__| | | | | | 23 | /____/ |_| |__| \_'____\ /____/ \____\ \ ____\ \ |_| |_| 24 | 25 | \033[1;36mBy:kracer 26 | \033[1;36mGithub:https://github.com/kracer127\033[0m 27 | ''' 28 | 29 | 30 | # 对allDict的数据进行清空处理 31 | def clearAll(): 32 | ''' 33 | allDict = {'nowIP': [], 'domain': [], 'ports': [], 'whois': [], 'beiAn': [], 'framework': [[], {}, {}], 'urlPATH': [], 'isCDN': [], 'pangZhan': [], 'historyIP': [], 'error': []} 34 | ''' 35 | try: 36 | allDict['nowIP'] = [] 37 | allDict['domain'] = [] 38 | allDict['ports'] = [] 39 | allDict['whois'] = [] 40 | allDict['beiAn'] = [] 41 | allDict['framework'] = [[], {}, {}] 42 | allDict['urlPATH'] = [] 43 | allDict['isCDN'] = [] 44 | allDict['pangZhan'] = [] 45 | allDict['historyIP'] = [] 46 | allDict['error'] = [] 47 | except Exception as e: 48 | pass 49 | 50 | 51 | # 多线程解决批查询(暂未实现,不稳定) 52 | def startMainThread(ip_url): 53 | ''' 判断网址是否有误 ''' ## 可改进地方 ## 54 | test = processUrl(ip_url) 55 | if test == []: 56 | print('\033[1;31m[-] 网址输入有误,请检查后再试!\033[0m') 57 | return None 58 | ''' 正确进入主函数查询 ''' 59 | url = processUrl(ip_url)[0] 60 | subDomain = processUrl(ip_url)[-1] 61 | if isAlive(url) == True: # 检测用户输入网址是否有效 62 | main(url, subDomain) 63 | else: 64 | print('\033[1;35m[-] 当前网址 {0} 不可访问, 尝试根域名信息查询!!\033[0m'.format(url)) 65 | request(subDomain).IP138() 66 | request(subDomain).Icp() 67 | request(subDomain).getCrtDomain() 68 | request(subDomain).Chaziyu() 69 | request(subDomain).virusDomain() 70 | request(subDomain).googleHack() 71 | print('\033[1;34m[-] 根域名 {0} 信息查询完毕!!\033[0m'.format(subDomain)) 72 | print('[*] 网址:{0} 所有检测任务完成, 开始生成检测报告......'.format(url)) 73 | all2HTML(url, allDict) 74 | clearAll() 75 | 76 | 77 | # 主函数入口 78 | def main(url, subDomain): 79 | tasks = [] 80 | print('[+] ============ 网址:{0} 检测任务开启, 预估需要3~5min ============'.format(url)) 81 | 82 | """ 入口一: 域名资产清查""" 83 | # 1.进入<domain2ip函数>获取当前url的ip解析及粗略地理位置 84 | t1 = request(url).domain2ip() 85 | t1_1 = Thread(target=t1) 86 | tasks.append(t1_1) 87 | # 2.进入<IP138函数>获取备案、子域名、历史ip绑定信息 88 | t2 = request(url).IP138() 89 | t2_1 = Thread(target=t2) 90 | tasks.append(t2_1) 91 | # 3.进入<Icp函数>获取备案信息 92 | t3 = request(subDomain).Icp() 93 | t3_1 = Thread(target=t3) 94 | tasks.append(t3_1) 95 | # 4.进入<crt.sh函数>获取子域名信息 96 | t4 = request(subDomain).getCrtDomain() 97 | t4_1 = Thread(target=t4) 98 | tasks.append(t4_1) 99 | # 5.进入<virusTotal函数>获取子域名信息 100 | t5 = request(subDomain).virusDomain() 101 | t5_1 = Thread(target=t5) 102 | tasks.append(t5_1) 103 | # 6.进入<Chaziyu函数>获取子域名函数 104 | t6 = request(subDomain).Chaziyu() 105 | t6_1 = Thread(target=t6) 106 | tasks.append(t6_1) 107 | # 7.进入<isCDN函数>判断是否存在CDN信息 108 | t7 = request(url).isCDN() 109 | t7_1 = Thread(target=t7) 110 | tasks.append(t7_1) 111 | 112 | 113 | """ 入口二: 网站资产清查 """ 114 | # 1.进入<whatweb函数>获取网站的架构信息 115 | t8 = request(url).whatWeb() 116 | t8_1 = Thread(target=t8) 117 | tasks.append(t8_1) 118 | # 2.进入<JSfinder函数>获取子所有域名+url路径 119 | t9 = request(url).jsFinder() 120 | t9_1 = Thread(target=t9) 121 | tasks.append(t9_1) 122 | # 3.进入<GoogleHacking>函数 查找js文件及提取子域名 123 | t10 = request(url).googleHack() 124 | t10_1 = Thread(target=t10) 125 | tasks.append(t10_1) 126 | # 4.进入<wafw00f>函数 侦探网站的waf 127 | def mainDetect(): 128 | domain = allDict['urlPATH'] 129 | keyURL_list = [] 130 | for k in domain: 131 | if ('=' in k) and ('?' in k): 132 | keyURL_list.append(k) 133 | if len(keyURL_list) >= 2: 134 | request(keyURL_list[0]).detectWaf() 135 | request(keyURL_list[1]).detectWaf() 136 | elif len(keyURL_list) == 1: 137 | request(keyURL_list[0]).detectWaf() 138 | request(url).detectWaf() 139 | else: 140 | request(url).detectWaf() 141 | if len(domain) > 0: 142 | request(domain[0]).detectWaf() 143 | print("\033[1;34m[*] 完成网站waf信息侦测, 共"+str(len(allDict['framework'][2]))+"条数据!!\033[0m") 144 | t11 = mainDetect() 145 | t11_1 = Thread(target=t11) 146 | tasks.append(t11_1) 147 | 148 | 149 | """ 入口三: 不存在CDN下网站IP资产清查 """ 150 | # 1.进入<PangZhan函数>获取当前域名IP下的同服务器网站 151 | t12 = request(url).pangZhan() 152 | t12_1 = Thread(target=t12) 153 | tasks.append(t12_1) 154 | # 2.进入<getPorts函数>获取网站开发端口信息 155 | t13 = request(url).getPorts() 156 | t13_1 = Thread(target=t13) 157 | tasks.append(t13_1) 158 | 159 | for i in tasks: 160 | i.start() 161 | for j in tasks: 162 | j.join() 163 | 164 | 165 | # 最终执行函数 166 | if __name__ == '__main__': 167 | print(logo) 168 | urlList = [] 169 | args = parse_args() 170 | if args.url: 171 | urlList.append(args.url) 172 | if args.file: 173 | try: 174 | with open(args.file, 'r', encoding='utf-8') as u: 175 | dataURL = u.readlines() 176 | for i in dataURL: 177 | urlList.append(i.strip()) 178 | if urlList == []: # 文件判空 179 | print('\033[1;31m[-] 文件错误,请检查后再试!\033[0m') 180 | except Exception as e: 181 | print('\033[1;31m[-] 文件错误,请检查后再试!\033[0m') 182 | start = time.time() 183 | for ip_url in urlList: 184 | startMainThread(ip_url) 185 | end = time.time() 186 | print("\033[1;36m[*] 本次检测共消耗时间:{:.2f}s\033[0m".format(end - start)) 187 | 188 | 189 | 190 | 191 | -------------------------------------------------------------------------------- /output/www.xxx.com_report.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xzajyjs/SiteScan/11a7820d91174d193b92d745d820ac007ea8a5aa/output/www.xxx.com_report.html -------------------------------------------------------------------------------- /requestments.txt: -------------------------------------------------------------------------------- 1 | requests 2 | gevent 3 | bs4 4 | dominate 5 | colorama 6 | future 7 | pluginbase 8 | lxml --------------------------------------------------------------------------------