当前位置:WooYun(白帽子技术社区) >> java >> j2ee分层结构在某些场景下的缺陷及相关漏洞的详细描述后的定义
//PS:哥就知道管理员其实喜欢大家在www里发bug,然后在zone里描述定义总结,沉淀下来的这个过程!(个人觉得把这一坨放到java下的j2ee坑好点 @xsser ?而不是运维里!)首先,看看j2ee的特点:http://baike.baidu.com/view/1507.htm
j2ee大体系引入MVC模式思想,实现分层、模块化、组件化等
然后再看看MVC思想:http://baike.baidu.com/view/31.htm
重点强调分层思想,降低耦合度等(它强制性的使应用程序的输入、处理和输出分开)!
是个经典设计思想,但分得越细,它的问题就更突显,让你更容易找到敏感信息(简单来讲,不管这个分层有多复杂,它总会留有一条通道让你去遍历它,而且非常好找,这就是j2ee分层特点的缺陷所在)!来实际看看它的一些缺陷,才可能了解这个问题:
j2ee应用的部署文件内有个WEB-INF文件夹(这个受保护的文件夹,在设计之初就是个缺陷所在!就象你们做安全的人一样,就喜欢去绕一些你不让我干的事情,得手后其乐无穷。),通常情况下是不能通过jsp及Servlet容器去访问它的。但有些场景下情况就变了,能够访问到它,而且表现得让你很容易去攻击它(我想这是j2ee一些分层思想所致)!
http://baike.baidu.com/view/1745468.htm
WEB-INF目录下的敏感目录及文件:
classes目录(包含该应用核心的java类编译后的class文件及部分配置文件)
lib目录(所用框架、插件或组件的架包)
web.xml(重要的配置文件,它是开启攻击的一把钥匙,后面会讲到它)
以及其他自定义目录之文件
目前,有所知的三种主要场景,能够通过客户端访问到WEB-INF文件夹,主要是web服务器分层后造成的:http://xxx.xxx.xxx/WEB-INF/web.xml
(如:Ngnix + Tomcat、Apache + Tomcat等场景)
1、开启了目录浏览(这个就不多说了,如果连根目录都开启目录浏览...),如:
[link href="WooYun: 乐视网众多web容器配置失误,导致核心应用架构及敏感信息暴露"]WooYun: 乐视网众多web容器配置失误,导致核心应用架构及敏感信息暴露[/link]
2、外层web容器的一些解析漏洞,在此处可利用(最外层的web服务器自身缺陷),如:
http://sebug.net/vuldb/ssvid-60439
3、外层web容器配置错误(这是个典型,可能永远都存在的弹性漏洞!),如:
[link href="WooYun: 去哪儿任意文件读取(基本可重构该系统原工程)"]WooYun: 去哪儿任意文件读取(基本可重构该系统原工程)[/link]
http://hi.baidu.com/shine%5F%C9%C1%C1%E9/blog/item/7d7d57445f523a4384352468.html
这里面的本质问题简单描述是,如:Nginx + Tomcat ,Tomcat问Nginx:“我把身子交给了你,你如何能100%保护我呢?”,两个安全标准的冲突问题,Nginx没照顾到Tomcat的特点!
(
还有一些场景,如:保护WEB-INF目录的正则绕过(测试一个日本站点时,发现了目前唯一的案利。)
另外,这个问题多思考一下,信息量很大,我没回答他,如图:)好吧!回来说正题,如果能访问到WEB-INF目录,如何在MVC分层场景中体现它的缺陷了?
看下面:
首先访问web.xml文件,它是一把钥匙,先看图:MVC模式结构图,如图:
垂直拉深细化一下(因为现在分层没有标准,所以这里举个常例),如图:
再次拉深细化一下,如图:
如果没看明白,那就看以前一些实际一层层地剥离渗透的案例吧!
web.xml配置加载一些框架和插件以及相关配置文件的路径,如图:知道了访问控制层,去找所有访问链接很难?
相关案例:WooYun: 去哪儿任意文件读取(基本可重构该系统原工程)
,如图:去遍历大型站点应用架构:
WooYun: 百度某应用beidou(北斗)架构遍历!查看类文件的引用路径特点,读取整站核心java代码。结合显示、控制、业务层、数据持久层的分层特点,找逻辑、sql注射、XSS等相关,不是很容易吗?
,如图:看到有些厂商对这个漏洞等级定义,居然和一个url跳转及普通的信息泄露(如:phpinfo.php)放在一起,混为一谈,着实有点问题,可能是缺少这一方面的认识!
它确实是个信息泄露,只是泄露得有点多了!
漏洞等级评定应为:中 (如果应用结构比较复杂(架构相对大),危害性就更高点。)MVC分层结构思想,也不只是在j2ee中引用到。
那么,如果是这样一个场景,Nginx + IIS,.net同样能够访问到web.config,http://xxx.xxx.xxx/web.config,会是同样的严重吗?
答案:没有j2ee表现这么明显!
//过程虽好,但周期成本太高了啊!