当前位置:WooYun(白帽子技术社区) >> java >> j2ee分层结构在某些场景下的缺陷及相关漏洞的详细描述后的定义

j2ee分层结构在某些场景下的缺陷及相关漏洞的详细描述后的定义

shine (shield) | 2012-12-17 16:20

//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目录的正则绕过(测试一个日本站点时,发现了目前唯一的案利。)

另外,这个问题多思考一下,信息量很大,我没回答他,如图:)


1.png






好吧!回来说正题,如果能访问到WEB-INF目录,如何在MVC分层场景中体现它的缺陷了?


看下面:

  
首先访问web.xml文件,它是一把钥匙,先看图:



MVC模式结构图,如图:


2.jpg




垂直拉深细化一下(因为现在分层没有标准,所以这里举个常例),如图:


3.png



再次拉深细化一下,如图:


4.png


如果没看明白,那就看以前一些实际一层层地剥离渗透的案例吧!

web.xml配置加载一些框架和插件以及相关配置文件的路径,如图:




知道了访问控制层,去找所有访问链接很难?


相关案例:WooYun: 去哪儿任意文件读取(基本可重构该系统原工程)


,如图:


5.png




去遍历大型站点应用架构:


WooYun: 百度某应用beidou(北斗)架构遍历!






查看类文件的引用路径特点,读取整站核心java代码。结合显示、控制、业务层、数据持久层的分层特点,找逻辑、sql注射、XSS等相关,不是很容易吗?


,如图:



6.png


7.jpg





看到有些厂商对这个漏洞等级定义,居然和一个url跳转及普通的信息泄露(如:phpinfo.php)放在一起,混为一谈,着实有点问题,可能是缺少这一方面的认识!


它确实是个信息泄露,只是泄露得有点多了!




漏洞等级评定应为:中 (如果应用结构比较复杂(架构相对大),危害性就更高点。)



MVC分层结构思想,也不只是在j2ee中引用到。


那么,如果是这样一个场景,Nginx + IIS,.net同样能够访问到web.config,http://xxx.xxx.xxx/web.config,会是同样的严重吗?


答案:没有j2ee表现这么明显!




  //过程虽好,但周期成本太高了啊!

分享到:
  1. 1#
    回复此人 感谢
    风萧萧 (但是爱上了,第一步是失去自己,第二步就是失去你的爱) | 2012-12-17 16:23

    先顶后看

  2. 2#
    回复此人 感谢
    小胖胖要减肥 | 2012-12-17 16:38

    可惜不懂java 不会编程

  3. 3#
    回复此人 感谢
    小胖胖要减肥 | 2012-12-17 17:03

    @xsser 给加个精

  4. 4#
    回复此人 感谢
    xsser (十根阳具有长短!!) | 2012-12-17 17:05

    乌云怎么感谢不了10次?

  5. 5#
    回复此人 感谢
    小胖胖要减肥 | 2012-12-17 17:08

    @xsser 你直接帮她刷库不就好了 难道没人之前感谢过10次?

  6. 6#
    回复此人 感谢
    neal | 2012-12-17 17:37

    作为一个java程序员 深知 此问题会带来的后果,完完全全裸体了.

  7. 7#
    回复此人 感谢
    hongygxiang (屌丝,纯屌!) | 2012-12-17 17:42

    虽然看不懂java 但是依然顶下楼主的屁眼。

  8. 8#
    回复此人 感谢
    墨水心_Len | 2012-12-17 18:06

    不懂JAVA,但明白是啥个意思了。顶!

  9. 9#
    回复此人 感谢
    小黑要低调 | 2012-12-17 22:06

    谁能帮我解释下为什么那么多站要把两套系统放一块?tomcat在那应该叫web容器还是叫应用服务器?好像有听说过一直到tomcat7才能算个轻量级的应用服务器,如果算web容器的话,那干嘛不全部用php,java的优势貌似不在这上面啊。
    求指点。。。。

  10. 10#
    回复此人 感谢
    GaRY | 2012-12-18 09:49

    对本文中涉及到软件工程和开发相关知识,特别是j2ee的分层,框架的关系(楼主混淆了MVC和企业级开发分层的关系),分层和WEB-INF本身这个目录的关系(WEB-INF和是否分层本身无关,只是java 容器存放webapp的其中一个目录结构,并不像楼主所说“这是j2ee一些分层思想所致”)。。观点很不相同。。
    不过对于文中关于java的配置文件泄漏能导致的后果基本都给出了详细说明,这一点上还是比较赞同此文章的

  11. 11#
    回复此人 感谢
    shine (shield) | 2012-12-18 10:23

    @GaRY  个人觉得这目录存在就是这种思想产物,你还能在其他地方找到与之类似的目录吗?  然后你再仔细看看一些文件或目录的结构

    另外,图画得确实有问题,因为能在这里直观点,包含更多信息,而不是表达什么框架的关系

    ^-^  与GaRY牛理解可能不一样,在这里注重表达一些东西

  12. 12#
    回复此人 感谢
    xsser (十根阳具有长短!!) | 2012-12-18 10:37

    @GaRY @shine 安全好玩儿的地方就在于每个人都有自己的视角和理解然后还能找到安全漏洞

  13. 13#
    回复此人 感谢
    GaRY | 2012-12-18 10:39

    @shine WEB-INF是java web app的标准的一部分,就像是ios的app要求你要有plist,android的app要求你有一个固定xml一样。这个是app本身定的标准。至于你app是用mvc,还是用event drivern还是其他模式去开发,并不强求。这是一个先后问题,和分层并无关系。

    至于分层那块,我也知道你是为了表达配置文件中包含的内容很多。但是对分层这块理解偏差较多。。。建议楼主可以google下“企业级开发分层+MVC+区别”以及“三层架构+五层架构”.

  14. 14#
    回复此人 感谢
    shine (shield) | 2012-12-18 10:58

    @GaRY 。。。  ,能不能不要用固有知识去反驳我对这个问题描述采取的方式。  好吧,需要时去google

  15. 15#
    回复此人 感谢
    GaRY | 2012-12-18 11:03

    @shine 没有反驳你文章中提到的危害性。但是对于涉及到的知识点歧义还是需要解释下的,毕竟是公开的paper,能够对所有引用的知识能够精准描述不让大家走弯路是最好了:)

  16. 16#
    回复此人 感谢
    Jannock (what?) | 2012-12-18 11:07

  17. 17#
    回复此人 感谢
    空虚浪子心 | 2012-12-18 17:12

    @GaRY 说的对,“WEB-INF”这个和J2EE分层架构没关系。
    但是确实有很多网站,在做映射静态文件时,把WEB-INF映射出来了。
    这是静态资源映射的一个安全问题。
    但是文中提到分层架构导致SQL注入等漏洞很容易被找出来,这一点我认可。
    我突然想起来已经被遗忘很久的一片文章http://safe.it168.com/ss/2007-09-06/200709060953563.shtml

  18. 18#
    回复此人 感谢
    shine (shield) | 2012-12-18 17:20

    @空虚浪子心  kxlzx牛你终于来了,膜拜一下你!哈哈!

  19. 19#
    回复此人 感谢
    wefgod (求大牛指点) | 2013-04-25 15:56

    洞主果然很熟悉开发啊!

  20. 20#
    回复此人 感谢
    wefgod (求大牛指点) | 2013-04-25 16:04

    其实我比较认同说WEB-INF算是JAVAWEB的一部分。不管是否分层,这货都必须有……

  21. 21#
    回复此人 感谢
    gniq | 2013-04-25 19:51

    先顶一个,看概述给力

  22. 22#
    回复此人 感谢
    疯子 (世人笑我太疯癫,我笑世人看不穿。) | 2013-04-25 20:05

    顶起了!!!基友一生一起走!

  23. 23#
    回复此人 感谢
    Thanks (freebuF资深屌丝) | 2013-04-25 23:07

    才看到这个帖子,我只能说楼主好能扯。。。
    开发一般把资源文件放在webroot下面,页面文件放在WEB-INF目录下头,这样使得页面文件一定需要映射(转发)才可访问,提高页面安全性,设计初衷就在此,同@GaRY所说。
    跟分层结构有啥关系?
    楼主只是想说明java配置文件的重要性么,长篇大论写这么多无关内容

  24. 24#
    回复此人 感谢
    wefgod (求大牛指点) | 2013-04-26 09:13

    那么,如果是这样一个场景,Nginx + IIS,.net同样能够访问到web.config,http://xxx.xxx.xxx/web.config,会是同样的严重吗?


    答案:没有j2ee表现这么明显!

    一般来说.NET的数据库信息有很大部分都是写在WEB.CONFIG呢,如果开了外连,那能干嘛就不知道咯

  25. 25#
    回复此人 感谢
    wefgod (求大牛指点) | 2013-04-26 09:14

    @Thanks 洞主在教我们如何从WEB-INF文件夹里面获取到相关的信息……

添加新回复

登录 后才能参与评论.

WooYun(白帽子技术社区)

网络安全资讯、讨论,跨站师,渗透师,结界师聚集之地

登录