漏洞复现之CVE-2017-12616

CVE-2017-12616是Tomcat中间件的一个漏洞,此漏洞可以造成源码泄露。网上有很多人分析CVE-2017-12615漏洞(Tomcat任意文件上传漏洞),但是很少有人分析CVE-2017-12616。漏洞范围是Tomcat 7.0.0 - 7.0.80版本,虽然网上很少有人提操作系统的要求,但是我在复现的过程中发现只有Windows操作系统能够复现成功。

漏洞说明

用户在配置了virtual webapp的情况下,以 xxx.jsp. 的形式访问jsp文件可以获得源码。比如用户在server.xml中通过可以如下配置配置virtual webapp

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
			<Context path="/test" docBase="D:\vuln\apache-tomcat-7.0.77\webapps\examples" debug="1" reloadable="true">
            <Resources className="org.apache.naming.resources.VirtualDirContext" extraResourcePaths="/=D:\vuln\leaked" />
        </Context>

上述配置的意思翻译成人话就是当你在URL中访问“/test”路径时会被映射到物理路径“D:\vuln\apache-tomcat-7.0.77\webapps\examples”,并且当“/examples”路径中没有你要访问的文件时会去“D:\vuln\leaked”路径中寻找。这个时候你通过“/test/test.jsp.”访问“D:\vuln\leaked”中的“test.jsp”文件时会看到他的源码(仅限于D:\vuln\leaked路径):
源码

漏洞分析

至于Tomcat源码下载以及调试配置可以参考这篇文章,中间可能会出现org.apache.catalina.startup.Bootstrap的问题,百度下或者重新下载下以来Maven中的依赖(先clean后install)然后重启下应该就解决了。具体的调试过程如下:

  1. 首先在org/apache/naming/resources/VirtualDirContext.java中打一个条件断点(条件为name.contains(‘test.jsp.’)):
    1
  2. 步入到doLookup方法中
    在这里插入图片描述
  3. 接着步入到file()中,可以看到file通过调用父类的file,继续跟进:
    在这里插入图片描述
  4. 来到了父类FileDirContext.java的file方法中,在这个方法中首先new了一个File类(在File.java中定义),然后通过这个类的exists方法判断文件是否存在,在跟进file.exists方法前可以先通过Evaluate Expression工具查看下file.exists的返回值,可以看到返回值为false所以没有继续步入的必要了,直接单步跳过。注意时此时文件的路径是“\exapmles”,这刚好对应了对配置文件的解释。
    在这里插入图片描述
  5. 如下图所示可以看到FileDirContext.java中的file方法返回null到第二步的doLookup方法中,并且通过步骤中的图片可以看到如果file为null,doLookup方法也会返回null到virtualDirContext的file方法中
    在这里插入图片描述
  6. 回到VirtualDirContext的file方法后,首先会判断是否为空,如果不为空就返回文件,但
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值