乌云(WooYun.org)历史漏洞查询---http://wy.zone.ci/
乌云 Drops 文章在线浏览--------http://drop.zone.ci/
2012-08-06: 细节已通知厂商并且等待厂商处理中 2012-08-06: 厂商已经确认,细节仅向厂商公开 2012-08-16: 细节向核心白帽子及相关领域专家公开 2012-08-26: 细节向普通白帽子公开 2012-09-05: 细节向实习白帽子公开 2012-09-20: 细节向公众公开
这是个常见的问题,但很容易忽视它危害,今天发现乐视网的此问题比较典型,说明总结一下。
首先看一个以前典型的case: WooYun: 去哪儿任意文件读取(基本可重构该系统原工程) 或哥这篇粗糙的文章:http://hi.baidu.com/shine%5F%C9%C1%C1%E9/blog/item/7d7d57445f523a4384352468.html
通常在做反向代理、负载均衡或集群等情况时,都会使用两种或多种不同web容器搭配使用(特别在j2ee应用上体现更明显(如:Ngnix + Tomcat ;Apache + Tomcat)),由于配置不当,造成上述问题,昨天发现此问题的站点就不下上百个,今天发现你们应用尤其鲜明:
首先看这个:http://enp.letv.com/WEB-INF/web.xml (指向同一ip的域名比较多哦!所以很多Struts2远程代码执行的漏洞都在这一ip找到的!这个有人提醒给你们的,好象你们不是很重视!)
可浏览web.xml是会导致整个应用结构暴露的,这是j2ee的一个特点,同时加上使用的MVC模式的开源常用框架,所以文件读取尤其简单了,各个配置文件被读取也简单了。http://enp.letv.com/WEB-INF/classes/struts.xmlhttp://enp.letv.com/WEB-INF/classes/struts_manager.xmlhttp://enp.letv.com/WEB-INF/classes/struts_user.xmlhttp://enp.letv.com/WEB-INF/classes/struts_ad.xmlhttp://enp.letv.com/WEB-INF/classes/application_config.xml
其他文件及敏感信息不一一列举了,看个你们防Struts2远程代码执行的一个拦截器源代码:
EnpFilter.java
package com.letv.enp.web;import java.io.IOException;import java.util.Map;import java.util.Set;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class EnpFilter extends HttpServlet implements Filter{ private static final long serialVersionUID = -3887911983201144807L; public final void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletResponse response = (HttpServletResponse)servletResponse; if (request.getParameterMap().size() > 0) { Set set = request.getParameterMap().keySet(); boolean auth = false; for (String key : set) { if ((key.indexOf("#") > -1) || (key.indexOf("\\u0023") > -1) || (key.indexOf("\\43") > -1) || (key.indexOf("\\043") > -1)) { auth = true; break; } } if (auth) { response.sendRedirect("http://enp.letv.com"); return; } } chain.doFilter(servletRequest, servletResponse); } public void init(FilterConfig arg0) throws ServletException { }}
对两种带有“#”关键编码方式的拦截,喜欢绕过的童子们,绕绕看!
接下再看两处:第一个:http://220.181.117.74/letv/WEB-INF/web.xml这个就不多说了,懒得去看了!
重点说接下来的这个:http://passport.letv.com/另个造成这一问题的典型case,这个直接是目录浏览。当看到这个应用的域名时,哥瞬间被战术性击倒,相信你们的系统架构师也同样如此。
统一登录应用,它暴露的的东西就太多了(重复一句,在j2ee应用尤其明显),其他就不多说了,只说j2ee暴露的典型问题。
http://passport.letv.com/WEB-INF/web.xml查看配置文件,发现这一应用跟域名显示的一样,比较庞大。
如:与人人的接口:
以及memcached众多配置信息(多插一句,发现都喜欢用阿里的memcached规范,真有这么好?):
(其他源代码及敏感信息就不列举了(数据库使用JNDI连接池,太坏了!不过除非远程数据库,其他的也没什么用,源代码也难得去看了),所以危害性是应用程序结构或整体架构的暴露!)
至少禁止掉j2ee应用重要的WEB-INF目录!(同一部署人员的所有应用都检查一下,应该还有不少!) 正好奥运会期间,加上你们公司的服务正好是这个方向的,乐视网送台电视机给哥吧!
危害等级:高
漏洞Rank:15
确认时间:2012-08-06 16:45
非常感谢shine挖掘,此问题已经转交给我们业务负责人。我们会尽快修改。谢谢。
暂无