bin:二进制文件
lib:全局的jar包
temp:临时性文件
webapps:Java的web项目,需要部署的项目就要放在这个目录中
work:JSP代码翻译的Java代码以及编译的.class文件
server.xml:配置tomcat启动的端口号、host主机、context等
web.xml:部署描述文件,部署每个webapp时都会调用该文件,配置该web应用的默认servlet
tomcat-user.xml:tomcat的用户密码和权限
影响范围:Tomcat 7.0.0~7.0.81(默认配置)
1)、使用vulhub环境进行复现
原理:配置不当,导致将conf/web.xml中的readonly设置为false,导致可以使用PUT上传任意文件,但限制jsp后缀。不同平台有多种的绕过方法。
复现环境:Tomcat 8.5.19
docker exec -ti bash
cat conf/web.xml |grep readonly
2)、绕过上传jsp
1.windows下不允许文件以空格结尾,上传到windows会自动去掉末尾空格。
2.WindosNTFS流
文件后缀加上::$DATA
3./在文件名中是非法的,会被去除(Windows/Linux)
三种方法都成功上传。
修复建议:
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。
找到以上部分代码去掉注释,并加入红框内容。
enableCmdLineArguments启用后会将url中的参数传递到命令行。
executable指定执行的二进制文件,默认是perl,需要置为空才会执行文件本身。
启用cgi的servlet-mapping
修改conf/context.xml,添加privileged=”true”属性,否则会没有权限。
在tomcat\webapps\ROOT\WEB-INF下创建cgi-bin目录,在该目录下创建一个bat文件,随后填写任意内容即可。
修复建议:
1、更新版本。
2、禁用enableCmdLineArguments参数。
影响版本:
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
成功读取到/WEB-INF/web.xml文件的源码
漏洞复现-文件包含RCE:
该漏洞可以任意文件类型解析为jsp,从而达到任意命令执行的效果。但漏洞需要配合文件上传漏洞利用。
首先生成bash payload
最终的payload为txt文件:
上传到目标服务器,然后kali开启监听。
python 1.py ip -p 8009 -f RCE.txt
该漏洞可以和war上传联动。
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。
使用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
查看上传位置:
成功解析大马并能实现upload功能:
5)、上传冰蝎jsp木马
本地检查成功上传:
此处关闭机场和代理,否则冰蝎会默认走导致无法上线。
6)、MSF上线控制
完成shell控制。