From 32c10f9418fe67be1c446e8bbbea714927710584 Mon Sep 17 00:00:00 2001
From: nihaohello <34113556+nihaohello@users.noreply.github.com>
Date: Wed, 27 Mar 2019 16:21:50 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E4=BD=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/N-MiddlewareScan.iml | 8 +
.../inspectionProfiles/profiles_settings.xml | 5 +
.idea/misc.xml | 7 +
.idea/modules.xml | 8 +
.idea/workspace.xml | 11 +
Github_README_deal.py | 34 +++
N-MiddlewareScan.py | 56 +++++
README.md | 5 +
__pycache__/config.cpython-37.pyc | Bin 0 -> 180 bytes
config.py | 1 +
plugins/README.md | 16 ++
plugins/__pycache__/axis.cpython-37.pyc | Bin 0 -> 419 bytes
plugins/__pycache__/plugins.cpython-37.pyc | Bin 0 -> 690 bytes
plugins/__pycache__/user_agent.cpython-37.pyc | Bin 0 -> 24707 bytes
plugins/axis.py | 50 ++++
plugins/deal.py | 8 +
plugins/plugins.py | 12 +
plugins/temp.txt | 59 +++++
plugins/user_agent.py | 237 ++++++++++++++++++
urls.txt | 2 +
20 files changed, 519 insertions(+)
create mode 100644 .idea/N-MiddlewareScan.iml
create mode 100644 .idea/inspectionProfiles/profiles_settings.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/workspace.xml
create mode 100644 Github_README_deal.py
create mode 100644 N-MiddlewareScan.py
create mode 100644 README.md
create mode 100644 __pycache__/config.cpython-37.pyc
create mode 100644 config.py
create mode 100644 plugins/README.md
create mode 100644 plugins/__pycache__/axis.cpython-37.pyc
create mode 100644 plugins/__pycache__/plugins.cpython-37.pyc
create mode 100644 plugins/__pycache__/user_agent.cpython-37.pyc
create mode 100644 plugins/axis.py
create mode 100644 plugins/deal.py
create mode 100644 plugins/plugins.py
create mode 100644 plugins/temp.txt
create mode 100644 plugins/user_agent.py
create mode 100644 urls.txt
diff --git a/.idea/N-MiddlewareScan.iml b/.idea/N-MiddlewareScan.iml
new file mode 100644
index 0000000..d0876a7
--- /dev/null
+++ b/.idea/N-MiddlewareScan.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..0eefe32
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..8656114
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..86a5602
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..b768272
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Github_README_deal.py b/Github_README_deal.py
new file mode 100644
index 0000000..543908b
--- /dev/null
+++ b/Github_README_deal.py
@@ -0,0 +1,34 @@
+# coding=utf-8
+import os
+
+def re_README(file):
+ f = open(file, encoding="utf-8")
+ urls = []
+ for i in f.readlines():
+ i = i.strip("\n").strip(" ")
+ i = i + " " + "\n"
+ urls.append(i)
+ f.close()
+
+ with open(file, "w+", encoding="utf-8") as f:
+ for i in urls:
+ f.write(i)
+ f.close()
+def list_file(dir_name):
+ files=os.listdir(dir_name)
+ new_file=os.path.abspath(dir_name)
+ for file in files:
+ file=new_file+"\\"+file
+ if os.path.isdir(file):
+ list_file(file)
+ #print(file)
+ elif "README.md" in file:
+ print(file)
+ re_README(file)
+
+dir_name=os.path.dirname(__file__)
+print(dir_name)
+list_file(dir_name)
+
+
+
diff --git a/N-MiddlewareScan.py b/N-MiddlewareScan.py
new file mode 100644
index 0000000..611fbf7
--- /dev/null
+++ b/N-MiddlewareScan.py
@@ -0,0 +1,56 @@
+#coding=utf-8
+#Author is Naivete
+#github:https://www.github.com/nihaohello
+#blog:http://www.youknowi.xin
+import sys
+import os
+import argparse
+import traceback
+import config
+from concurrent.futures import ThreadPoolExecutor
+from plugins import plugins
+#80,4848,7001,7002,8000,8001,8080,8081,8888,9999,9043,9080
+class MiddlewareScan(object):
+ def __init__(self,url,options):
+ self.url=url
+ self.options=options
+ def run(self):
+ P = plugins.plugins(self.url,self.options)
+ P.run()
+def main():
+ arg = argparse.ArgumentParser(description='MiddlewareScan By Naivete')
+ arg.add_argument('-u', '--url', help='url site', dest='url')
+ arg.add_argument('-i', '--file', help='file name', dest='file')
+ arg.add_argument('-p', '--options', help='options', dest='options')
+ arg.add_argument('-t', '--thread', help='thread num', dest='thread')
+ arg = arg.parse_args()
+ if arg.thread:
+ config.ThreadNum=arg.thread
+ if not arg.options:
+ arg.options="all"
+ if arg.url:
+ try:
+ S=MiddlewareScan(arg.url,arg.options)
+ S.run()
+ except Exception:
+ print(traceback.print_exc())
+ if arg.file:
+ try:
+ with open(arg.file,encoding="utf-8") as f:
+ with ThreadPoolExecutor(config.ThreadNum) as excetor:
+ for url in f.readlines():
+ try:
+ url=url.rstrip("\n")
+ S=MiddlewareScan(url,arg.options)
+ excetor.submit(S.run())
+ except Exception:
+ pass
+ f.close()
+ except Exception:
+ print(traceback.print_exc())
+ print("相关漏洞检测完成。")
+if __name__ == '__main__':
+ print("开始检测中间件相关漏洞:")
+ main()
+
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..16b0be4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+最近在看web中间件的漏洞
+看到一个三年前的脚本:https://github.com/ywolf/F-MiddlewareScan
+想着自己写一个中间件相关的,正是脚本好写,poc和exp难
+github链接:
+
diff --git a/__pycache__/config.cpython-37.pyc b/__pycache__/config.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8f9631c53a9760e6c3e5f3eef66bf04073a3f9ac
GIT binary patch
literal 180
zcmZ?b<>g`k0=KAHF+4!}F^B^Lj6jA15EpX*i4=w?h7`tN22G}yMnJBgCgUy6kc^_#
z#1y~M+?5PP%s@df@zoQ^a<+;IElw>ej;YKqRY=TBQOHe=aY-%CF3B&5DX1*T$j^JW
zwfn{Tsn1t*Ki$z1rt%g%0nfvh
zm5Eni!oG@tCEMrt{Q19JP9`ysdGc-XLHU!5UlVjVC%1bP6ez4=i5Vg&p}befgz{BD
z*;Auykl`2I0*U>!)NS5bZStbjtM(50I~n8H=j3*mg2EOyP~i)k|(p{
zL9AZ$!U3u_qUU@EuwDf!fN3%7xRz0WI|XSoYZk0__o&*Hzo
d;2z=Dy6!&+>o<-Roh~0#SL-tt<7i`y{2%reN<9Do
literal 0
HcmV?d00001
diff --git a/plugins/__pycache__/plugins.cpython-37.pyc b/plugins/__pycache__/plugins.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..46bd2d484510883b6432d1b609393e5a4e112377
GIT binary patch
literal 690
zcmY*Wzi-tr5I)CAUU+S#jtm_-l7UW42%(B1G4Tc}mMD@HVnb8%9Ai6zSG}!l9hjK9
zzy=c&3xA4N#IGH8?vj@ZF7kKhvwin{mwP)qb3prjcz*pK#7GrRT%iThdAXy6q
zC^%*BA{o7BjB>o?OI~mW4?xB;dJQsC@i{LN$&MjUe&I`4gqdmkXN`6_3vus`9>a&wXb~v+^gM
z{{H#m=cl(nK3shJ@}^weeAr0Ys+W~j$91L4jm*g(m{rJxXmsO+NU^@7uE0`uw!67{
zFdf%8{lUmzsk)9E4{MzHInLXovN4*}@sJqXXg|uKf#l3mr$N&Q8Eyl&y}pLQhQXYj
zZA}dDWRWLCR98zSM3@V)>}20kye-6wzG}x4OBL+a|K(|TmU;|7hbB7o$XLenG;p_a
qAvTpi329}F($W&kkakZ_Rqcm2|8Tu37P31dhr2WjN0KtOjo)7i$e6GI
literal 0
HcmV?d00001
diff --git a/plugins/__pycache__/user_agent.cpython-37.pyc b/plugins/__pycache__/user_agent.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..72c6ef54a99da72b75ff219ac1edcfa747fb2fbf
GIT binary patch
literal 24707
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
Y_{Gh89^Bod!=3I!>|;ar?Vcn54c&EtcmMzZ
literal 0
HcmV?d00001
diff --git a/plugins/axis.py b/plugins/axis.py
new file mode 100644
index 0000000..b80287d
--- /dev/null
+++ b/plugins/axis.py
@@ -0,0 +1,50 @@
+#coding=utf-8
+from user_agent import get_user_agent
+def CVE_2018_9158(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_9157(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_9156(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_8032(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_19334(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_10664(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_10663(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_10662(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_10661(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_10660(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_10659(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2018_10658(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2017_9765(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2017_15885(url):
+ headers = {'User-Agent': get_user_agent()}
+def CVE_2017_12413(url):
+ headers = {'User-Agent': get_user_agent()}
+def axis(url):
+ CVE_2018_9158(url)
+ CVE_2018_9157(url)
+ CVE_2018_9156(url)
+ CVE_2018_8032(url)
+ CVE_2018_19334(url)
+ CVE_2018_10664(url)
+ CVE_2018_10663(url)
+ CVE_2018_10662(url)
+ CVE_2018_10661(url)
+ CVE_2018_10660(url)
+ CVE_2018_10659(url)
+ CVE_2018_10658(url)
+ CVE_2017_9765(url)
+ CVE_2017_15885(url)
+ CVE_2017_12413(url)
+ pass
+
diff --git a/plugins/deal.py b/plugins/deal.py
new file mode 100644
index 0000000..da11eca
--- /dev/null
+++ b/plugins/deal.py
@@ -0,0 +1,8 @@
+#coding=utf-8
+with open("temp.txt",encoding="utf-8") as f:
+ for i in f.readlines():
+ i=i.rstrip("\n").split(" ")[0]
+ i=i.replace("-","_")
+ #i="def "+i+"(url):\n"+" "+"headers = {'User-Agent': get_user_agent()}"
+ print(i+"(url)")
+f.close()
diff --git a/plugins/plugins.py b/plugins/plugins.py
new file mode 100644
index 0000000..e1d17a4
--- /dev/null
+++ b/plugins/plugins.py
@@ -0,0 +1,12 @@
+#coding=utf-8
+import sys
+sys.path.append("plugins")
+from axis import axis
+class plugins(object):
+ def __init__(self,url,options):
+ self.url=url
+ self.options=options
+ def run(self):
+ axis(self.url)
+
+
diff --git a/plugins/temp.txt b/plugins/temp.txt
new file mode 100644
index 0000000..fa5a12d
--- /dev/null
+++ b/plugins/temp.txt
@@ -0,0 +1,59 @@
+CVE-2018-9158 An issue was discovered on AXIS M1033-W (IP camera) Firmware version 5.40.5.1 devices. They don't employ a suitable mechanism to prevent a DoS attack, which leads to a response time delay. An attacker can use the hping3 tool to perform an IPv4 flood attack, and the services are interrupted from attack start to end.
+CVE-2018-9157 ** DISPUTED ** An issue was discovered on AXIS M1033-W (IP camera) Firmware version 5.40.5.1 devices. The upload web page doesn't verify the file type, and an attacker can upload a webshell by making a fileUpload.shtml request for a custom .shtml file, which is interpreted by the Apache HTTP Server mod_include module with "