tomcat漏洞CVE-2017-12615原理与复现

admin 2021年12月14日16:00:50评论939 views字数 2024阅读6分44秒阅读模式

CVE-2017-12615对应的漏洞为任意文件写入,主要影响的是Tomcat的7.0.0-7.0.81这几个版本

漏洞原理

由于配置不当(非默认配置),将配置文件conf/web.xml中的readonly设置为了 false,导致可以使用PUT方法上传任意文件,但限制了jsp后缀的上传

根据描述,在 Windows 服务器下,将 readonly 参数设置为 false 时,即可通过 PUT 方式创建一个 JSP 文件,并可以执行任意代码

通过阅读 conf/web.xml 文件,可以发现,默认 readonly 为 true,当 readonly 设置为 false 时,可以通过 PUT / DELETE 进行文件操控

tomcat漏洞CVE-2017-12615原理与复现


漏洞复现

这里使用vuluhub的docker进行漏洞复现,这里就不详细介绍环境搭建了

首先进入CVE-2017-12615的docker环境

sudo docker-compose up -d
docker ps //查看docker环境是否启动成功

tomcat漏洞CVE-2017-12615原理与复现


这里首先进入docker里查看一下web.xml的代码,可以看到这里readonly设置为false,所以存在漏洞

sudo docker exec -ti ec bash    //进入docker容器
cat conf/web.xml | grep readonly

tomcat漏洞CVE-2017-12615原理与复现


访问下8080端口,对应的是Tomcat 8.5.19


tomcat漏洞CVE-2017-12615原理与复现


在8080端口进行抓包,这里发现是一个GET方法


tomcat漏洞CVE-2017-12615原理与复现



这里首先测试一下,改为PUT方法写入一个test.txt,这里看到返回201,应该已经上传成功了

PUT /test.txt HTTP/1.1

testpoc

tomcat漏洞CVE-2017-12615原理与复现


这里进入docker查看一下已经写入成功了

cd /usr/local/tomcat/webapps/ROOT
ls

tomcat漏洞CVE-2017-12615原理与复现


之前说过,使用PUT方法上传任意文件,但限制了jsp后缀的上传,这里首先使用PUT方法直接上传一个冰蝎的jsp上去,发现返回的是404,应该是被拦截了


tomcat漏洞CVE-2017-12615原理与复现


这里就需要进行绕过,这里绕过有三种方法

1.Windows下不允许文件以空格结尾
以PUT /a001.jsp%20 HTTP/1.1上传到 Windows会被自动去掉末尾空格

2.Windows NTFS流
Put/a001.jsp::$DATA HTTP/1.1

3. /在文件名中是非法的,也会被去除(Linux/Windows)
Put/a001.jsp/http:/1.1

首先使用%20绕过。我们知道%20对应的是空格,在windows中若文件这里在jsp后面添加%20即可达到自动抹去空格的效果。例如:"phpinfo.php "Windows会自动去掉末尾的空格变成"phpinfo.php"

这里看到返回201已经上传成功了

tomcat漏洞CVE-2017-12615原理与复现


进入docker查看一下,确认是上传上去了


tomcat漏洞CVE-2017-12615原理与复现


第二种方法为在jsp后缀后面使用/,因为/在文件名中是非法的,在windows和linux中都会自动去除。根据这个特性,上传/ice1.jsp/,看到返回201


tomcat漏洞CVE-2017-12615原理与复现


进入docker查看发现已经上传成功


tomcat漏洞CVE-2017-12615原理与复现


第三种方法就是使用Windows NTFS流,那么什么是NTFS流呢?

流文件,即NTFS交换数据流(alternate data streams,简称ADS),是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以有许多非主文件流寄宿在主文件流中。它使用资源派生来维持与文件相关的信息,虽然我们无法看到数据流文件,但是它却是真实存在于我们的系统中的。创建一个数据交换流文件的方法很简单,命令为“宿主文件:准备与宿主文件关联的数据流文件”。

这是一个全新的概念,但是在NTFS诞生之时就早已有之,我们平时也接触到了,但是并不知道是流文件在起作用,那么,比如我们下载个程序,下载完成后,运行他会提示一个对话框要不要运行他,还有一个复选框,“以后都不用提示了”。这个就是流文件起的作用,如果我们删除他的流文件,这个对话框就不会再提示了。但是,流文件,在Windows中是没有提供命令和方法去操作他,我们看不到,也无法修改,不过微软的Sysinternals工具包中的streams程序专门提供了对流文件的操作,另外ARK软件也提供了相关功能,但仅仅是让你看到这个文件的存在以及删除这个文件,一共2个功能。

那么这里我们用到NTFS文件系统的存储数据流的一个属性DATA ,就是请求 a.asp 本身的数据,如果a.asp 还包含了其他的数据流,比如 a.asp:lake2.asp,请求 a.asp:lake2.asp::$DATA,则是请求a.asp中的流数据lake2.asp的流数据内容。

在jsp后面添加::$DATA,看到返回201,上传成功

tomcat漏洞CVE-2017-12615原理与复现

进入docker验证一下


tomcat漏洞CVE-2017-12615原理与复现


这里随便连接一个jsp即可拿到webshell


tomcat漏洞CVE-2017-12615原理与复现


来源:先知社区


tomcat漏洞CVE-2017-12615原理与复现

欢迎加群,一起学习!(达到200人,需要加群主才可拉群)

tomcat漏洞CVE-2017-12615原理与复现

如果群满了,欢迎加小浪,拉你入群

原文始发于微信公众号(衡阳信安):tomcat漏洞CVE-2017-12615原理与复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月14日16:00:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   tomcat漏洞CVE-2017-12615原理与复现http://cn-sec.com/archives/677135.html

发表评论

匿名网友 填写信息