一、CVE-2017-12615
CVE-2017-12615对应的漏洞为任意文件写入,主要影响的是Tomcat的7.0.0-7.0.81这几个版本
1、漏洞原理
由于配置不当(非默认配置),将配置文件conf/web.xml中的readonly设置为了 false,导致可以使用PUT方法上传任意文件,但限制了jsp后缀的上传。
根据描述,在 Windows 服务器下,将 readonly 参数设置为 false 时,即可通过 PUT 方式创建一个 JSP 文件,并可以执行任意代码。
2、漏洞复现
(1)使用vulhub复现,进入CVE-2017-12615文件夹后,开启环境
(2)docker ps –a查看是否开启
(3)进入docker容器中,查看readonly的值是否为false
sudo docker exec -ti 40 bash
cat conf/web.xml | grep readonly

(4)访问一下
(5)bp抓包随意上传一个文件看看
返回201,去docker容器中看看上传的文件是否存在
存在test.txt
(6)试试上传冰蝎马
返回404,说明有限制
(7)绕过限制方法:
1)Windows下不允许文件以空格结尾
以PUT /shell.jsp%20 HTTP/1.1上传到 Windows会被自动去掉末尾空格
2)Windows NTFS流
Put/shell.jsp::$DATA HTTP/1.1
3)/在文件名中是非法的,也会被去除(Linux/Windows)
Put/shell.jsp/http:/1.1
(8)这里就添加一个/试试
看样子是上传成功了,查看docker容器内部文件确实存在
(9)冰蝎连一下
3、漏洞防御
把conf/web.xml中的readonly改为true即可
二、CVE-2020-1938
受影响版本:
apache tomcat 6
apache tomcat 7 < 7.0.100
apache tomcat 8 < 8.5.51
apache tomcat 9 < 9.0.31
1、漏洞原理
Tomcat 配置了两个Connecto,它们分别是 HTTP 和 AJP :HTTP默认端口为8080,处理http请求,而AJP默认端口8009,用于处理 AJP 协议的请求,而AJP比http更加优化,多用于反向、集群等,漏洞由于Tomcat AJP协议存在缺陷,而导致攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件以及可以包含任意文件,如果有某上传点,上传图片马等等,即可以获取shell
2、漏洞复现
(1)启动环境
docker-compose up –d
docker ps -a

(2)首先使用poc进行漏洞检测
工具地址:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
工具使用命令python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.52.133 -p 8009 -f /WEB-INF/web.xml
读取到8009端口下的web.xml文件成功,存在漏洞
3、漏洞防御
(1)更新到安全版本
Apache Tomcat 7.0.100
Apache Tomcat 8.5.51
Apache Tomcat 9.0.31
(2)关闭AJP服务,修改Tomcat配置文件Service.xml,注释掉<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
(3)配置ajp配置中的secretRequired跟secret属性来限制认证
三、弱口令&war远程部署
漏洞复现
(1)部署
(2)访问8080
(3)进入管理后台
需要账号密码,输入弱口令tomcat/tomcat,也可以爆破,进入后台
(4)制作war包马
jar -cvf test.war shell.jsp #把冰蝎马打包成war
(5)上传test.war
上传成功
(6)连接冰蝎