环境安装,参考一条博客(https://www.jianshu.com/p/d8fbb4f4aa52)
或者是Docker安装:
安装docker
检查kernel内核是否在3.10以上:
uname -a
检查Device Mapper:
sudo grep device-mapper /proc/devices
确保apt能使用https方式并且CA证书已安装
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
卸载可能存在的旧版本
sudo apt-get remove docker docker-engine docker-ce docker.io
添加Docker官方的gpg密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
设置stable存储库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
更新apt
sudo apt-get update
安装最新版
sudo apt-get install -y docker-ce
停止docker服务:
sudo service docker stop
重启docker
systemctl daemon-reload sudo service docker start
查看docker信息
sudo docker info
进入docker
使用docker attach进入Docker容器:
创建一个守护态的Docker容器,然后使用docker attach命令进入该容器。
sudo docker run -itd ubuntu:14.04 /bin/bash
使用docker ps查看到该容器信息,接下来就使用docker attach进入该容器
sudo docker attach 15a853491341
进入到docker里面
可以加载对应的docker镜像
部署环境:
获取环境:
拉取镜像到本地
docker pull medicean/vulapps:t_tomcat_1
成功拉取镜像
启动环境
docker run -d -p 8080:8080 medicean/vulapps:t_tomcat_1
-p 8080:8080 前面的 8080 代表物理机的端口,可随意指定
环境配置成功:
只是CVE-2017-12615(tomcat任意文件上传)web.xml的配置需要修改一下
tomcat这个漏洞,需要允许tomcat进行PUT操作,修改 /conf/web.xml
添加只读为false
重启tomcat服务
为什么要加一个readonly属性为false:
web.xml文件中,已经注释的地方说明了默认情况下readonly是true,并且如果是true的话,那么PUT和DELETE方法是被拒绝的,因此如果手动将readonly选项开启为false,那么就能够通过PUT方法上传文件了
前期准备工作完成。
实操漏洞复现:
启动环境
访问 http://192.168.182.143:8080/抓去数据包
PUT直接不行
PUT /shell.jsp 与 PUT /shell.jsp/ 一个成功一个失败
查阅资料发现,原来default servlet只能处理静态文件,而处理jsp文件是jspservlet,但是只有defaultservlet
有PUT上传逻辑,解决的办法是通过构造特殊的后缀名来进行绕过,从而上传jsp木马。
经过验证,可以在文件名后面添加斜杠 / 或者 %20来进行绕过,应为在windows下,%20(空格)和 / 都是不合法文件名。
查看文件上传到服务器Root目录下
上传一个利用的命令执行脚本:
http://192.168.182.143:8080/shell.jsp?password=secfree&&command=ls
http://192.168.182.143:8080/shell.jsp?password=secfree&&command=cat%20/etc/passwd
https://github.com/iBearcat/CVE-2017-12615(poc)
修复方案:
1、配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启tomcat
注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。
2、根据官方补丁升级最新版本
总结:
1、注意需要配置readonly为false。
2、put文件的时候需要加/ 或者%20 绕过。
网友评论