From 8a2120b73c710bbe7458a914f51eb0172dd25480 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B9=9D=E4=B8=96?= <422926799@qq.com>
Date: Sat, 26 May 2018 17:37:50 +0800
Subject: [PATCH 01/23] hack the python by jiu
---
Distinguish.py | 132 ++++++++++++++++++++++++++++++++
Interface.json | 1 +
cms.py | 70 +++++++++++++++++
cms.txt | 1 +
cs.py | 4 +
csrfjiance.py | 78 +++++++++++++++++++
dianjijieci.py | 29 +++++++
gonjusetup.py | 46 +++++++++++
mulu.txt | 35 +++++++++
sqlzhuru.py | 105 ++++++++++++++++++++++++++
sqlzhuruapi.py | 69 +++++++++++++++++
urltiaozhuan.py | 45 +++++++++++
whois.txt | 197 ++++++++++++++++++++++++++++++++++++++++++++++++
13 files changed, 812 insertions(+)
create mode 100644 Distinguish.py
create mode 100644 Interface.json
create mode 100644 cms.py
create mode 100644 cms.txt
create mode 100644 cs.py
create mode 100644 csrfjiance.py
create mode 100644 dianjijieci.py
create mode 100644 gonjusetup.py
create mode 100644 mulu.txt
create mode 100644 sqlzhuru.py
create mode 100644 sqlzhuruapi.py
create mode 100644 urltiaozhuan.py
create mode 100644 whois.txt
diff --git a/Distinguish.py b/Distinguish.py
new file mode 100644
index 0000000..4adf35a
--- /dev/null
+++ b/Distinguish.py
@@ -0,0 +1,132 @@
+import requests
+import re
+import socket
+from bs4 import BeautifulSoup
+import optparse
+
+def main():
+ parser=optparse.OptionParser()
+ parser.add_option('-p',dest='host',help='ip port scanner')
+ parser.add_option('-w',dest='whois',help='Whois query')
+ parser.add_option('-d',dest='dns',help='dns query')
+ parser.add_option('-z',dest='domain',help='Domain name query')
+ parser.add_option('-f',dest='fw',help='Bypass query')
+ (options,args)=parser.parse_args()
+ if options.host:
+ ip=options.host
+ portscanner(ip)
+ elif options.whois:
+ ws=options.whois
+ whois(ws)
+ elif options.dns:
+ dn=options.dns
+ dnsquery(dn)
+ elif options.domain:
+ domain=options.domain
+ domains(domain)
+ elif options.fw:
+ pz=options.fw
+ bypass(pz)
+ else:
+ parser.print_help()
+ exit()
+def portscanner(ip):
+ s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
+ socket.setdefaulttimeout(1)
+ for port in range(1,65535):
+ try:
+ s.connect((ip,port))
+ print('[+]',ip,':',port,'open')
+ except:
+ pass
+
+def whois(ws):
+ url = "http://whoissoft.com/{}".format(ws)
+ rest = requests.get(url=url)
+ csd = rest.content.decode('utf-8')
+ fsd = BeautifulSoup(csd, 'html.parser')
+ wsd = fsd.get_text()
+ comp = re.compile(
+ r'a:link, a:visited {.*? }|a:hover {.*?}|white-space: .*?;|font-family:.*?;|function\s+s|window.location.href\s+=\s+".*?"|return\s+false;| var _sedoq\s+=\s+_sedoq|_sedoq.partnerid\s+=\s+''316085'';| _sedoq.locale\s+=\s+''zh-cn'';|var\s+s\s+=\s+document.createElement|s.type\s+=\s+''text/javascript'';|s.async\s+=\s+true;|s.src\s+=\s+''.*?'';|var\s+f\s+=\s+document.getElementsByTagName|f.parentNode.insertBefore|/.*?/|pre\s+{|word-wrap:\s+break-word;|}|\s*\(str1\){|\s+\+\s+str1;|\s+\|\s+\|\|\s+{;|\s+\|\|\s+{;|_sedoq.partnerid|\s+=|''316085''|\s+'';|\s+enter\s+your\s+partner\s+id|_sedoq.locale\s+=\s+|zh-cn|language\s+locale|\(function\(\)\s+{|\[0\];|s.type|text/javascript|script|s,\s+f|document.getElementById\(.*?\)|.style.marginLeft|=window|\|\||\s+{|;|en-us,|en-uk,|de-de,|es-er-fr,|pt-br,|\s+.innerWidth2|es-|er-|fr|.innerWidth2|er|-,')
+ tih = re.sub(comp, "", wsd)
+ wrs = open('whois.txt', 'w')
+ wrs.write(tih)
+ wrs.close()
+ wrr = open('whois.txt', 'r')
+ rr = wrr.read()
+ xin = rr.replace("''", '')
+ xin2 = xin.replace("(", '')
+ xin3 = xin2.replace(")", '')
+ xin4 = xin3.replace("er-,", '')
+ xin5 = xin4.replace('.innWidth2+"px"', '')
+ xin6 = xin5.replace('window.onresize=function{', '')
+ xin7 = xin6.replace('.innWidth2+"px"', '')
+ print(xin7, end='')
+def dnsquery(dn):
+ url = "https://jiexifenxi.51240.com/web_system/51240_com_www/system/file/jiexifenxi/get/?ajaxtimestamp=1526175925753"
+ headers = {
+ 'user-agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16'}
+ params = {'q': '{}'.format(dn), 'type': 'a'}
+ reqst = requests.post(url=url, headers=headers, params=params)
+ content = reqst.content.decode('utf-8')
+ bd = BeautifulSoup(content, 'html.parser')
+
+ print('---[+]A record---')
+ print(bd.get_text())
+
+ print('---[+]MX record---')
+ params2 = {'q': '{}'.format(dn), 'type': 'mx'}
+ rest = requests.post(url=url, headers=headers, params=params2)
+ content2 = BeautifulSoup(rest.content.decode('utf-8'), 'html.parser')
+ print(content2.get_text())
+
+ print('---[+]CNAME record---')
+ params3 = {'q': '{}'.format(dn), 'type': 'cname'}
+ rest2 = requests.post(url=url, headers=headers, params=params3)
+ content3 = BeautifulSoup(rest2.content.decode('utf-8'), 'html.parser')
+ print(content3.get_text())
+
+ print('---[+]NS record---')
+ params4 = {'q': '{}'.format(dn), 'type': 'ns'}
+ rest3 = requests.post(url=url, headers=headers, params=params4)
+ content4 = BeautifulSoup(rest3.content.decode('utf-8'), 'html.parser')
+ print(content4.get_text())
+
+ print('---[+]TXT record---')
+ params5 = {'q': '{}'.format(dn), 'type': 'txt'}
+ rest4 = requests.post(url=url, headers=headers, params=params5)
+ content5 = BeautifulSoup(rest4.content.decode('utf-8'), 'html.parser')
+ print(content5.get_text())
+
+def domains(domain):
+ print('---[+]Domain name query---')
+ url = "http://i.links.cn/subdomain/"
+ headers = {'user-agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16'}
+ params = {'domain': '{}'.format(domain), 'b2': '1', 'b3': '1', 'b4': '1'}
+ reqst = requests.post(url=url, headers=headers, params=params)
+ vd = reqst.content.decode('gbk')
+ rw = re.findall('
', vd)
+ rw2 = "".join(str(rw))
+ bwdw = BeautifulSoup(str(rw2), 'html.parser')
+ pw = bwdw.find_all('input')
+ for l in pw:
+ isd = l.get("value")
+ print(isd)
+
+def bypass(pz):
+ url = "http://www.webscan.cc/?action=query&ip={}".format(pz)
+ headers = {
+ 'user-agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16'}
+ wd = requests.get(url=url, headers=headers)
+ rcy = wd.content.decode('utf-8')
+ res = re.findall('"domain":".*?"', str(rcy))
+ lis = "".join(res)
+ rmm = lis.replace('"', '')
+ rmm2 = rmm.replace(':', '')
+ rmm3 = rmm2.replace('/', '')
+ rmm4 = rmm3.replace('domain', '')
+ rmm5 = rmm4.replace('http', '')
+ print(rmm5)
+
+if __name__ == '__main__':
+ main()
diff --git a/Interface.json b/Interface.json
new file mode 100644
index 0000000..1b49c58
--- /dev/null
+++ b/Interface.json
@@ -0,0 +1 @@
+{"act":"setdevice","seqid":"15071523","eno":"XXX","heart": "XXX","timespan": "XXX","data":[{"sencode":"xxx","timespan": "XXX","min": "XXX","max": "XXX"},{"sencode":"xxx","timespan": "XXX","min": "XXX","max": "XXX","opentime":"xxx","closetime":"xxx"}]}
diff --git a/cms.py b/cms.py
new file mode 100644
index 0000000..1adde3d
--- /dev/null
+++ b/cms.py
@@ -0,0 +1,70 @@
+import requests
+import json
+import hashlib
+import os
+import optparse
+def main():
+ usage="[-q MD5DE-CMS] " \
+ "[- p URL gets CMS]"
+ parser=optparse.OptionParser(usage)
+ parser.add_option('-q',dest='md5',help='md5 cms')
+ parser.add_option('-p',dest='url',help='url cms')
+ (options,args)=parser.parse_args()
+ if options.md5:
+ log=options.md5
+ panduan(log)
+ elif options.url:
+ log2=options.url
+ panduan2(log2)
+ else:
+ parser.print_help()
+
+
+def op():
+ global lr
+ if os.path.exists('data.json'):
+ print('[+]Existing data.json file')
+ js=open('data.json','r')
+ lr=json.load(js,encoding='utf-8')
+ else:
+ print('[-]Not data.json')
+ exit()
+
+op()
+
+def panduan(log):
+ global headers
+ headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}
+ for b in lr:
+ url = log.rstrip('/') + b["url"]
+ rest = requests.get(url=url, headers=headers, timeout=5)
+ text = rest.text
+ if rest.status_code != 200:
+ print('[-]Not Found 200', rest.url)
+ md5=hashlib.md5()
+ md5.update(text.encode('utf-8'))
+ g=md5.hexdigest()
+ print(g)
+ if g == b["md5"]:
+ print("[+]CMS:",b["name"],"url:",b["url"])
+ print("[+]CMS:",b["name"],"url:",b["url"],file=open('cms.txt','w'))
+ else:
+ print('[-]not md5:',b["md5"])
+
+
+
+def panduan2(log2):
+ for w in lr:
+ headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}
+ url = log2.rstrip('/') + w["url"]
+ rest=requests.get(url=url,headers=headers,timeout=5)
+ text=rest.text
+ if rest.status_code !=200:
+ pass
+ if w["re"]:
+ if(text.find(w["re"]) != -1):
+ print('[+]CMS:',w["name"],"url:",w["url"])
+ print('[+]CMS:', w["name"], "url:", w["url"],file=open('cms.txt','w'))
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/cms.txt b/cms.txt
new file mode 100644
index 0000000..67e3128
--- /dev/null
+++ b/cms.txt
@@ -0,0 +1 @@
+[+]CMS: Drupal(水滴) url: /modules/legacy/legacy.info
diff --git a/cs.py b/cs.py
new file mode 100644
index 0000000..2111547
--- /dev/null
+++ b/cs.py
@@ -0,0 +1,4 @@
+import platform
+version=platform.uname()
+for p in version:
+ print(p)
\ No newline at end of file
diff --git a/csrfjiance.py b/csrfjiance.py
new file mode 100644
index 0000000..0bf0830
--- /dev/null
+++ b/csrfjiance.py
@@ -0,0 +1,78 @@
+import requests,tqdm,time,os,re
+logo="""
+◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◇◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◇◇◇◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◆◆◇◇◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◇◆◆◆◆◆◇◇◇◇◇◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◇◇◇◇◇◇◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
+◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◇◇◇◇◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◆◆◆◆◆◆◆◆◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
+ """
+print(logo)
+tishi="This tool is developed for research only. No law violation is related to developers."
+print('[!]',tishi)
+def osd():
+ name=os.name
+ if name == 'nt':
+ print('[+]Your operating environment is windows')
+ elif name == 'posix':
+ print('[+]Your operating environment is Linux')
+ else:
+ print("[-]I'm sorry I didn't find your system")
+osd()
+
+user=input('Enter the web site to scan:')
+def jiance():
+ global content,headers,rest
+ url=user.strip()
+ headers={'User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}
+ rest=requests.get(url=url,headers=headers,timeout=6)
+ content=rest.text
+ if rest.status_code == 200:
+ print('[+]The goal is to be stable')
+ else:
+ print('[-]The goal is unstable.')
+jiance()
+
+user2=input('Enter the cookie:')
+
+egg1 = "user_token"
+egg2 = "token"
+egg3 = "g_tk"
+egg = []
+egg.append(egg1)
+egg.append(egg2)
+egg.append(egg3)
+
+
+def csrf():
+ cookies={}
+ for line in user2.strip().split(';'):
+ key,value=line.split('=',1)
+ cookies[key]=value
+
+
+ rest2=requests.get(url=user.strip(),headers=headers,timeout=6,cookies=cookies)
+ st=rest2.text
+ for x in egg:
+ livs="".join(x)
+ if livs in str(st):
+ print('[-]There is no vulnerability in token')
+ print('[*]name:',livs)
+ exit()
+ else:
+ print('[+]url:',rest2.url)
+
+csrf()
diff --git a/dianjijieci.py b/dianjijieci.py
new file mode 100644
index 0000000..9211b60
--- /dev/null
+++ b/dianjijieci.py
@@ -0,0 +1,29 @@
+import requests,tqdm,time,optparse
+def main():
+ usage='dianjijieci.py [-u url]'
+ parser=optparse.OptionParser(usage)
+ parser.add_option('-u',dest='url',help='The web site to be tested URL')
+ (options,args)=parser.parse_args()
+ if options.url:
+ url=options.url
+ jiechi(url)
+ else:
+ parser.print_help()
+def jiechi(url):
+ urls="{}".format(url)
+ headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
+ reqst=requests.get(url=urls,headers=headers,timeout=6)
+ if reqst.status_code == 200:
+ print('[+]Target stability')
+ try:
+ hea=reqst.headers
+ print(hea['X-FRAME-OPTIONS'])
+ print('[n]X-FRAME-OPTIONS header, no click hijacking vulnerability can be used')
+ except:
+ print('[+]There is no X-FRAME-OPTIONS header. There is a clicking hijacking vulnerability')
+ print('[!]Remind:It may be a defense against JS. Please test it yourself')
+ else:
+ print('[n]bjective instability')
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/gonjusetup.py b/gonjusetup.py
new file mode 100644
index 0000000..9d95db5
--- /dev/null
+++ b/gonjusetup.py
@@ -0,0 +1,46 @@
+import os
+import time
+import threading
+import re
+import optparse
+logo="######################" \
+ "#此脚本将安装以下所有工具 #" \
+ "#制作人:即刻安全-九世 # " \
+ "##################### "
+print(logo)
+def main():
+ usage="-x 安装信息收集工具包" \
+ "-s 数据库扫描器"
+ parser=optparse.OptionParser(usage)
+ parser.add_option('-x',action='store_true',dest='xs',help='-x')
+ parser.add_option('-s',action='store_true',dest='sj',help='-s')
+ (options,args)=parser.parse_args()
+ if options.xs:
+ x=threading.Thread(target=xs,args=())
+ x.start()
+ elif options.sj:
+ s=threading.Thread(target=sj,args=())
+ s.start()
+ else:
+ parser.print_help()
+ exit()
+
+def xs():
+ vis=open('mulu.txt','r').read()
+ print('[*]将安装:')
+ print(vis)
+ time.sleep(1)
+ print('[+]清空')
+ os.system('clear')
+
+ print('[+]开始安装')
+ vss=open('mulu.txt','r')
+ for w in vss.readlines():
+ sq=re.findall('[a-zA-z]+://[^\s]*',w)
+ for w in sq:
+ print('[+]正在安装:{}'.format(w))
+ os.system('git clone {}'.format(w))
+ print('')
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/mulu.txt b/mulu.txt
new file mode 100644
index 0000000..e75d23e
--- /dev/null
+++ b/mulu.txt
@@ -0,0 +1,35 @@
+https://github.com/lijiejie/subDomainsBrute.git (经典的子域名爆破枚举脚本)
+
+https://github.com/ring04h/wydomain.git (子域名字典穷举)
+
+https://github.com/le4f/dnsmaper.git (子域名枚举与地图标记)
+
+https://github.com/0xbug/orangescan.git (在线子域名信息收集工具)
+
+https://github.com/TheRook/subbrute.git (高效精准的子域名爆破工具)
+
+https://github.com/We5ter/GSDF.git (基于谷歌SSL透明证书的子域名查询脚本)
+
+https://github.com/mandatoryprogrammer/cloudflare_enum.git (使用CloudFlare进行子域名枚举的脚本)
+
+https://github.com/guelfoweb/knock.git (Knock子域名获取,可用于查找子域名接管漏洞)
+
+https://github.com/exp-db/PythonPool/tree/master/Tools/DomainSeeker.git (多方式收集目标子域名信息)
+
+https://github.com/code-scan/BroDomain.git (兄弟域名查询)
+
+https://github.com/chuhades/dnsbrute.git (高效的子域名爆破工具)
+
+https://github.com/yanxiu0614/subdomain3.git (一款高效的子域名爆破工具)
+
+https://github.com/michenriksen/aquatone.git (子域名枚举、探测工具。可用于子域名接管漏洞探测)
+
+https://github.com/evilsocket/dnssearch.git (一款子域名爆破工具)
+
+https://github.com/reconned/domained.git (可用于子域名收集的一款工具)
+
+https://github.com/bit4woo/Teemo.git (域名收集及枚举工具)
+
+https://github.com/laramies/theHarvester.git (邮箱、服务器信息收集及子域名枚举工具)
+
+https://github.com/swisskyrepo/Subdomino.git (子域名枚举,端口扫描,服务存活确认)
\ No newline at end of file
diff --git a/sqlzhuru.py b/sqlzhuru.py
new file mode 100644
index 0000000..0f66187
--- /dev/null
+++ b/sqlzhuru.py
@@ -0,0 +1,105 @@
+import requests,re,time,os
+from tqdm import tqdm
+from bs4 import BeautifulSoup
+def zhuru():
+ global x,headers,ps
+ user=input('[+]Please enter the URL you want to test:')
+ url="{}".format(user.strip())
+ headers={'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}
+ request=requests.get(url,headers)
+ shoujiurl=[]
+ rse=request.content
+ gwd=BeautifulSoup(rse,'html.parser')
+ php=gwd.find_all(href=re.compile(r'php\?'))
+ asp=gwd.find_all(href=re.compile(r'asp\?'))
+ jsp=gwd.find_all(href=re.compile(r'jsp\?'))
+ print('[+]Collection URL ')
+ for i in tqdm(range(1,500)):
+ time.sleep(0.001)
+ for lk in php:
+ basd=lk.get('href')
+ shoujiurl.append(basd)
+ for ba in asp:
+ basd2=ba.get('href')
+ shoujiurl.append(basd2)
+ for op in jsp:
+ basd3=op.get('href')
+ shoujiurl.append(basd3)
+ print('[+]Collection completed')
+
+
+ huixian=[]
+ huixian1 = "is not a valid MySQL result resource"
+ huixian2 = "ODBC SQL Server Driver"
+ huixian3 = "Warning:ociexecute"
+ huixian4 = "Warning: pq_query[function.pg-query]"
+ huixian5 = "You have an error in your SQL syntax"
+ huixian6 = "Database Engine"
+ huixian7 = "Undefined variable"
+ huixian8 = "on line"
+ huixian9 = "mysql_fetch_array():"
+
+ huixian.append(huixian1)
+ huixian.append(huixian2)
+ huixian.append(huixian3)
+ huixian.append(huixian4)
+ huixian.append(huixian5)
+ huixian.append(huixian6)
+ huixian.append(huixian7)
+ huixian.append(huixian8)
+ huixian.append(huixian9)
+ for g in huixian:
+ ps="".join(g)
+
+ payload0="'"
+ payload1="''"
+ payload2="%20and%201=1"
+ payload3="%20and%201=2"
+ for x in shoujiurl:
+ yuan="".join(x)
+ ssdx="".join(x)+payload0
+ ssdx2="".join(x)+payload1
+ ssdx3="".join(x)+payload2
+ ssdx4="".join(x)+payload3
+ pdul=re.findall('[a-zA-z]+://[^\s]*',ssdx)
+ pdul2=re.findall('[a-zA-z]+://[^\s]*',ssdx2)
+ pdul3=re.findall('[a-zA-z]+://[^\s]*',yuan)
+ pdul4=re.findall('[a-zA-z]+://[^\s]*',ssdx3)
+ pdul5=re.findall('[a-zA-z]+://[^\s]*',ssdx4)
+ psuw="".join(pdul)
+ psuw2="".join(pdul2)
+ psuw3="".join(pdul3)
+ psuw4="".join(pdul4)
+ psuw5="".join(pdul5)
+ try:
+ resg=requests.get(url=psuw,headers=headers,timeout=6)
+ resg2=requests.get(url=psuw2,headers=headers,timeout=6)
+ resg3=requests.get(url=psuw3,headers=headers,timeout=6)
+ resg4=requests.get(url=psuw4,headers=headers,timeout=6)
+ resg5=requests.get(url=psuw5,headers=headers,timeout=6)
+ if resg.status_code == 200:
+ print('[+]The first step is completed, and the goal is to be stable')
+ time.sleep(1)
+ if resg.content != resg2.content and resg3.content == resg2.content:
+ print('[+]Existence of character injection')
+ print(resg3.url)
+ print(resg3.url,file=open('character.txt','a'))
+ elif resg4.content != resg5.content and resg4.content == resg3.content:
+ print('[+]Digital injection')
+ print(resg3.url)
+ print(resg3.url,file=open('injection.txt','a'))
+
+ else:
+ print('[+]Sorry, not character injection')
+ print('[+]Sorry, not Digital injection')
+ print(resg3.url)
+ if ps in str(resg2.content):
+ print('[+]The wrong sentence to be found',ps)
+ elif resg.status_code != 200:
+ print('http_stode:',resg.status_code)
+ print('[-]Sorry, I cant tell if there is an injection')
+ except:
+ pass
+
+
+zhuru()
diff --git a/sqlzhuruapi.py b/sqlzhuruapi.py
new file mode 100644
index 0000000..3c7b934
--- /dev/null
+++ b/sqlzhuruapi.py
@@ -0,0 +1,69 @@
+import requests
+import json
+import platform
+import os
+logo="#sqlmap api制作" \
+ "#九世制作"
+print(logo)
+print('[1]Manually open sqlmapapi')
+print('[2]Automatically open sqlmapapi')
+while True:
+ start=input("Please choose:")
+ if start == "1":
+ print('[*]You choose to open sqlmapapi manually')
+ break
+ elif start == "2":
+ print('[*]You choose to automatically open sqlmapapi')
+ os.system('sqlmapapi.py -s')
+ break
+ else:
+ print('[-]There is no choice')
+ continue
+
+while True:
+ user=input('Please enter the web site you want to scan:')
+ if user==None:
+ print('[-]You have nothing to enter')
+ continue
+ else:
+ break
+
+vsersion=platform.uname()
+for p in vsersion:
+ print('[*]Your operating system type is:{}'.format(p))
+
+print(' ')
+
+def sqlmap(host):
+ urlnew="http://127.0.0.1:8775/task/new"
+ urlscan="http://127.0.0.1:8775/scan/"
+ headers={"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"}
+ pd=requests.get(url=urlnew,headers=headers)
+ print('[*]New task')
+ jsons=pd.json()
+ print("[*]id:",jsons['taskid'])
+ print("[*]success:",jsons["success"])
+ id=jsons['taskid']
+ scan=urlscan+id+"/start"
+ print("[*]scanurl:",scan)
+ data=json.dumps({"url":"{}".format(host)})
+ headerss={"Content-Type":"application/json"}
+ scans=requests.post(url=scan,headers=headerss,data=data)
+ swq=scans.json()
+ print('--------SCAN-----------')
+ print('[*]scanid:',swq["engineid"])
+ print('[*]scansuccess:',swq["success"])
+ print('--------STATUS---------')
+ status="http://127.0.0.1:8775/scan/{}/status".format(id)
+ print(status)
+ while True:
+ staw=requests.get(url=status,headers=headers)
+ if staw.json()['status'] == 'terminated':
+ datas=requests.get(url='http://127.0.0.1:8775/scan/{}/data'.format(id))
+ dat=datas.json()['data']
+ print('[*]data:',dat)
+ break
+ elif staw.json()['status'] == 'running':
+ continue
+
+sqlmap(user.strip())
\ No newline at end of file
diff --git a/urltiaozhuan.py b/urltiaozhuan.py
new file mode 100644
index 0000000..59023d7
--- /dev/null
+++ b/urltiaozhuan.py
@@ -0,0 +1,45 @@
+import requests,time
+def poc():
+ user=input('Please enter the web site to be tested:')
+ user2=input('Please enter the parameters you want to bring in:')
+ values=user2.strip().split('?')[-1]
+ params={}
+ for line in values.split('&'):
+ key,value=line.split('=',1)
+ params[key]=value
+ print('URL:',user)
+ print('The parameters you have taken are:',params)
+ time.sleep(0.2)
+ print('If you want to change the parameters, please enter y')
+ print('Do not need to change to enter n')
+ user3=input('Do you want to change your parameters[y/n]:')
+ if user3 == 'y':
+ while True:
+ print('Please enter the name of the parameter you want to change{name: value}')
+ print(params)
+ user4=input('Please fill in the name:')
+ user5=input('Please enter the value you want to change:')
+ params['{}'.format(user4)]='{}'.format(user5)
+ print('The change is done, and your current parameter is',params)
+ user6=input('Do you want to continue to love the parameters more[y/n]?:')
+ if user6 == 'y':
+ continue
+ elif user6 == 'n':
+ break
+ elif user6 == '':
+ break
+
+ url=user.strip()
+ headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}
+ rest=requests.get(url=url,headers=headers,timeout=6,params=params, allow_redirects=False)
+ print('Http_code:',rest.status_code)
+ print(rest.headers)
+ try:
+ print(rest.headers['Location'])
+ if rest.headers['Location'] == 'http://www.baidu.com':
+ print('[*]There is a URL redirection vulnerability in this link')
+ else:
+ print('[+]There is no URL redirection vulnerability in this link')
+ except:
+ print('[-]not Location head')
+poc()
diff --git a/whois.txt b/whois.txt
new file mode 100644
index 0000000..c9b9ef8
--- /dev/null
+++ b/whois.txt
@@ -0,0 +1,197 @@
+
+baidu.com Domain WHOIS Lookup - WhoisSoft
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Domain name/IP Address:
+
+
+
+Realtime WHOIS lookup for ov 200 domain name extensions,
+IDN (Intnationalized Domain Names) and IP addresses.
+
+
+
+Domain Name: baidu.com IP Address: 104.193.88.123123.125.115.110/220.181.57.216Google PageRank: 0
+WHOIS Lookup For Domain Name baidu.com:
+
+
+
+
+Domain Name: BAIDU.COM
+ Registry Domain ID: 11181110_DOMAIN_COM-VRSN
+ Registrar WHOIS Sv: whois.markmonitor.com
+ Registrar URL: http:www.markmonitor.com
+ Updated Date: 2017-07-28T02:36:28Z
+ Creation Date: 1999-10-11T11:05:17Z
+ Registry Expiry Date: 2026-10-11T11:05:17Z
+ Registrar: MarkMonitor Inc.
+ Registrar IANA ID: 292
+ Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
+ Registrar Abuse Contact Phone: +1.2083895740
+ Domain Status: clientDeleteProhibited https:icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransfProhibited https:icann.org/epp#clientTransfProhibited
+ Domain Status: clientUpdateProhibited https:icann.org/epp#clientUpdateProhibited
+ Domain Status: svDeleteProhibited https:icann.org/epp#svDeleteProhibited
+ Domain Status: svTransfProhibited https:icann.org/epp#svTransfProhibited
+ Domain Status: svUpdateProhibited https:icann.org/epp#svUpdateProhibited
+ Name Sv: DNS.BAIDU.COM
+ Name Sv: NS2.BAIDU.COM
+ Name Sv: NS3.BAIDU.COM
+ Name Sv: NS4.BAIDU.COM
+ Name Sv: NS7.BAIDU.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https:www.icann.org
+>>> Last update of whois database: 2018-05-19T05:08:22Z <<<
+
+*****************************************************************************
+
+Domain Name: baidu.com
+Registry Domain ID: 11181110_DOMAIN_COM-VRSN
+Registrar WHOIS Sv: whois.markmonitor.com
+Registrar URL: http:www.markmonitor.com
+Updated Date: 2017-07-27T19:36:28-0700
+Creation Date: 1999-10-11T04:05:17-0700
+Registrar Registration Expiration Date: 2026-10-11T00:00:00-0700
+Registrar: MarkMonitor, Inc.
+Registrar IANA ID: 292
+Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
+Registrar Abuse Contact Phone: +1.2083895740
+Domain Status: clientUpdateProhibited (https:www.icann.org/epp#clientUpdateProhibited)
+Domain Status: clientTransfProhibited (https:www.icann.org/epp#clientTransfProhibited)
+Domain Status: clientDeleteProhibited (https:www.icann.org/epp#clientDeleteProhibited)
+Domain Status: svUpdateProhibited (https:www.icann.org/epp#svUpdateProhibited)
+Domain Status: svTransfProhibited (https:www.icann.org/epp#svTransfProhibited)
+Domain Status: svDeleteProhibited (https:www.icann.org/epp#svDeleteProhibited)
+Registry Registrant ID:
+Registrant Name: Domain Admin
+Registrant Organization: Beijing Baidu Netcom Science Technology Co., Ltd.
+Registrant Street: 3F Baidu Campus No.10, Shangdi 10th Street Haidian District
+Registrant City: Beijing
+Registrant State/Province: Beijing
+Registrant Postal Code: 100085
+Registrant Country: CN
+Registrant Phone: +86.1059928888
+Registrant Phone Ext:
+Registrant Fax: +86.1059928888
+Registrant Fax Ext:
+Registrant Email: domainmast@baidu.com
+Registry Admin ID:
+Admin Name: Domain Admin
+Admin Organization: Beijing Baidu Netcom Science Technology Co., Ltd.
+Admin Street: 3F Baidu Campus No.10, Shangdi 10th Street Haidian District
+Admin City: Beijing
+Admin State/Province: Beijing
+Admin Postal Code: 100085
+Admin Country: CN
+Admin Phone: +86.1059928888
+Admin Phone Ext:
+Admin Fax: +86.1059928888
+Admin Fax Ext:
+Admin Email: domainmast@baidu.com
+Registry Tech ID:
+Tech Name: Domain Admin
+Tech Organization: Beijing Baidu Netcom Science Technology Co., Ltd.
+Tech Street: 3F Baidu Campus No.10, Shangdi 10th Street Haidian District
+Tech City: Beijing
+Tech State/Province: Beijing
+Tech Postal Code: 100085
+Tech Country: CN
+Tech Phone: +86.1059928888
+Tech Phone Ext:
+Tech Fax: +86.1059928888
+Tech Fax Ext:
+Tech Email: domainmast@baidu.com
+Name Sv: ns2.baidu.com
+Name Sv: ns3.baidu.com
+Name Sv: ns7.baidu.com
+Name Sv: dns.baidu.com
+Name Sv: ns4.baidu.com
+DNSSEC: unsigned
+URL of the ICANN WHOIS Data Problem Reporting System: http:wdprs.intnic.net/
+>>> Last update of WHOIS database: 2018-05-18T21:58:51-0700 <<<
+
+The Data in MarkMonitor.com's WHOIS database is provided by MarkMonitor.com for
+information purposes, and to assist psons in obtaining information about or
+related to a domain name registration record. MarkMonitor.com does not guarantee
+its accuracy. By submitting a WHOIS quy, you agree that you will use this Data
+only for lawful purposes and that, und no circumstances will you use this Data to:
+ (1) allow, enable, or othwise support the transmission of mass unsolicited,
+ commcial advtising or solicitations via e-mail (spam) or
+ (2) enable high volume, automated, electronic processes that apply to
+ MarkMonitor.com (or its systems).
+MarkMonitor.com resves the right to modify these tms at any time.
+By submitting this quy, you agree to abide by this policy.
+
+MarkMonitor is the Global Lead in Online Brand Protection.
+
+MarkMonitor Domain Management(TM)
+MarkMonitor Brand Protection(TM)
+MarkMonitor AntiPiracy(TM)
+MarkMonitor AntiFraud(TM)
+Professional and Managed Svices
+
+Visit MarkMonitor at http:www.markmonitor.com
+Contact us at +1.8007459229
+In Europe, at +44.02032062220
+
+For more information on Whois status codes, please visit
+ https:www.icann.orgpages/epp-status-cod2014-06-16-en
+--
+
+
+WHOIS Lookup For Similar Domain Names:baidu.net baidu.org baidu.cn baidu.com.cn baidu.cc baidu.co baidu.tv baidu.in baidu.de baidu.co.uk
+
+WHOIS Lookup for Your IP Address Supported gTLDs and ccTLDs
+
+© 2009-2017 WhoisSoft.com
+
+
+
+
+
+
+
+ ''
+ '' ( er-, )
+
+
+ ( '' ) ''
+
+ ( '' ) ( ) )()
+
+
+
+
+
+
From 4e4c526f1fdb11de781c9fbf4d7635fb1ea16432 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B9=9D=E4=B8=96?= <422926799@qq.com>
Date: Sat, 26 May 2018 17:57:09 +0800
Subject: [PATCH 02/23] Update README.txt
---
README.txt | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/README.txt b/README.txt
index 85a06a0..1628c62 100644
--- a/README.txt
+++ b/README.txt
@@ -33,3 +33,17 @@ Options:
-z SUBDOMAIN Subdomain mining
-p SIDE Side of the station inquiries
-x HTTP http status query
+
+I didn't have time to go to school before I uploaded the scripts I finished.
+
+My blog: http://www.cnblogs.com/haq5201314/
+
+These scripts and methods of use are all in my blog. Please dig or use this script.
+
+The updated scripts are as follows:
+cms.py #For mining target CMS targets His accessories are data.json
+csrfjiance.py #Used to detect CSRF vulnerabilities
+sqlzhuruapi.py #This is a script for mass mining site SQL injection
+urltiaozhuan.py #This is a script for mining URL jump holes
+Distinguish.py #This is the two generation of an information collection script
+dianjijieci.py #This is a script that excavated clicking hijacking
From a103997219028187bf14d27985947a2a48184643 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B9=9D=E4=B8=96?= <422926799@qq.com>
Date: Sun, 27 May 2018 10:43:17 +0800
Subject: [PATCH 03/23] Update README.txt
---
README.txt | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/README.txt b/README.txt
index 1628c62..3661a88 100644
--- a/README.txt
+++ b/README.txt
@@ -38,6 +38,12 @@ I didn't have time to go to school before I uploaded the scripts I finished.
My blog: http://www.cnblogs.com/haq5201314/
+
+
+
+Distinguish.py用于批量安装工具包,方便大家安装工具
+
+
These scripts and methods of use are all in my blog. Please dig or use this script.
The updated scripts are as follows:
From ac09146a46cf58aebeb68206034bfb58951a9939 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B9=9D=E4=B8=96?= <422926799@qq.com>
Date: Sat, 9 Jun 2018 07:23:04 -0700
Subject: [PATCH 04/23] Add files via upload
---
fg.txt | 10 ++
list.txt | 43 ++++++++
shibie.py | 221 ++++++++++++++++++++++++++++++++++++++++
windows 10.txt | 2 +
windows XP.txt | 17 ++++
windows server 2003.txt | 28 +++++
windows server 2008.txt | 33 ++++++
windows server 2012.txt | 15 +++
windows7.txt | 27 +++++
9 files changed, 396 insertions(+)
create mode 100644 fg.txt
create mode 100644 list.txt
create mode 100644 shibie.py
create mode 100644 windows 10.txt
create mode 100644 windows XP.txt
create mode 100644 windows server 2003.txt
create mode 100644 windows server 2008.txt
create mode 100644 windows server 2012.txt
create mode 100644 windows7.txt
diff --git a/fg.txt b/fg.txt
new file mode 100644
index 0000000..37b6eaa
--- /dev/null
+++ b/fg.txt
@@ -0,0 +1,10 @@
+KB2506143
+KB2533552
+KB2534366
+KB2562937
+KB2685811
+KB2999226
+KB3163589
+KB958488
+KB976902
+KB976932
diff --git a/list.txt b/list.txt
new file mode 100644
index 0000000..7a763a0
--- /dev/null
+++ b/list.txt
@@ -0,0 +1,43 @@
+- [CVE-2017-0213](./CVE-2017-0213) [Windows COM Elevation of Privilege Vulnerability] (windows 10/8.1/7/2016/2010/2008)
+- [MS17-010](./MS17-010) [KB4013389] [Windows Kernel Mode Drivers] (windows 7/2008/2003/XP)
+- [MS16-135](./MS16-135) [KB3199135] [Windows Kernel Mode Drivers] (2016)
+- [MS16-098](./MS16-098) [KB3178466] [Kernel Driver] (Win 8.1)
+- [MS16-075](./MS16-075) [KB3164038] [Hot Potato] (2003/2008/7/8/2012)
+- [MS16-032](./MS16-032) [KB3143141] [Secondary Logon Handle] (2008/7/8/10/2012)
+- [MS16-016](./MS16-016) [KB3136041] [WebDAV] (2008/Vista/7)
+- [MS15-097](./MS15-097) [KB3089656] [remote code execution] (win8.1/2012)
+- [MS15-076](./MS15-076) [KB3067505] [RPC] (2003/2008/7/8/2012)
+- [MS15-077](./MS15-077) [KB3077657] [ATM] (XP/Vista/Win7/Win8/2000/2003/2008/2012)
+- [MS15-061](./MS15-061) [KB3057839] [Kernel Driver] (2003/2008/7/8/2012)
+- [MS15-051](./MS15-051) [KB3057191] [Windows Kernel Mode Drivers] (2003/2008/7/8/2012)
+- [MS15-010](./MS15-010) [KB3036220] [Kernel Driver] (2003/2008/7/8)
+- [MS15-015](./MS15-015) [KB3031432] [Kernel Driver] (Win7/8/8.1/2012/RT/2012 R2/2008 R2)
+- [MS15-001](./MS15-001) [KB3023266] [Kernel Driver] (2008/2012/7/8)
+- [MS14-070](./MS14-070) [KB2989935] [Kernel Driver] (2003)
+- [MS14-068](./MS14-068) [KB3011780] [Domain Privilege Escalation] (2003/2008/2012/7/8)
+- [MS14-058](./MS14-058) [KB3000061] [Win32k.sys] (2003/2008/2012/7/8)
+- [MS14-040](./MS14-040) [KB2975684] [AFD Driver] (2003/2008/2012/7/8)
+- [MS14-002](./MS14-002) [KB2914368] [NDProxy] (2003/XP)
+- [MS13-053](./MS13-053) [KB2850851] [win32k.sys] (XP/Vista/2003/2008/win 7)
+- [MS13-046](./MS13-046) [KB2840221] [dxgkrnl.sys] (Vista/2003/2008/2012/7)
+- [MS13-005](./MS13-005) [KB2778930] [Kernel Mode Driver] (2003/2008/2012/win7/8)
+- [MS12-042](./MS12-042) [KB2972621] [Service Bus] (2008/2012/win7)
+- [MS12-020](./MS12-020) [KB2671387] [RDP] (2003/2008/7/XP)
+- [MS11-080](./MS11-080) [KB2592799] [AFD.sys] (2003/XP)
+- [MS11-062](./MS11-062) [KB2566454] [NDISTAPI] (2003/XP)
+- [MS11-046](./MS11-046) [KB2503665] [AFD.sys] (2003/2008/7/XP)
+- [MS11-011](./MS11-011) [KB2393802] [kernel Driver] (2003/2008/7/XP/Vista)
+- [MS10-092](./MS10-092) [KB2305420] [Task Scheduler] (2008/7)
+- [MS10-065](./MS10-065) [KB2267960] [FastCGI] (IIS 5.1, 6.0, 7.0, and 7.5)
+- [MS10-059](./MS10-059) [KB982799] [ACL-Churraskito] (2008/7/Vista)
+- [MS10-048](./MS10-048) [KB2160329] [win32k.sys] (XP SP2 & SP3/2003 SP2/Vista SP1 & SP2/2008 Gold & SP2 & R2/Win7)
+- [MS10-015](./MS10-015) [KB977165] [KiTrap0D] (2003/2008/7/XP)
+- [MS09-050](./MS09-050) [KB975517] [Remote Code Execution] (2008/Vista)
+- [MS09-020](./MS09-020) [KB970483] [IIS 6.0] (IIS 5.1 and 6.0)
+- [MS09-012](./MS09-012) [KB959454] [Chimichurri] (Vista/win7/2008/Vista)
+- [MS08-068](./MS08-068) [KB957097] [Remote Code Execution] (2000/XP)
+- [MS08-067](./MS08-067) [KB958644] [Remote Code Execution] (Windows 2000/XP/Server 2003/Vista/Server 2008)
+- [MS08-025](./MS08-025) [KB941693] [Win32.sys] (XP/2003/2008/Vista)
+- [MS06-040](./MS06-040) [KB921883] [Remote Code Execution] (2003/xp/2000)
+- [MS05-039](./MS05-039) [KB899588] [PnP Service] (Win 9X/ME/NT/2000/XP/2003)
+- [MS03-026](./MS03-026) [KB823980] [Buffer Overrun In RPC Interface] (/NT/2000/XP/2003)
\ No newline at end of file
diff --git a/shibie.py b/shibie.py
new file mode 100644
index 0000000..d78141d
--- /dev/null
+++ b/shibie.py
@@ -0,0 +1,221 @@
+import os
+import optparse
+import re
+def main():
+ parser=optparse.OptionParser()
+ parser.add_option('-j',dest='jiance',help='-j[file] Check all')
+ parser.add_option('-7',dest='windows7',help='-7[file] inspect windows7')
+ parser.add_option('-8',dest='windowsserver2008',help='-8 [file] inspect windows server 2008')
+ parser.add_option('-2',dest='windowserver2012',help='-2 [file] inspect windows server 2012')
+ parser.add_option('-3',dest='windowsserver2003',help='-3 [file] inspect windows server 2003')
+ parser.add_option('-x',dest='windowsXP',help='-x [file] inspect windows XP')
+ parser.add_option('-0',dest='windows10',help='0 [file] inspect windows 10')
+ (options,args)=parser.parse_args()
+ if options.jiance:
+ file=options.jiance
+ jiance(file)
+ elif options.windows7:
+ file2=options.windows7
+ windows7(file2)
+ elif options.windowsserver2008:
+ file3=options.windowsserver2008
+ windowsserver2008(file3)
+ elif options.windowserver2012:
+ file4=options.windowserver2012
+ windowsserver2012(file4)
+ elif options.windowsserver2003:
+ file5=options.windowsserver2003
+ windowsserver2003(file5)
+ elif options.windowsXP:
+ file6=options.windowsXP
+ windowsxp(file6)
+ elif options.windows10:
+ file7=options.windows10
+ windows10(file7)
+ else:
+ parser.print_help()
+ exit()
+
+def jiance(file):
+ pd=os.path.exists(file)
+ if pd == True:
+ print('[*]{}existence'.format(file))
+ else:
+ print('[-]Sorry{}not existence'.format(file))
+ exit()
+
+ pd2=os.path.exists('list.txt')
+ if pd2==True:
+ print('[*]list.txt existence')
+ else:
+ print('[-]not existence list.txt')
+ exit()
+
+ lists=open('list.txt','r').read()
+ fg=open('{}'.format(file),'r').read()
+ pow="{}".format(fg)
+ lgw=re.findall('KB\d+',lists)
+ print('[*]There are no patched patches')
+ for v in lgw:
+ if v in str(pow):
+ pass
+ else:
+ print("[*]",v)
+
+def windows7(file2):
+ pd = os.path.exists(file2)
+ if pd == True:
+ print('[*]{}existence'.format(file2))
+ else:
+ print('[-]Sorry{}not existence'.format(file2))
+ exit()
+
+ pd2 = os.path.exists('windows7.txt')
+ if pd2 == True:
+ print('[*]windows 7.txt existence')
+ else:
+ print('[-]not existence windows 7.txt')
+ exit()
+
+ lists = open('windows7.txt', 'r').read()
+ fg = open('{}'.format(file2), 'r').read()
+ pow = "{}".format(fg)
+ lgw = re.findall('KB\d+', lists)
+ print('[*]There are no patched patches')
+ for v in lgw:
+ if v in str(pow):
+ pass
+ else:
+ print("[*]", v)
+
+def windowsserver2008(file3):
+ pd = os.path.exists(file3)
+ if pd == True:
+ print('[*]{}existence'.format(file3))
+ else:
+ print('[-]Sorry{}not existence'.format(file3))
+ exit()
+
+ pd2 = os.path.exists('windows server 2008.txt')
+ if pd2 == True:
+ print('[*]windows server 2008.txt existence')
+ else:
+ print('[-]not existence windows server 2008.txt')
+ exit()
+
+ lists = open('windows server 2008.txt', 'r').read()
+ fg = open('{}'.format(file3), 'r').read()
+ pow = "{}".format(fg)
+ lgw = re.findall('KB\d+', lists)
+ print('[*]There are no patched patches')
+ for v in lgw:
+ if v in str(pow):
+ pass
+ else:
+ print("[*]", v)
+
+def windowsserver2012(file4):
+ pd = os.path.exists(file4)
+ if pd == True:
+ print('[*]{}existence'.format(file4))
+ else:
+ print('[-]Sorry{}not existence'.format(file4))
+ exit()
+
+ pd2 = os.path.exists('windows server 2012.txt')
+ if pd2 == True:
+ print('[*]windows server 2012.txt existence')
+ else:
+ print('[-]not existence windows server 2012.txt')
+ exit()
+
+ lists = open('windows server 2012.txt', 'r').read()
+ fg = open('{}'.format(file4), 'r').read()
+ pow = "{}".format(fg)
+ lgw = re.findall('KB\d+', lists)
+ print('[*]There are no patched patches')
+ for v in lgw:
+ if v in str(pow):
+ pass
+ else:
+ print("[*]", v)
+
+def windowsserver2003(file5):
+ pd = os.path.exists(file5)
+ if pd == True:
+ print('[*]{}existence'.format(file5))
+ else:
+ print('[-]Sorry{}not existence'.format(file5))
+ exit()
+
+ pd2 = os.path.exists('windows server 2003.txt')
+ if pd2 == True:
+ print('[*]windows server 2003.txt existence')
+ else:
+ print('[-]not existence windows server 2003.txt')
+ exit()
+
+ lists = open('windows server 2003.txt', 'r').read()
+ fg = open('{}'.format(file5), 'r').read()
+ pow = "{}".format(fg)
+ lgw = re.findall('KB\d+', lists)
+ print('[*]There are no patched patches')
+ for v in lgw:
+ if v in str(pow):
+ pass
+ else:
+ print("[*]", v)
+
+def windowsxp(file6):
+ pd = os.path.exists(file6)
+ if pd == True:
+ print('[*]{}existence'.format(file6))
+ else:
+ print('[-]Sorry{}not existence'.format(file6))
+ exit()
+
+ pd2 = os.path.exists('windows XP.txt')
+ if pd2 == True:
+ print('[*]windows XP.txt existence')
+ else:
+ print('[-]not existence windows XP.txt')
+ exit()
+
+ lists = open('windows XP.txt', 'r').read()
+ fg = open('{}'.format(file6), 'r').read()
+ pow = "{}".format(fg)
+ lgw = re.findall('KB\d+', lists)
+ print('[*]There are no patched patches')
+ for v in lgw:
+ if v in str(pow):
+ pass
+ else:
+ print("[*]", v)
+
+def windows10(file7):
+ pd = os.path.exists(file7)
+ if pd == True:
+ print('[*]{}existence'.format(file7))
+ else:
+ print('[-]Sorry{}not existence'.format(file7))
+ exit()
+
+ pd2 = os.path.exists('windows 10.txt')
+ if pd2 == True:
+ print('[*]windows 10.txt existence')
+ else:
+ print('[-]not existence windows 10.txt')
+ exit()
+
+ lists = open('windows 10.txt', 'r').read()
+ fg = open('{}'.format(file7), 'r').read()
+ pow = "{}".format(fg)
+ lgw = re.findall('KB\d+', lists)
+ print('[*]There are no patched patches')
+ for v in lgw:
+ if v in str(pow):
+ pass
+ else:
+ print("[*]", v)
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/windows 10.txt b/windows 10.txt
new file mode 100644
index 0000000..07dcf69
--- /dev/null
+++ b/windows 10.txt
@@ -0,0 +1,2 @@
+- [MS16-032](./MS16-032) [KB3143141] [Secondary Logon Handle] (2008/7/8/10/2012)
+- [CVE-2017-0213](./CVE-2017-0213) [Windows COM Elevation of Privilege Vulnerability] (windows 10/8.1/7/2016/2010/2008)
\ No newline at end of file
diff --git a/windows XP.txt b/windows XP.txt
new file mode 100644
index 0000000..a752dec
--- /dev/null
+++ b/windows XP.txt
@@ -0,0 +1,17 @@
+- [MS17-010](./MS17-010) [KB4013389] [Windows Kernel Mode Drivers] (windows 7/2008/2003/XP)
+- [MS15-077](./MS15-077) [KB3077657] [ATM] (XP/Vista/Win7/Win8/2000/2003/2008/2012)
+- [MS14-002](./MS14-002) [KB2914368] [NDProxy] (2003/XP)
+- [MS13-053](./MS13-053) [KB2850851] [win32k.sys] (XP/Vista/2003/2008/win 7)
+- [MS12-020](./MS12-020) [KB2671387] [RDP] (2003/2008/7/XP)
+- [MS11-080](./MS11-080) [KB2592799] [AFD.sys] (2003/XP)
+- [MS11-062](./MS11-062) [KB2566454] [NDISTAPI] (2003/XP)
+- [MS11-046](./MS11-046) [KB2503665] [AFD.sys] (2003/2008/7/XP)
+- [MS11-011](./MS11-011) [KB2393802] [kernel Driver] (2003/2008/7/XP/Vista)
+- [MS10-048](./MS10-048) [KB2160329] [win32k.sys] (XP SP2 & SP3/2003 SP2/Vista SP1 & SP2/2008 Gold & SP2 & R2/Win7)
+- [MS10-015](./MS10-015) [KB977165] [KiTrap0D] (2003/2008/7/XP)
+- [MS08-068](./MS08-068) [KB957097] [Remote Code Execution] (2000/XP)
+- [MS08-067](./MS08-067) [KB958644] [Remote Code Execution] (Windows 2000/XP/Server 2003/Vista/Server 2008)
+- [MS08-025](./MS08-025) [KB941693] [Win32.sys] (XP/2003/2008/Vista)
+- [MS06-040](./MS06-040) [KB921883] [Remote Code Execution] (2003/xp/2000)
+- [MS05-039](./MS05-039) [KB899588] [PnP Service] (Win 9X/ME/NT/2000/XP/2003)
+- [MS03-026](./MS03-026) [KB823980] [Buffer Overrun In RPC Interface] (/NT/2000/XP/2003)
\ No newline at end of file
diff --git a/windows server 2003.txt b/windows server 2003.txt
new file mode 100644
index 0000000..373b64d
--- /dev/null
+++ b/windows server 2003.txt
@@ -0,0 +1,28 @@
+- [MS17-010](./MS17-010) [KB4013389] [Windows Kernel Mode Drivers] (windows 7/2008/2003/XP)
+- [MS16-075](./MS16-075) [KB3164038] [Hot Potato] (2003/2008/7/8/2012)
+- [MS15-076](./MS15-076) [KB3067505] [RPC] (2003/2008/7/8/2012)
+- [MS15-077](./MS15-077) [KB3077657] [ATM] (XP/Vista/Win7/Win8/2000/2003/2008/2012)
+- [MS15-061](./MS15-061) [KB3057839] [Kernel Driver] (2003/2008/7/8/2012)
+- [MS15-051](./MS15-051) [KB3057191] [Windows Kernel Mode Drivers] (2003/2008/7/8/2012)
+- [MS15-010](./MS15-010) [KB3036220] [Kernel Driver] (2003/2008/7/8)
+- [MS14-070](./MS14-070) [KB2989935] [Kernel Driver] (2003)
+- [MS14-068](./MS14-068) [KB3011780] [Domain Privilege Escalation] (2003/2008/2012/7/8)
+- [MS14-058](./MS14-058) [KB3000061] [Win32k.sys] (2003/2008/2012/7/8)
+- [MS14-040](./MS14-040) [KB2975684] [AFD Driver] (2003/2008/2012/7/8)
+- [MS14-002](./MS14-002) [KB2914368] [NDProxy] (2003/XP)
+- [MS13-053](./MS13-053) [KB2850851] [win32k.sys] (XP/Vista/2003/2008/win 7)
+- [MS13-046](./MS13-046) [KB2840221] [dxgkrnl.sys] (Vista/2003/2008/2012/7)
+- [MS13-005](./MS13-005) [KB2778930] [Kernel Mode Driver] (2003/2008/2012/win7/8)
+- [MS12-020](./MS12-020) [KB2671387] [RDP] (2003/2008/7/XP)
+- [MS11-080](./MS11-080) [KB2592799] [AFD.sys] (2003/XP)
+- [MS11-062](./MS11-062) [KB2566454] [NDISTAPI] (2003/XP)
+- [MS11-046](./MS11-046) [KB2503665] [AFD.sys] (2003/2008/7/XP)
+- [MS11-011](./MS11-011) [KB2393802] [kernel Driver] (2003/2008/7/XP/Vista)
+- [MS10-048](./MS10-048) [KB2160329] [win32k.sys] (XP SP2 & SP3/2003 SP2/Vista SP1 & SP2/2008 Gold & SP2 & R2/Win7)
+- [MS10-015](./MS10-015) [KB977165] [KiTrap0D] (2003/2008/7/XP)
+- [MS08-067](./MS08-067) [KB958644] [Remote Code Execution] (Windows 2000/XP/Server 2003/Vista/Server 2008)
+- [MS08-025](./MS08-025) [KB941693] [Win32.sys] (XP/2003/2008/Vista)
+- [MS06-040](./MS06-040) [KB921883] [Remote Code Execution] (2003/xp/2000)
+- [MS05-039](./MS05-039) [KB899588] [PnP Service] (Win 9X/ME/NT/2000/XP/2003)
+- [MS03-026](./MS03-026) [KB823980] [Buffer Overrun In RPC Interface] (/NT/2000/XP/2003)
+- [CVE-2017-0213](./CVE-2017-0213) [Windows COM Elevation of Privilege Vulnerability] (windows 10/8.1/7/2016/2010/2008)
\ No newline at end of file
diff --git a/windows server 2008.txt b/windows server 2008.txt
new file mode 100644
index 0000000..df3416a
--- /dev/null
+++ b/windows server 2008.txt
@@ -0,0 +1,33 @@
+- [MS17-010](./MS17-010) [KB4013389] [Windows Kernel Mode Drivers] (windows 7/2008/2003/XP)
+- [MS16-098](./MS16-098) [KB3178466] [Kernel Driver] (Win 8.1)
+- [MS16-075](./MS16-075) [KB3164038] [Hot Potato] (2003/2008/7/8/2012)
+- [MS16-032](./MS16-032) [KB3143141] [Secondary Logon Handle] (2008/7/8/10/2012)
+- [MS16-016](./MS16-016) [KB3136041] [WebDAV] (2008/Vista/7)
+- [MS15-097](./MS15-097) [KB3089656] [remote code execution] (win8.1/2012)
+- [MS15-076](./MS15-076) [KB3067505] [RPC] (2003/2008/7/8/2012)
+- [MS15-077](./MS15-077) [KB3077657] [ATM] (XP/Vista/Win7/Win8/2000/2003/2008/2012)
+- [MS15-061](./MS15-061) [KB3057839] [Kernel Driver] (2003/2008/7/8/2012)
+- [MS15-051](./MS15-051) [KB3057191] [Windows Kernel Mode Drivers] (2003/2008/7/8/2012)
+- [MS15-010](./MS15-010) [KB3036220] [Kernel Driver] (2003/2008/7/8)
+- [MS15-015](./MS15-015) [KB3031432] [Kernel Driver] (Win7/8/8.1/2012/RT/2012 R2/2008 R2)
+- [MS15-001](./MS15-001) [KB3023266] [Kernel Driver] (2008/2012/7/8)
+- [MS14-068](./MS14-068) [KB3011780] [Domain Privilege Escalation] (2003/2008/2012/7/8)
+- [MS14-058](./MS14-058) [KB3000061] [Win32k.sys] (2003/2008/2012/7/8)
+- [MS14-040](./MS14-040) [KB2975684] [AFD Driver] (2003/2008/2012/7/8)
+- [MS13-053](./MS13-053) [KB2850851] [win32k.sys] (XP/Vista/2003/2008/win 7)
+- [MS13-046](./MS13-046) [KB2840221] [dxgkrnl.sys] (Vista/2003/2008/2012/7)
+- [MS13-005](./MS13-005) [KB2778930] [Kernel Mode Driver] (2003/2008/2012/win7/8)
+- [MS12-042](./MS12-042) [KB2972621] [Service Bus] (2008/2012/win7)
+- [MS12-020](./MS12-020) [KB2671387] [RDP] (2003/2008/7/XP)
+- [MS11-046](./MS11-046) [KB2503665] [AFD.sys] (2003/2008/7/XP)
+- [MS11-011](./MS11-011) [KB2393802] [kernel Driver] (2003/2008/7/XP/Vista)
+- [MS10-092](./MS10-092) [KB2305420] [Task Scheduler] (2008/7)
+- [MS10-065](./MS10-065) [KB2267960] [FastCGI] (IIS 5.1, 6.0, 7.0, and 7.5)
+- [MS10-059](./MS10-059) [KB982799] [ACL-Churraskito] (2008/7/Vista)
+- [MS10-048](./MS10-048) [KB2160329] [win32k.sys] (XP SP2 & SP3/2003 SP2/Vista SP1 & SP2/2008 Gold & SP2 & R2/Win7)
+- [MS10-015](./MS10-015) [KB977165] [KiTrap0D] (2003/2008/7/XP)
+- [MS09-050](./MS09-050) [KB975517] [Remote Code Execution] (2008/Vista)
+- [MS09-012](./MS09-012) [KB959454] [Chimichurri] (Vista/win7/2008/Vista)
+- [MS08-067](./MS08-067) [KB958644] [Remote Code Execution] (Windows 2000/XP/Server 2003/Vista/Server 2008)
+- [MS08-025](./MS08-025) [KB941693] [Win32.sys] (XP/2003/2008/Vista)
+- [CVE-2017-0213](./CVE-2017-0213) [Windows COM Elevation of Privilege Vulnerability] (windows 10/8.1/7/2016/2010/2008)
\ No newline at end of file
diff --git a/windows server 2012.txt b/windows server 2012.txt
new file mode 100644
index 0000000..51c538c
--- /dev/null
+++ b/windows server 2012.txt
@@ -0,0 +1,15 @@
+- [MS16-075](./MS16-075) [KB3164038] [Hot Potato] (2003/2008/7/8/2012)
+- [MS16-032](./MS16-032) [KB3143141] [Secondary Logon Handle] (2008/7/8/10/2012)
+- [MS15-097](./MS15-097) [KB3089656] [remote code execution] (win8.1/2012)
+- [MS15-076](./MS15-076) [KB3067505] [RPC] (2003/2008/7/8/2012)
+- [MS15-077](./MS15-077) [KB3077657] [ATM] (XP/Vista/Win7/Win8/2000/2003/2008/2012)
+- [MS15-061](./MS15-061) [KB3057839] [Kernel Driver] (2003/2008/7/8/2012)
+- [MS15-051](./MS15-051) [KB3057191] [Windows Kernel Mode Drivers] (2003/2008/7/8/2012)
+- [MS15-015](./MS15-015) [KB3031432] [Kernel Driver] (Win7/8/8.1/2012/RT/2012 R2/2008 R2)
+- [MS15-001](./MS15-001) [KB3023266] [Kernel Driver] (2008/2012/7/8)
+- [MS14-068](./MS14-068) [KB3011780] [Domain Privilege Escalation] (2003/2008/2012/7/8)
+- [MS14-058](./MS14-058) [KB3000061] [Win32k.sys] (2003/2008/2012/7/8)
+- [MS14-040](./MS14-040) [KB2975684] [AFD Driver] (2003/2008/2012/7/8)
+- [MS13-046](./MS13-046) [KB2840221] [dxgkrnl.sys] (Vista/2003/2008/2012/7)
+- [MS13-005](./MS13-005) [KB2778930] [Kernel Mode Driver] (2003/2008/2012/win7/8)
+- [MS12-042](./MS12-042) [KB2972621] [Service Bus] (2008/2012/win7)
diff --git a/windows7.txt b/windows7.txt
new file mode 100644
index 0000000..9e99c63
--- /dev/null
+++ b/windows7.txt
@@ -0,0 +1,27 @@
+- [MS17-010](./MS17-010) [KB4013389] [Windows Kernel Mode Drivers] (windows 7/2008/2003/XP)
+- [MS16-075](./MS16-075) [KB3164038] [Hot Potato] (2003/2008/7/8/2012)
+- [MS16-032](./MS16-032) [KB3143141] [Secondary Logon Handle] (2008/7/8/10/2012)
+- [MS16-016](./MS16-016) [KB3136041] [WebDAV] (2008/Vista/7)
+- [MS15-076](./MS15-076) [KB3067505] [RPC] (2003/2008/7/8/2012)
+- [MS15-077](./MS15-077) [KB3077657] [ATM] (XP/Vista/Win7/Win8/2000/2003/2008/2012)
+- [MS15-061](./MS15-061) [KB3057839] [Kernel Driver] (2003/2008/7/8/2012)
+- [MS15-051](./MS15-051) [KB3057191] [Windows Kernel Mode Drivers] (2003/2008/7/8/2012)
+- [MS15-010](./MS15-010) [KB3036220] [Kernel Driver] (2003/2008/7/8)
+- [MS15-015](./MS15-015) [KB3031432] [Kernel Driver] (Win7/8/8.1/2012/RT/2012 R2/2008 R2)
+- [MS15-001](./MS15-001) [KB3023266] [Kernel Driver] (2008/2012/7/8)
+- [MS14-068](./MS14-068) [KB3011780] [Domain Privilege Escalation] (2003/2008/2012/7/8)
+- [MS14-058](./MS14-058) [KB3000061] [Win32k.sys] (2003/2008/2012/7/8)
+- [MS14-040](./MS14-040) [KB2975684] [AFD Driver] (2003/2008/2012/7/8)
+- [MS13-053](./MS13-053) [KB2850851] [win32k.sys] (XP/Vista/2003/2008/win 7)
+- [MS13-046](./MS13-046) [KB2840221] [dxgkrnl.sys] (Vista/2003/2008/2012/7)
+- [MS13-005](./MS13-005) [KB2778930] [Kernel Mode Driver] (2003/2008/2012/win7/8)
+- [MS12-042](./MS12-042) [KB2972621] [Service Bus] (2008/2012/win7)
+- [MS12-020](./MS12-020) [KB2671387] [RDP] (2003/2008/7/XP)
+- [MS11-046](./MS11-046) [KB2503665] [AFD.sys] (2003/2008/7/XP)
+- [MS11-011](./MS11-011) [KB2393802] [kernel Driver] (2003/2008/7/XP/Vista)
+- [MS10-092](./MS10-092) [KB2305420] [Task Scheduler] (2008/7)
+- [MS10-065](./MS10-065) [KB2267960] [FastCGI] (IIS 5.1, 6.0, 7.0, and 7.5)
+- [MS10-059](./MS10-059) [KB982799] [ACL-Churraskito] (2008/7/Vista)
+- [MS10-015](./MS10-015) [KB977165] [KiTrap0D] (2003/2008/7/XP)
+- [MS09-012](./MS09-012) [KB959454] [Chimichurri] (Vista/win7/2008/Vista)
+- [CVE-2017-0213](./CVE-2017-0213) [Windows COM Elevation of Privilege Vulnerability] (windows 10/8.1/7/2016/2010/2008)
\ No newline at end of file
From c119ace82dde530b288b648afc006d7aa0e702ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B9=9D=E4=B8=96?= <422926799@qq.com>
Date: Sun, 1 Jul 2018 13:01:38 +0800
Subject: [PATCH 05/23] Create exploitsearch
---
exploitsearch | 1 +
1 file changed, 1 insertion(+)
create mode 100644 exploitsearch
diff --git a/exploitsearch b/exploitsearch
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/exploitsearch
@@ -0,0 +1 @@
+
From cfc561b587a5f7f8f787641d9112c3e05533493f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B9=9D=E4=B8=96?= <422926799@qq.com>
Date: Sun, 1 Jul 2018 13:02:20 +0800
Subject: [PATCH 06/23] Delete exploitsearch
---
exploitsearch | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 exploitsearch
diff --git a/exploitsearch b/exploitsearch
deleted file mode 100644
index 8b13789..0000000
--- a/exploitsearch
+++ /dev/null
@@ -1 +0,0 @@
-
From 22a8109e88cdb3eebd878dbd531ca44101ee1571 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B9=9D=E4=B8=96?= <422926799@qq.com>
Date: Sat, 30 Jun 2018 22:04:56 -0700
Subject: [PATCH 07/23] Add files via upload
---
exploitsearch.py | 203 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 203 insertions(+)
create mode 100644 exploitsearch.py
diff --git a/exploitsearch.py b/exploitsearch.py
new file mode 100644
index 0000000..156f0fa
--- /dev/null
+++ b/exploitsearch.py
@@ -0,0 +1,203 @@
+import requests
+from bs4 import *
+import threading
+import re
+import optparse
+
+urlsd=[]
+#neirons=[]
+
+def main():
+ parser=optparse.OptionParser()
+ parser.add_option('-m',action='store_true',dest='home',help='Save the home directory in the local area')
+ parser.add_option('-w',action='store_true',dest='web',help='Save all the attack loads of Web')
+ parser.add_option('-s',dest='search',help='search exploit')
+ parser.add_option('-y',action='store_true',dest='long',help='Save the Long-range all exploit')
+ parser.add_option('-b',action='store_true',dest='local',help='Save the local all exploit')
+ (options,args)=parser.parse_args()
+ if options.home:
+ poc()
+ elif options.web:
+ web()
+ elif options.search:
+ searchs=options.search
+ searchexploit(searchs)
+ elif options.long:
+ logins()
+ elif options.local:
+ local()
+ else:
+ parser.print_help()
+ exit()
+def poc():
+ global headers
+ print('[+]Emptying exploit1.txt')
+ kw=open('exploitcs1.txt','w')
+ kw.close()
+ print('[+]Complete the emptying')
+ print('[+] Generating a new list of exploit')
+ url='http://expku.com/'
+ headers={'user-agetn':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}
+ rest=requests.get(url=url,headers=headers)
+ qinx=rest.content.decode('gbk')
+ kop=BeautifulSoup(qinx,'html.parser')
+ for x in kop.find_all('a'):
+ a=re.findall('
.*?',str(x))
+ neiron="".join(a)
+ nei=BeautifulSoup(neiron,'html.parser')
+
+ uw=nei.find_all('a')
+ for u in uw:
+ u1=u.get('href')
+ urlsd.append('http://expku.com/'.strip()+u1)
+
+ urlsd.remove(urlsd[0])
+ lk=list(set(urlsd))
+ for m in lk:
+ rest2=requests.get(url=m,headers=headers)
+ pl=BeautifulSoup(rest2.content.decode('gbk'),'html.parser')
+ for l in pl.find_all('h1'):
+ ks='title:',l.get_text(),'','url:',rest2.url
+ print(ks)
+ li='{}'.format(ks)
+ xr=li.replace('(','').replace(')','').replace(',','').replace("''",'')
+ pw=open('exploitcs1.txt','a')
+ pw.write(xr)
+ pw.write('\n')
+ pw.close()
+def web():
+ print('[+]empty exploit web.txt')
+ odw=open('exploitweb.txt','w')
+ odw.close()
+ print('[+]empty complete')
+ print('[+]Start writing to the collected web exploit')
+ urlsd=[]
+ headers = {
+ 'user-agetn': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}
+ for h in range(88):
+ url='http://expku.com/web/list_6_{}.html'.format(h)
+ reques=requests.get(url=url,headers=headers)
+ kw=BeautifulSoup(reques.content.decode('gbk'),'html.parser')
+ vb=kw.find_all('a')
+ for q in vb:
+ pq=q.get('href')
+ urls='http://expku.com'.strip()+pq
+ kq=re.findall('http://expku.com/web/.*.html',urls)
+ for k in kq:
+ urlsd.append(k)
+ kc=list(set(urlsd))
+ for b in kc:
+ tfs=requests.get(url=b,headers=headers)
+ bds=BeautifulSoup(tfs.content.decode('gbk'),'html.parser')
+ for t in bds.find_all('h1'):
+ print(t.get_text(), '', tfs.url)
+ print(t.get_text(),'',tfs.url,file=open('exploitweb.txt','a'))
+
+
+def searchexploit(searchs):
+ print('[+]search give the result as follows:')
+ jg=[]
+ rs=[]
+ urlsh=[]
+ headers = {'user-agetn': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}
+ urls='http://expku.com/search.php?keyword={}'.format(searchs)
+ resq=requests.get(url=urls,headers=headers)
+ weq=BeautifulSoup(resq.content.decode('gbk'),'html.parser')
+ oeq=weq.find_all('a')
+ for r in oeq:
+ ds=r.get('title')
+ durl=r.get('href')
+ burw=re.findall('/.*/.*.html',durl)
+ op="".join(burw)
+ rs.append(op)
+ kdw = '{}'.format(ds)
+ jg.append(kdw.replace('None', ''))
+ while '' in rs:
+ rs.remove('')
+ for g in rs:
+ uw='http://expku.com'.strip()+g
+ urlsh.append(uw)
+ urlsqf='http://expku.com'.strip()+durl
+
+ while '' in jg:
+ jg.remove('')
+
+ for g in range(0,len(urlsh)):
+ print(jg[g],urlsh[g])
+
+def logins():
+ print('[+]empty exploitlong.txt')
+ lwe=open('exploitlong.txt','w')
+ lwe.close()
+ print('[+]Get all remote exploit')
+ urls=[]
+ zj=[]
+ headers = {
+ 'user-agetn': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}
+ for i in range(75):
+ url='http://expku.com/remote/list_4_{}.html'.format(i)
+ regw=requests.get(url=url,headers=headers)
+ lvq=BeautifulSoup(regw.content.decode('gbk'),'html.parser')
+ fwq=lvq.find_all('a')
+ for d in fwq:
+ eq=d.get('href')
+ oeq=re.findall('/remote/.*.html',eq)
+ for b in oeq:
+ ks='http://expku.com'.strip()+b
+ urls.append(ks)
+ qwe=list(set(urls))
+ for asd in lvq.find_all('a'):
+ kl=re.findall('
.*',str(asd))
+ for n in kl:
+ vk=''.strip()+n
+ peq=BeautifulSoup(vk,'html.parser')
+ for t in qwe:
+ zj.append(peq.get_text()+' '+t)
+ jb=list(set(zj))
+ for j in jb:
+ print(j)
+ print(j,file=open('exploitlong.txt','a'))
+
+
+def local():
+ print('[+]empty exploitlocal.txt')
+ wd=open('exploitlocal.txt','w')
+ wd.close()
+ print('[+]get local exploit')
+ for j in range(56):
+ uk=[]
+ url='http://expku.com/local/list_5_{}.html'.format(j)
+ headers = {
+ 'user-agetn': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}
+ rwqe=requests.get(url=url,headers=headers)
+ vdq=BeautifulSoup(rwqe.content.decode('gbk'),'html.parser')
+ hk=vdq.find_all('a')
+ for f in hk:
+ ddo=f.get('href')
+ kio=re.findall('/local/.*.html',str(ddo))
+ for g in kio:
+ url='http://expku.com'.strip()+g
+ uk.append(url)
+ yf=list(set(uk))
+ for c in yf:
+ rtq=requests.get(url=c,headers=headers)
+ vdq=BeautifulSoup(rtq.content.decode('gbk'),'html.parser')
+ for a in vdq.find_all('h1'):
+ print(a.get_text(),'',rtq.url)
+ print(a.get_text(), '', rtq.url,file=open('exploitlocal.txt','a'))
+
+#while '' in neirons:
+ # neirons.remove('')
+
+#while ' ' in neirons:
+ # neirons.remove(' ')
+
+
+#urlsd.remove(urlsd[0])
+#rd=list(set(urlsd))
+
+#for q in range(0,len(rd)):
+ # print(neirons[q],rd[q])
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
From e023d9be9ef77276c4f0e0209f4744b1e39c77fb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B9=9D=E4=B8=96?= <422926799@qq.com>
Date: Sun, 1 Jul 2018 13:10:02 +0800
Subject: [PATCH 08/23] Update README.txt
---
README.txt | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/README.txt b/README.txt
index 3661a88..35de224 100644
--- a/README.txt
+++ b/README.txt
@@ -53,3 +53,18 @@ sqlzhuruapi.py #This is a script for mass mining site SQL injection
urltiaozhuan.py #This is a script for mining URL jump holes
Distinguish.py #This is the two generation of an information collection script
dianjijieci.py #This is a script that excavated clicking hijacking
+
+
+
+python3 exploitsearch.py
+Usage: exploitsearch.py [options]
+
+Options:
+ -h, --help show this help message and exit
+ -m Save the home directory in the local area
+ -w Save all the attack loads of Web
+ -s SEARCH search exploit
+ -y Save the Long-range all exploit
+ -b Save the local all exploit
+
+
From 8538a007ed46cd938d0f5a6570910c8164d343be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B9=9D=E4=B8=96?= <422926799@qq.com>
Date: Mon, 16 Jul 2018 23:21:50 +0800
Subject: [PATCH 09/23] Add files via upload
---
"\345\276\241\345\211\221/Error/error.txt" | 387 +
"\345\276\241\345\211\221/IP generation.py" | 15 +
"\345\276\241\345\211\221/ip.txt" | 255 +
"\345\276\241\345\211\221/mitsurugi.exe" | Bin 0 -> 7790132 bytes
"\345\276\241\345\211\221/mitsurugi.py" | 118 +
"\345\276\241\345\211\221/mitsurugi.spec" | 29 +
"\345\276\241\345\211\221/url.txt" | 1 +
"\345\276\241\345\211\221/user-agent.txt" | 22 +
.../2600\346\235\241ASP.txt" | 2653 +
.../2600\346\235\241ASPX.txt" | 2653 +
.../2600\346\235\241PHP.txt" | 2653 +
.../ASP.txt" | 35392 ++++++
.../ASPX.txt" | 2652 +
.../DIR.txt" | 4782 +
.../DIR\350\266\205\345\274\272.txt" | 92476 ++++++++++++++++
.../JSP.txt" | 631 +
.../MDB.txt" | 2062 +
.../PHP.txt" | 2652 +
.../Set.ini" | 1 +
.../WebShell.txt" | 77913 +++++++++++++
.../asp\345\255\227\345\205\270.txt" | 32334 ++++++
.../cgi.txt" | 15793 +++
.../cgi_bin.txt" | 199 +
.../ewebeditor.txt" | 77 +
.../login2.txt" | 73750 ++++++++++++
.../php\345\255\227\345\205\270.txt" | 32334 ++++++
.../save.txt" | 3 +
.../upfile.txt" | 94 +
...0\347\224\250\347\233\256\345\275\225.txt" | 25829 +++++
...\345\217\260+\347\233\256\345\275\225.txt" | 8927 ++
.../\345\220\216\345\217\260.txt" | 550 +
...0\350\247\204\350\267\257\345\276\204.txt" | 3 +
...0\347\272\257\347\233\256\345\275\225.txt" | 34926 ++++++
.../\346\225\260\346\215\256\345\272\223.txt" | 153 +
...6\215\256\345\272\2231000\346\235\241.txt" | 1077 +
.../\347\211\271\346\256\212.txt" | 173 +
.../\347\233\256\345\275\225.txt" | 556 +
...4\345\220\210\347\233\256\345\275\225.txt" | 78705 +++++++++++++
...6\345\217\260\345\234\260\345\235\200.txt" | 45383 ++++++++
...\347\253\231\347\233\256\345\275\2251.txt" | 921 +
...47\233\256\345\275\225600\346\235\241.txt" | 692 +
...6\345\275\225\345\255\227\345\205\270.txt" | 20580 ++++
.../\350\257\264\346\230\216.txt" | 8 +
43 files changed, 600414 insertions(+)
create mode 100644 "\345\276\241\345\211\221/Error/error.txt"
create mode 100644 "\345\276\241\345\211\221/IP generation.py"
create mode 100644 "\345\276\241\345\211\221/ip.txt"
create mode 100644 "\345\276\241\345\211\221/mitsurugi.exe"
create mode 100644 "\345\276\241\345\211\221/mitsurugi.py"
create mode 100644 "\345\276\241\345\211\221/mitsurugi.spec"
create mode 100644 "\345\276\241\345\211\221/url.txt"
create mode 100644 "\345\276\241\345\211\221/user-agent.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/2600\346\235\241ASP.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/2600\346\235\241ASPX.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/2600\346\235\241PHP.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/ASP.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/ASPX.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/DIR.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/DIR\350\266\205\345\274\272.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/JSP.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/MDB.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/PHP.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/Set.ini"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/WebShell.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/asp\345\255\227\345\205\270.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/cgi.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/cgi_bin.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/ewebeditor.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/login2.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/php\345\255\227\345\205\270.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/save.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/upfile.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\344\270\215\345\270\270\347\224\250\347\233\256\345\275\225.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\345\220\216\345\217\260+\347\233\256\345\275\225.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\345\220\216\345\217\260.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\345\270\270\350\247\204\350\267\257\345\276\204.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\346\217\220\347\272\257\347\233\256\345\275\225.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\346\225\260\346\215\256\345\272\223.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\346\226\207\344\273\266+\344\270\212\344\274\240+\346\225\260\346\215\256\345\272\2231000\346\235\241.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\347\211\271\346\256\212.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\347\233\256\345\275\225.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\347\273\274\345\220\210\347\233\256\345\275\225.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\347\275\221\347\253\231\347\233\256\345\275\225+\345\220\216\345\217\260\345\234\260\345\235\200.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\347\275\221\347\253\231\347\233\256\345\275\2251.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\347\275\221\347\253\231\347\233\256\345\275\225600\346\235\241.txt"
create mode 100644 "\345\276\241\345\211\221/\345\276\241\345\211\221\351\205\215\347\275\256\346\226\207\344\273\266/\350\266\205\345\205\250\347\233\256\345\275\225\345\255\227\345\205\270.txt"
create mode 100644 "\345\276\241\345\211\221/\350\257\264\346\230\216.txt"
diff --git "a/\345\276\241\345\211\221/Error/error.txt" "b/\345\276\241\345\211\221/Error/error.txt"
new file mode 100644
index 0000000..2a83372
--- /dev/null
+++ "b/\345\276\241\345\211\221/Error/error.txt"
@@ -0,0 +1,387 @@
+无权访问
+D盾
+云锁
+360
+防火墙
+Error
+页面找不到
+404
+Microsoft OLE DB Provider for SQL Server
+SqlException (0x80131904)
+.SQLServerException:
+System.Data.SqlClient.SqlException
+Incorrect syntax near '
+is not a valid MySQL result resource in
+Unable to perform
+Invalid SQL:
+You have an error in your SQL syntax
+MySQL Error:
+MySQL Server Error:
+Database error:
+System.Data.OracleClient.OracleException
+[MySQL][ODBC
+[ODBC SQL Server Driver]
+[SQL Server]
+ODBC:
+odbc:
+Stack trace
+Database Engine error
+OleDbException
+Sorry, could not execute query
+Error has occurred
+error occured
+Could not update
+Error with SQL Query
+Query error
+SQL Provider Error
+SQL Error
+In exception catcher
+SqlException caught
+There was an error with the data provider
+An ERROR occured while executing the query
+Error executing statement
+Error creating insert statement
+database problem
+Error adding
+Error updating
+Error deleting
+Failed to excute sql
+Failed to add
+Failed to update
+Failed to delete
+hashchk
+isamchk
+Can't read record in system table
+Sort aborted
+Out of sort memory; increase server sort buffer size
+Too many connections
+Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space
+Can't get hostname for your address
+Bad handshake
+No database selected
+Unknown command
+Server shutdown in progress
+Statement has sum functions and columns in same statement
+Column count doesn't match value count
+Query was empty
+Multiple primary key defined
+Incorrect table definition; there can be only one auto column and it must be defined as a key
+Can't create IP socket
+Field separator argument is not what is expected; check the manual
+You can't use fixed rowlength with BLOBs; please use 'fields terminated by'
+Incorrect sub part key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique sub keys
+You can't delete all columns with ALTER TABLE; use DROP TABLE instead
+No tables used
+The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
+Unknown error
+Invalid use of group function
+A table must have at least 1 column
+Too many columns
+Cross dependency found in OUTER JOIN; examine your ON conditions
+No paths allowed for shared library
+You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords
+You must have privileges to update tables in the mysql database to be able to change passwords for others
+Can't find any matching row in the user table
+Invalid use of NULL value
+Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
+Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used
+The host or user argument to GRANT is too long
+The used command is not allowed with this MySQL version
+You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
+Too many delayed threads in use
+Got a packet bigger than 'max_allowed_packet' bytes
+Got a read error from the connection pipe
+Got an error from fcntl()
+Got packets out of order
+Couldn't uncompress communication packet
+Got an error reading communication packets
+Got timeout reading communication packets
+Got an error writing communication packets
+Got timeout writing communication packets
+Result string is longer than 'max_allowed_packet' bytes
+The used table type doesn't support BLOB/TEXT columns
+The used table type doesn't support AUTO_INCREMENT columns
+Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead
+Result consisted of more than one row
+This table type requires a primary key
+This version of MySQL is not compiled with RAID support
+You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
+Can't open table
+You are not allowed to execute this command in a transaction
+The storage engine for the table does not support binary table dump
+Binlog closed, cannot RESET MASTER
+Net error reading from master
+Net error writing to master
+Can't find FULLTEXT index matching the column list
+Can't execute the given command because you have active locked tables or an active transaction
+Some non-transactional changed tables couldn't be rolled back
+Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again
+This operation cannot be performed with a running slave; run STOP SLAVE first
+This operation requires a running slave; configure slave and do START SLAVE
+The server is not configured as slave; fix in config file or with CHANGE MASTER TO
+Could not initialize master info structure; more error messages can be found in the MySQL error log
+Could not create slave thread; check system resources
+You may only use constant expressions with SET
+Lock wait timeout exceeded; try restarting transaction
+The total number of locks exceeds the lock table size
+Update locks cannot be acquired during a READ UNCOMMITTED transaction
+DROP DATABASE not allowed while thread is holding global read lock
+CREATE DATABASE not allowed while thread is holding global read lock
+Incorrect table definition; all MERGE tables must be in the same database
+Deadlock found when trying to get lock; try restarting transaction
+The used table type doesn't support FULLTEXT indexes
+Cannot add foreign key constraint
+Cannot add or update a child row a foreign key constraint fails
+Cannot delete or update a parent row a foreign key constraint fails
+The used SELECT statements have a different number of columns
+Can't execute the query because you have a conflicting read lock
+Mixing of transactional and non-transactional tables is disabled
+Slave SQL thread ignored the query because of replicate-*-table rules
+Key reference and table reference don't match
+Subquery returns more than 1 row
+Help database is corrupt or does not exist
+Cyclic reference on subqueries
+Every derived table must have its own alias
+Select %u was reduced during optimization
+Client does not support authentication protocol requested by server; consider upgrading MySQL client
+All parts of a SPATIAL index must be NOT NULL
+Slave is already running
+Slave already has been stopped
+ZLIB Not enough memory
+ZLIB Not enough room in the output buffer (probably, length of uncompressed data was corrupted)
+ZLIB Input data corrupted
+Cannot drop one or more of the requested users
+Can't revoke all privileges for one or more of the requested users
+SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started
+Incorrect parameter or combination of parameters for START SLAVE UNTIL
+It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart
+SQL thread is not to be started so UNTIL options are ignored
+MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work
+Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
+This command is not supported in the prepared statement protocol yet
+RETURN is only allowed in a FUNCTION
+The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored
+The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been translated to SET SQL_LOG_BIN
+Query execution was interrupted
+Cursor statement must be a SELECT
+Cursor SELECT must not have INTO
+Cursor is already open
+Cursor is not open
+Incorrect number of FETCH variables
+No data - zero rows fetched, selected, or processed
+Subselect value not supported
+Variable or condition declaration after cursor or handler declaration
+Cursor declaration after handler declaration
+Case not found for CASE statement
+EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
+View's SELECT contains a subquery in the FROM clause
+View's SELECT contains a variable or parameter
+View's SELECT and view's field list have different column counts
+View merge algorithm can't be used here for now (assumed undefined algorithm)
+View being updated does not have complete key of underlying table in it
+GOTO is not allowed in a stored procedure handler
+Trigger already exists
+Trigger does not exist
+Division by 0
+Target log not found in binlog index
+I/O error reading log index file
+Server configuration does not permit binlog purge
+Failed on fseek()
+Fatal error during log purge
+A purgeable log is in use, will not purge
+Unknown error during log purge
+You are not using binary logging
+WSAStartup Failed
+Can't handle procedures with different groups yet
+Select must have a group with this procedure
+Can't use ORDER clause with this procedure
+Prepared statement contains too many placeholders
+View text checksum failed
+XAER_NOTA Unknown XID
+XAER_INVAL Invalid arguments (or unsupported command)
+XAER_OUTSIDE Some work is done outside global transaction
+XAER_RMERR Fatal error occurred in the transaction branch - check your data for consistency
+XA_RBROLLBACK Transaction branch was rolled back
+Failed to grant EXECUTE and ALTER ROUTINE privileges
+Failed to revoke all privileges to dropped routine
+Can't load value from file with fixed size rows to variable
+You are not allowed to create a user with GRANT
+Table definition has changed, please retry transaction
+Duplicate handler declared in the same block
+Cannot get geometry object from data you send to the GEOMETRY field
+A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes
+This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
+You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
+You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it.
+Explicit or implicit commit is not allowed in stored function or trigger.
+Recursive stored functions and triggers are not allowed.
+Trigger in wrong schema
+Cannot drop default keycache
+XAER_DUPID The XID already exists
+The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner
+Not allowed to set autocommit from a stored function or trigger
+Definer is not fully qualified
+AGGREGATE is not supported for stored functions
+The used table type doesn't support SPATIAL indexes
+Triggers can not be created on system tables
+Failed to read auto-increment value from storage engine
+Too high level of nesting for select
+First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY
+General warning
+Disconnect error
+Data truncated
+Privilege not revoked
+Invalid connection string attribute
+Error in row
+Option value changed
+No rows updated or deleted
+More than one row updated or deleted
+Cancel treated as FreeStmt/Close
+Attempt to fetch before the result returned the first rowset
+Wrong number of parameters
+Restricted data type attribute violation
+Invalid use of default paramater
+Unable to connect to data source
+Connection in use
+Connection not open
+Data source rejected establishment of connection
+Connection failure during transaction
+Communication link failure
+Insert value list does not match column list
+Degree of derived table does not match column list
+String data right truncation
+Indicator variable required but not supplied
+Numeric value out of range
+Error in assignment
+Datetime field overflow
+Division by zero
+String data, length mismatch
+Integrity constraint violation
+Invalid cursor state
+Invalid transaction state
+Invalid authorization specification
+Invalid cursor name
+Syntax error or access violation
+Duplicate cursor name
+Serialization failure
+Syntax error or access violation
+Operation aborted
+Driver does not support this function
+Data source name not found and no default driver specified
+Specified driver could not be loaded
+Driver's SQLAllocEnv failed
+Driver's SQLAllocConnect failed
+Driver's SQLSetConnectOption failed
+No data source or driver specified; dialog prohibited
+Dialog failed
+Unable to load translation DLL
+Data source name too long
+Driver name too long
+DRIVER keyword syntax error
+Trace file error
+Base table or view already exists
+Base table not found
+Index already exists
+Index not found
+Column already exists
+Column not found
+No default for column
+General error
+Memory allocation failure
+Invalid column number
+Program type out of range
+SQL data type out of range
+Operation canceled
+Invalid argument value
+Function sequence error
+Operation invalid at this time
+Invalid transaction operation code specified
+No cursor name available
+Invalid string or buffer length
+Descriptor type out of range
+Option type out of range
+Invalid parameter number
+Invalid scale value
+Function type out of range
+Information type out of range
+Column type out of range
+Scope type out of range
+Nullable type out of range
+Uniqueness option type out of range
+Accuracy option type out of range
+Direction option out of range
+Invalid precision value
+Invalid parameter type
+Fetch type out of range
+Row value out of range
+Concurrency option out of range
+Invalid cursor position
+Invalid driver completion
+Invalid bookmark value
+Driver not capable
+No data at execution values pending
+Timeout expired
+Access to database configured in the DSN has been denied. Default used.
+An error has occurred during an attempt to access the log file, logging disabled.
+Connected to backup server.
+Language configured in the DSN is not supported. Default used.
+Null bit data forced to zero.
+Procedure executed with 'EXEC'. No output parameters returned.
+SQL Debugging disabled.
+The ODBC catalog stored procedures installed on server %s are version %s; version %02d.%02d.%4.4d or later is required to ensure proper operation. Please contact your system administrator.
+Zero length data forced to length 1.
+Cursor concurrency changed.
+Cursor type changed.
+Packet size change not honored by server, server size used.
+Packet size changed.
+Login timeout changed.
+Conversions not allowed using bcp_moretext.
+Server rejected the connection; Access to selected database has been denied.
+Server rejected the connection; Language specified is not supported.
+Database is invalid or cannot be accessed.
+Packet size change not supported by server, default used.
+All bound columns are read-only.
+An old netlib (%s) has been detected. Please delete it and restart the application.
+Attempt to bulk-copy a NULL value into a Server column which does not accept NULL values.
+Attempt to bulk-copy an oversized column to the SQL Server.
+Attempt to read unknown version of BCP format file.
+Bad bulk-copy direction. Must be either IN or OUT.
+Bad terminator.
+Bcp host-files must contain at least one column.
+Cannot generate SSPI context.
+Cannot initialize SSPI package.
+Communication module is not valid. Driver has not been correctly installed.
+Connection is busy with results for another hstmt.
+Connection is not enabled for BCP.
+Failure during closing of connection.
+For BCP, all variable-length data must have either a length-prefix or a terminator specified.
+Host-file columns may be skipped only when copying into the server.
+Incorrect host-column number found in BCP format-file.
+I/O error while reading bcp data-file.
+I/O error while reading BCP format file.
+I/O error while writing bcp data-file.
+I/O error while writing bcp error-file.
+Invalid option.
+Non-default parameter not allowed after default parameter.
+Not enough columns bound.
+ODBC BCP/Driver version mismatch.
+Protocol error in TDS stream.
+Table contains less rows than first row count.
+Table contains less rows than last row count.
+Table has no text/image columns.
+TDS buffer length too large.
+Text column data incomplete.
+The BCP host-file contains less rows than first row count.
+The row length exceeds SQL Server's maximum allowable size.
+The stored procedure required to complete this operation could not be found on the server (they were supplied with SQL Server). Please contact your system administrator.
+Unable to load communication module. Driver has not been correctly installed.
+Unable to open BCP host data-file.
+Unable to open BCP error-file.
+Unable to read driver version.
+Unexpected EOF encountered in BCP data-file.
+Unicode conversion failed.
+Unicode conversion failed. The code page of the SQL server must be installed on the client system.
+Unknown token received from SQL Server.
+Warning: Partial insert/update. The insert/update of a text or image column(s) did not succeed.
+ORA-
\ No newline at end of file
diff --git "a/\345\276\241\345\211\221/IP generation.py" "b/\345\276\241\345\211\221/IP generation.py"
new file mode 100644
index 0000000..f4cb9de
--- /dev/null
+++ "b/\345\276\241\345\211\221/IP generation.py"
@@ -0,0 +1,15 @@
+import time
+start = time.time()
+
+xj=open('ip.txt','w')
+xj.close()
+
+print('[+]Emptying IP.txt')
+def sc():
+ user=input('Please enter IP, similar to 127.0.0.:')
+ for x in range(1,256):
+ a = '{}{}'.format(user,x)
+ print(a,file=open('ip.txt','a'))
+sc()
+stop=time.time()
+print('[+]time consuming {}'.format(start-stop))
\ No newline at end of file
diff --git "a/\345\276\241\345\211\221/ip.txt" "b/\345\276\241\345\211\221/ip.txt"
new file mode 100644
index 0000000..16d3aeb
--- /dev/null
+++ "b/\345\276\241\345\211\221/ip.txt"
@@ -0,0 +1,255 @@
+220.181.57.1
+220.181.57.2
+220.181.57.3
+220.181.57.4
+220.181.57.5
+220.181.57.6
+220.181.57.7
+220.181.57.8
+220.181.57.9
+220.181.57.10
+220.181.57.11
+220.181.57.12
+220.181.57.13
+220.181.57.14
+220.181.57.15
+220.181.57.16
+220.181.57.17
+220.181.57.18
+220.181.57.19
+220.181.57.20
+220.181.57.21
+220.181.57.22
+220.181.57.23
+220.181.57.24
+220.181.57.25
+220.181.57.26
+220.181.57.27
+220.181.57.28
+220.181.57.29
+220.181.57.30
+220.181.57.31
+220.181.57.32
+220.181.57.33
+220.181.57.34
+220.181.57.35
+220.181.57.36
+220.181.57.37
+220.181.57.38
+220.181.57.39
+220.181.57.40
+220.181.57.41
+220.181.57.42
+220.181.57.43
+220.181.57.44
+220.181.57.45
+220.181.57.46
+220.181.57.47
+220.181.57.48
+220.181.57.49
+220.181.57.50
+220.181.57.51
+220.181.57.52
+220.181.57.53
+220.181.57.54
+220.181.57.55
+220.181.57.56
+220.181.57.57
+220.181.57.58
+220.181.57.59
+220.181.57.60
+220.181.57.61
+220.181.57.62
+220.181.57.63
+220.181.57.64
+220.181.57.65
+220.181.57.66
+220.181.57.67
+220.181.57.68
+220.181.57.69
+220.181.57.70
+220.181.57.71
+220.181.57.72
+220.181.57.73
+220.181.57.74
+220.181.57.75
+220.181.57.76
+220.181.57.77
+220.181.57.78
+220.181.57.79
+220.181.57.80
+220.181.57.81
+220.181.57.82
+220.181.57.83
+220.181.57.84
+220.181.57.85
+220.181.57.86
+220.181.57.87
+220.181.57.88
+220.181.57.89
+220.181.57.90
+220.181.57.91
+220.181.57.92
+220.181.57.93
+220.181.57.94
+220.181.57.95
+220.181.57.96
+220.181.57.97
+220.181.57.98
+220.181.57.99
+220.181.57.100
+220.181.57.101
+220.181.57.102
+220.181.57.103
+220.181.57.104
+220.181.57.105
+220.181.57.106
+220.181.57.107
+220.181.57.108
+220.181.57.109
+220.181.57.110
+220.181.57.111
+220.181.57.112
+220.181.57.113
+220.181.57.114
+220.181.57.115
+220.181.57.116
+220.181.57.117
+220.181.57.118
+220.181.57.119
+220.181.57.120
+220.181.57.121
+220.181.57.122
+220.181.57.123
+220.181.57.124
+220.181.57.125
+220.181.57.126
+220.181.57.127
+220.181.57.128
+220.181.57.129
+220.181.57.130
+220.181.57.131
+220.181.57.132
+220.181.57.133
+220.181.57.134
+220.181.57.135
+220.181.57.136
+220.181.57.137
+220.181.57.138
+220.181.57.139
+220.181.57.140
+220.181.57.141
+220.181.57.142
+220.181.57.143
+220.181.57.144
+220.181.57.145
+220.181.57.146
+220.181.57.147
+220.181.57.148
+220.181.57.149
+220.181.57.150
+220.181.57.151
+220.181.57.152
+220.181.57.153
+220.181.57.154
+220.181.57.155
+220.181.57.156
+220.181.57.157
+220.181.57.158
+220.181.57.159
+220.181.57.160
+220.181.57.161
+220.181.57.162
+220.181.57.163
+220.181.57.164
+220.181.57.165
+220.181.57.166
+220.181.57.167
+220.181.57.168
+220.181.57.169
+220.181.57.170
+220.181.57.171
+220.181.57.172
+220.181.57.173
+220.181.57.174
+220.181.57.175
+220.181.57.176
+220.181.57.177
+220.181.57.178
+220.181.57.179
+220.181.57.180
+220.181.57.181
+220.181.57.182
+220.181.57.183
+220.181.57.184
+220.181.57.185
+220.181.57.186
+220.181.57.187
+220.181.57.188
+220.181.57.189
+220.181.57.190
+220.181.57.191
+220.181.57.192
+220.181.57.193
+220.181.57.194
+220.181.57.195
+220.181.57.196
+220.181.57.197
+220.181.57.198
+220.181.57.199
+220.181.57.200
+220.181.57.201
+220.181.57.202
+220.181.57.203
+220.181.57.204
+220.181.57.205
+220.181.57.206
+220.181.57.207
+220.181.57.208
+220.181.57.209
+220.181.57.210
+220.181.57.211
+220.181.57.212
+220.181.57.213
+220.181.57.214
+220.181.57.215
+220.181.57.216
+220.181.57.217
+220.181.57.218
+220.181.57.219
+220.181.57.220
+220.181.57.221
+220.181.57.222
+220.181.57.223
+220.181.57.224
+220.181.57.225
+220.181.57.226
+220.181.57.227
+220.181.57.228
+220.181.57.229
+220.181.57.230
+220.181.57.231
+220.181.57.232
+220.181.57.233
+220.181.57.234
+220.181.57.235
+220.181.57.236
+220.181.57.237
+220.181.57.238
+220.181.57.239
+220.181.57.240
+220.181.57.241
+220.181.57.242
+220.181.57.243
+220.181.57.244
+220.181.57.245
+220.181.57.246
+220.181.57.247
+220.181.57.248
+220.181.57.249
+220.181.57.250
+220.181.57.251
+220.181.57.252
+220.181.57.253
+220.181.57.254
+220.181.57.255
diff --git "a/\345\276\241\345\211\221/mitsurugi.exe" "b/\345\276\241\345\211\221/mitsurugi.exe"
new file mode 100644
index 0000000000000000000000000000000000000000..498984f53df0c4318fe906488b709dc396b03408
GIT binary patch
literal 7790132
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
z
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