Tomcat中间件漏洞复现 – 作者:MISUagain

Tomcat目录结构:

bin:二进制文件

lib:全局的jar包

temp:临时性文件

webapps:Java的web项目,需要部署的项目就要放在这个目录中

work:JSP代码翻译的Java代码以及编译的.class文件

了解Tomcat:

server.xml:配置tomcat启动的端口号、host主机、context等

web.xml:部署描述文件,部署每个webapp时都会调用该文件,配置该web应用的默认servlet

tomcat-user.xml:tomcat的用户密码和权限

任意文件写入(CVE-2017-12615)

影响范围:
Tomcat 7.0.0~7.0.81(默认配置)
1)、使用vulhub环境进行复现
原理:配置不当,导致将conf/web.xml中的readonly设置为false,导致可以使用PUT上传任意文件,但限制jsp后缀。不同平台有多种的绕过方法。
复现环境:Tomcat 8.5.19
image.png
docker exec -ti bash
cat conf/web.xml |grep readonly

image.png
image.png
2)、绕过上传jsp
1.windows下不允许文件以空格结尾,上传到windows会自动去掉末尾空格。
image.png
2.WindosNTFS流
文件后缀加上::$DATA
image.png
3./在文件名中是非法的,会被去除(Windows/Linux)
image.png
三种方法都成功上传。
image.png

修复建议:
readonly改为true

远程代码执行(CVE-2019-0232)
影响范围:
Tomcat 9.0.0.M1~9.0.17
Tomcat 8.5.0~8.5.39
Tomcat 7.0.0~7.0.93
复现环境:9.0.17
前提:Tomcat的CGI_Servlet组件默认是关闭的,在conf/web.xml中找到注释的部分,去掉注释,并配置enableCmdLineArguments和executable。
image.png
找到以上部分代码去掉注释,并加入红框内容。
enableCmdLineArguments启用后会将url中的参数传递到命令行。
executable指定执行的二进制文件,默认是perl,需要置为空才会执行文件本身。

启用cgi的servlet-mapping
image.png

修改conf/context.xml,添加privileged=”true”属性,否则会没有权限。
image.png

在tomcat\webapps\ROOT\WEB-INF下创建cgi-bin目录,在该目录下创建一个bat文件,随后填写任意内容即可。
image.png
修复建议:
1、更新版本。
2、禁用enableCmdLineArguments参数。

AJP文件包含漏洞分析(CVE-2020-1938)

影响版本:
Tomcat 6.x
Tomcat 7.x <7.0.100
Tomcat 8.x <8.5.51
Tomcat 9.x <9.0.31

漏洞危害:如果目标应用有文件上传的功能,配合文件包含的利用可以达到远程代码执行的危害。
影响说明:读取webapp下所有文件
漏洞成因:tomcat部署时有两个重要的配置文件conf/server.xml和conf/web.xml。
前者定义了tomcat启动时设计的组件属性,包含两个用于处理请求的组件connector。如果开启状态下,tomcat启动后会监听8080、8009端口,它们负责接受http、ajp协议的数据。
后者用来定义servlet。
漏洞复现-利用POC攻击:
安装好环境后执行
python 1.py 192.168.109.149 -p 8009 -f /WEB-INF/web.xml
image.png
成功读取到/WEB-INF/web.xml文件的源码

漏洞复现-文件包含RCE:
该漏洞可以任意文件类型解析为jsp,从而达到任意命令执行的效果。但漏洞需要配合文件上传漏洞利用。
首先生成bash payload
image.png
最终的payload为txt文件:
image.png
上传到目标服务器,然后kali开启监听。
python 1.py ip -p 8009 -f RCE.txt
该漏洞可以和war上传联动。

Tomcat弱口令&后台getshell

1)、在conf/tomcat-users.xml文件中配置用户的权限:

<?xml version='1.0' encoding='cp936'?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

 <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" />

</tomcat-users>

2)、改conf\Catalina\localhost路径下的manager.xml文件,如果该路径下没有此文件,可以新建一个。内容如下:

<Context privileged="true" antiResourceLocking="false" 
 docBase="${catalina.home}/webapps/manager"> 
 <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /> 
</Context>

3)、成功创建和添加以上内容,允许远程访问该manager。
image.png
使用tomcat/tomcat登录,访问正常。

4)、本地getshell复现
(1)、正常安装的情况下,tomcat版本中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性才能进行攻击。
(2)、文件上传war包。
war包简介
war包是用来进行Web开发时一个网站项目下的所有代码,包括前台HTML/CSS/JS代码,以及后台JavaWeb的代码。当开发人员开发完毕就会将源码打包给测试员测试,测试完毕也会打包成War包进行发布。War包可以放在Tomcat下的webapps或word目录,当Tomcat服务器启动时,War包即会随之解压源代码来进行自动部署。
(3)、生成war大马包
使用java命令:
jar -cvf shell.war shell.jsp

查看上传位置:
image.png
成功解析大马并能实现upload功能:
image.png
5)、上传冰蝎jsp木马
image.png
本地检查成功上传:
image.png
image.png
此处关闭机场和代理,否则冰蝎会默认走导致无法上线。
6)、MSF上线控制
image.png
完成shell控制。
image.png

来源:freebuf.com 2021-05-08 13:25:39 by: MISUagain

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论