openstack上传镜像失败_Tomcat任意文件上传(复现)CVE-2017-12615

f136cd5d8eecef7f8d7f136efbdf777b.png

环境安装,参考一条博客(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 http://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里面

6809be17d9a64e7b04fdd99e2977424a.png

可以加载对应的dock 儿镜像

bbae40e3cdf0f619aad2d2967ffbefd5.png

部署环境:

获取环境:

拉取镜像到本地

docker pull medicean/vulapps:t_tomcat_1

成功拉取镜像

f7f753394c1fe7b82ebb5c12ef95d0b6.png

启动环境

docker run -d -p 8080:8080 medicean/vulapps:t_tomcat_1

-p 8080:8080 前面的 8080 代表物理机的端口,可随意指定

f25d4b310c292ffd6e48b4cec3286bed.png

环境配置成功:

1de01b39f686a40c45de955ec229fe1c.png

只是CVE-2017-12615(tomcat任意文件上传)web.xml的配置需要修改一下

tomcat这个漏洞,需要允许tomcat进行PUT操作,修改 /conf/web.xml

添加只读为false

245767364a25bd03dc2e51d10822273b.png

重启tomcat服务

b78faac37fd27d3ac1e7ef9160c76c27.png

为什么要加一个readonly属性为false:

web.xml文件中,已经注释的地方说明了默认情况下readonly是true,并且如果是true的话,那么PUT和DELETE方法是被拒绝的,因此如果手动将readonly选项开启为false,那么就能够通过PUT方法上传文件了

前期准备工作完成。
实操漏洞复现:

启动环境

223f32481624761901ce526b7017e919.png

http://192.168.182.143:8080/

c833b8e477a24edeb861e007d204a41e.png

访问 http://192.168.182.143:8080/抓去数据包

a1ae73586273bac4eaa98a7110f357bf.png

PUT直接不行

7215a9fa442f834234f7ef47d6740c44.png

PUT /shell.jsp 与 PUT /shell.jsp/ 一个成功一个失败

查阅资料发现,原来default servlet只能处理静态文件,而处理jsp文件是jspservlet,但是只有defaultservlet

有PUT上传逻辑,解决的办法是通过构造特殊的后缀名来进行绕过,从而上传jsp木马。

经过验证,可以在文件名后面添加斜杠 / 或者 %20来进行绕过,应为在windows下,%20(空格)和 / 都是不合法文件名。

142b64256bc1d09b37a66109653b145d.png

查看文件上传到服务器Root目录下

97f4d36393cc5fed10a7a53a1a2f23f7.png

上传一个利用的命令执行脚本:

f3be934f1d7cdec24ccda4c4a1ffd6ae.png

http://192.168.182.143:8080/shell.jsp?password=secfree&&command=ls

abb4cb290114abd85e86645664751aa6.png

http://192.168.182.143:8080/shell.jsp?password=secfree&&command=cat%20/etc/passwd

dc93660cb161a64699bbaccb00973235.png

https://github.com/iBearcat/CVE-2017-12615(poc)

修复方案:

1、配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启tomcat

注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。

2、根据官方补丁升级最新版本

总结:

1、注意需要配置readonly为false。

2、put文件的时候需要加/ 或者%20 绕过。

https://www.jianshu.com/u/bf0e38a8d400(简书主页)

https://zhuanlan.zhihu.com/c_178411142(知乎主页)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值