├── 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 |
6 |
7 |
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 |
55 |
56 |
57 |
58 | **2、生成的html报告:**
59 |
60 |
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'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'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'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'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'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'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'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'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|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"\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'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"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.进入获取当前url的ip解析及粗略地理位置
84 | t1 = request(url).domain2ip()
85 | t1_1 = Thread(target=t1)
86 | tasks.append(t1_1)
87 | # 2.进入获取备案、子域名、历史ip绑定信息
88 | t2 = request(url).IP138()
89 | t2_1 = Thread(target=t2)
90 | tasks.append(t2_1)
91 | # 3.进入获取备案信息
92 | t3 = request(subDomain).Icp()
93 | t3_1 = Thread(target=t3)
94 | tasks.append(t3_1)
95 | # 4.进入获取子域名信息
96 | t4 = request(subDomain).getCrtDomain()
97 | t4_1 = Thread(target=t4)
98 | tasks.append(t4_1)
99 | # 5.进入获取子域名信息
100 | t5 = request(subDomain).virusDomain()
101 | t5_1 = Thread(target=t5)
102 | tasks.append(t5_1)
103 | # 6.进入获取子域名函数
104 | t6 = request(subDomain).Chaziyu()
105 | t6_1 = Thread(target=t6)
106 | tasks.append(t6_1)
107 | # 7.进入判断是否存在CDN信息
108 | t7 = request(url).isCDN()
109 | t7_1 = Thread(target=t7)
110 | tasks.append(t7_1)
111 |
112 |
113 | """ 入口二: 网站资产清查 """
114 | # 1.进入获取网站的架构信息
115 | t8 = request(url).whatWeb()
116 | t8_1 = Thread(target=t8)
117 | tasks.append(t8_1)
118 | # 2.进入获取子所有域名+url路径
119 | t9 = request(url).jsFinder()
120 | t9_1 = Thread(target=t9)
121 | tasks.append(t9_1)
122 | # 3.进入函数 查找js文件及提取子域名
123 | t10 = request(url).googleHack()
124 | t10_1 = Thread(target=t10)
125 | tasks.append(t10_1)
126 | # 4.进入函数 侦探网站的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.进入获取当前域名IP下的同服务器网站
151 | t12 = request(url).pangZhan()
152 | t12_1 = Thread(target=t12)
153 | tasks.append(t12_1)
154 | # 2.进入获取网站开发端口信息
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
--------------------------------------------------------------------------------