攻擊JavaWeb應用————7、Server篇(上)

FLy_鵬程萬里發表於2018-05-18

java應用伺服器


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

常見的Server概述

常見的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的目錄就行了。
  enter image description here

部署完成後啟動進入各個Server的後臺:

enter image description here

構建WebShell war檔案

1、開啟Myeclipse新建Web專案
2、把jsp放到WebRoot目錄下
3、匯出專案為war檔案

enter image description here

Tomcat


Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP 程式的首選。

Tomcat版本

Tomcat主流版本:5-6-7,最新版Tomcat8剛釋出不久。Tomcat5較之6-7在檔案結構上有細微的差異,6-7-8沒有大的差異。最新版的Tomcat8主要新增了:Servlet 3.1, JSP 2.3, EL 3.0 and Web Socket 1.0支援。

版本詳情說明:http://tomcat.apache.org/whichversion.html

結構目錄:

Tomcat5:

Bin、common、conf、LICENSE、logs、NOTICE、RELEASE-NOTES、RUNNING.txt、Server、shared、Temp、webapps、work

Tomcat6-8:

Bin、conf、lib、LICENSE、logs、NOTICE、RELEASE-NOTES、RUNNING.txt、temp、webapps、work

關注conf和webapps目錄即可。conf目錄與非常重要的tomcat配置檔案比如登入帳號所在的tomcat-users.xml;域名繫結目錄、埠、資料來源(部分情況)、SSL所在的server.xml;資料來源配置所在的context.xml檔案,以及容器初始化呼叫的web.xml。

原始碼下載:

Tomcat6:http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_18/

Tomcat7:http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/

Tomcat預設配置

1、tomcat-users.xml

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

配置詳解:http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.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的事情。

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進行訪問。

enter image description here

Tips:
當訪問xxxx.com找不到預設管理地址怎麼辦?
1:http://xxxx.com/manager/html 檢視是否存在
2:ping xxxx.com 獲取其IP地址,在訪問:http://111.111.111.111/manager/html
3:遍歷server.xml配置讀取配置

Tomcat口令爆破

Tomcat登入比較容易爆破,但是之前說過預設不對其做任何配置的時候爆破是無效的。

Tomcat的認證比較弱,Base64(使用者名稱:密碼)編碼,請求:” /manager/html/”如果響應碼不是401(未經授權:訪問由於憑據無效被拒絕。)即登入成功。

conn.setRequestProperty("Authorization", "Basic " + new BASE64Encoder().encode((user + ":" + pass).getBytes
()));

Tomcat漏洞

Tomcat5-6-7安全性並不完美,總是被挖出各種稀奇古怪的安全漏洞。在CVE和Tomcat官網也有相應的漏洞資訊詳情。

怎樣找到Tomcat的歷史版本:

http://archive.apache.org/dist/tomcat/

Tomcat歷史版本漏洞?

Tomcat官網安全漏洞公佈:

Apache Tomcat - Apache Tomcat 5 漏洞: http://tomcat.apache.org/security-5.html

Apache Tomcat - Apache Tomcat 6 漏洞: http://tomcat.apache.org/security-6.html

Apache Tomcat - Apache Tomcat7 漏洞: http://tomcat.apache.org/security-7.html

CVE 通用漏洞與披露: http://cve.scap.org.cn/cve_list.php?keyword=tomcat&action=search&p=1

Cve details :
http://www.cvedetails.com/product/887/Apache-Tomcat.html?vendor_id=45 http://www.cvedetails.com/vulnerability-list/vendor_id-45/product_id-887/Apache-Tomcat.html

Sebug: http://sebug.net/appdir/Apache+Tomcat

怎樣發現Tomcat有那些漏洞?

1、通過預設的報錯頁面(404、500等)可以獲取到Tomcat的具體版本,對照Tomcat漏洞。

2、利用WVS之類的掃描工具可以自動探測出對應的版本及漏洞。

怎樣快速確定是不是Tomcat?

請求響應為:Server:Apache-Coyote/1.1 就是tomcat了。

Tomcat稀奇古怪的漏洞:

Tomcat的安全問題被爆過非常多,漏洞統計圖:

enter image description here

有一些有意思的漏洞,比如:Insecure default password CVE-2009-3548(影響版本: 6.0.0-6.0.20)

The Windows installer defaults to a blank password for the administrative user. If this is not changed during the install process, then by default a user is created with the name admin, roles admin and manager and a blank password.在windows安裝版admin預設空密碼漏洞,其實是使用者安裝可能偷懶,沒有設定密碼…

enter image description here

這樣的問題在tar.gz和zip包裡面根本就不會存在。有些漏洞看似來勢洶洶其實雞肋得不行如:Unexpected file deletion in work directory CVE-2009-2902 都已經有deploy許可權了,鬧個啥。

Tomcat非常嚴重的漏洞(開啟Tomcat security-5、6、7.html找):

Important: Session fixation CVE-2013-2067 (6.0.21-6.0.36) 
Important: Denial of service CVE-2012-3544 (6.0.0-6.0.36) 
Important: Denial of service CVE-2012-2733 (6.0.0-6.0.35) 
Important: Bypass of security constraints CVE-2012-3546 (6.0.0-6.0.35) 
Important: Bypass of CSRF prevention filter CVE-2012-4431 (6.0.30-6.0.35) 
Important: Denial of service CVE-2012-4534 (6.0.0-6.0.35) 
Important: Information disclosure CVE-2011-3375 (6.0.30-6.0.33) 
Important: Authentication bypass and information disclosure CVE-2011-3190 (6.0.0-6.0.33) 
           (………………………………………………….) 
Important: Directory traversal CVE-2008-2938 (6.0.18) 
Important: Directory traversal CVE-2007-0450 (6.0.0-6.0.9)

如果英文亞歷山大的同學,對應的漏洞資訊一般都能夠在中文的sebug找到。

Sebug:

enter image description here

CVE 通用漏洞與披露:

enter image description here

Resin


Resin是CAUCHO公司的產品,是一個非常流行的application server,對servlet和JSP提供了良好的支援,效能也比較優良,resin自身採用JAVA語言開發。

Resin比較有趣的是預設支援PHP! Resin預設通過Quercus 動態的去解析PHP檔案請求。(Resin3也支援,詳情:http://zone.wooyun.org/content/2467

Resin版本

Resin主流的版本是Resin3和Resin4,在檔案結構上並沒有多大的變化。Resin的速度和效率非常高,但是不知怎麼Resin似乎對Quercus 更新特別多。

4.0.x版本更新詳情:http://www.caucho.com/resin-4.0/changes/changes.xtp

3.1.x版本更新詳情:http://www.caucho.com/resin-3.1/changes/changes.xtp

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>

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

enter image description here

雖說是MD5+Base64加密但是怎麼看都有點不對,下載Resin原始碼找到加密演算法:

package com.caucho.server.security.PasswordDigest

enter image description here

這加密已經沒法反解了,所以就算找到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

Resin3:

enter image description here

Resin4:

enter image description here

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: 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. 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". The application should now be deployed on the server. In a few moments, all the servers in the cluster will have the webapp.

enter image description here

Resin4敢不敢再沒節操點?預設HTTPS是沒有開的。需要手動去開啟:

conf

esin.properties

# https : 8443

預設8443埠是關閉的,取消這一行的註釋才能夠使用HTTPS方式訪問後臺才能夠Web Deploy war。

enter image description here

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

Resin漏洞

Resin相對Tomcat的安全問題來說少了很多,Cvedetails上的Resin的漏洞統計圖:

enter image description here

Cvedetails統計詳情: http://www.cvedetails.com/product/993/Caucho-Technology-Resin.html?vendor_id=576

Cvedetails漏洞詳情: http://www.cvedetails.com/vulnerability-list/vendor_id-576/product_id-993/Caucho-Technology-Resin.html

CVE 通用漏洞與披露: http://cve.scap.org.cn/cve_list.php?keyword=resin&action=search&p=1

Resin3.1.3:

enter image description here

Fixed BugList: http://bugs.caucho.com/changelog_page.php

Weblogic


WebLogic是美國bea公司出品的一個application server確切的說是一個基於Javaee架構的中介軟體,BEA WebLogic是用於開發、整合、部署和管理大型分散式Web應用、網路應用和資料庫應用的Java應用伺服器。將Java的動態功能和Java Enterprise標準的安全性引入大型網路應用的開發、整合、部署和管理之中。

Weblogic版本

Oracle簡直就是企業應用軟體終結者,收購了Sun那個土鱉、Mysql、BAE Weblogic等。BAE在2008初被收購後把BAE終結在Weblogic 10。明顯的差異應該是從10.x開始到最新的12c。這裡主要以Weblogic9.2和最新的Weblogic 12c為例。

Weblogic預設配置

Weblogic預設埠是7001,Weblogic10g-12c預設的管理後臺是:http://localhost:7001/console

Weblogic10 以下預設後臺地址是:http://192.168.80.1:7001/console/login/LoginForm.jsp

管理帳號是在建立Weblogic域的時候設定的。

enter image description here

Weblogic控制檯:

enter link description here

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

WebLogic中的"域"?

域環境下可以多個 WebLogic Server或者WebLogic Server 群集。域是由單個管理伺服器管理的 WebLogic Server例項的集合。 Weblogic10++域預設是安裝完成後由使用者建立。帳號密碼也在建立域的時候設定,所以這裡並不存在預設密碼。當一個域建立完成後配置檔案和Web應用在:Weblogic12user_projectsdomains”域名”。

Weblogic 預設安全策略

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_domainserversAdminServersecurityoot.properties 

(base_domain是預設的”域名”)。

boot.properties:

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/349http://www.blogjava.net/midea0978/archive/2006/09/07/68223.html

2、Weblogic資料來源(JNDI)

Weblogic如果有配置資料來源,那麼預設資料來源配置檔案應該在:

Weblogic12user\_projectsdomainsase\_domainconfigconfig.xml

enter image description here

Weblogic獲取Webshell 

enter image description here

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

Websphere


WebSphere 是 IBM 的軟體平臺。它包含了編寫、執行和監視全天候的工業強度的隨需應變 Web 應用程式和跨平臺、跨產品解決方案所需要的整個中介軟體基礎設施,如伺服器、服務和工具。

Websphere版本

Websphere現在主流的版本是6-7-8,老版本的5.x部分老專案還在用。GetShell大致差不多。6、7測試都有“預設使用者標識admin登入”,Websphere安裝非常麻煩,所以沒有像之前測試Resin、Tomcat那麼細測。

Websphere預設配置

預設的管理後臺地址(注意是HTTPS): https://localhost:9043/ibm/console/logon.jsp

預設管理密碼:

1、admin (測試websphere6-7預設可以直接用admin作為使用者標識登入,無需密碼) 
2、websphere/ websphere
3、system/ manager

預設埠:

管理控制檯埠 9060
管理控制檯安全埠 9043
HTTP傳輸埠 9080
HTTPS傳輸埠 9443
載入程式埠 2809
SIP埠 5060
SIP安全埠 5061
SOAP聯結器埠 8880
SAS SSL ServerAuth埠 9401
CSIV2 ServerAuth 偵聽器埠 9403
CSIV2 MultiAuth 偵聽器埠 9402
ORB偵聽器埠 9100
高可用性管理通訊埠(DCS) 9353
服務整合埠 7276
服務整合安全埠 7286
服務整合器MQ互操作性埠 5558
服務整合器MQ互操作性安全埠 5578

8.5安裝的時候建立密碼: 

enter link description here

Websphere8.5啟動資訊:

enter image description here

Websphere8.5登入頁面: https://localhost:9043/ibm/console/logon.jsp

enter link description here

Websphere8.5 WEB控制檯:

enter image description here

Websphere6-7預設控制檯地址也是: http://localhost:9043/ibm/console,此處用admin登入即可。

enter image description here

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是不行的,請勿霸王硬上弓。其次是在完成部署後記得儲存啊親,不然無法生效。

enter image description here

Websphere8.5 GetShell

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

enter image description here

注意:

如果在Deploy低版本的Websphere的時候可能會提示web.xml錯誤,這裡其實是因為支援的JavaEE版本限制,把war包裡面的web.xml改成低版本就行了,如把app2.5改成2.3。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

GlassFish


GlassFish是SUN的產品,但是作為一隻優秀的土鱉SUN已經被Oracle收購了,GlassFish的效能優越對JavaEE的支援自然最好,最新的Servlet3.1僅GlassFish支援。

GlassFish版本

GlassFish版本比較低調,最高版本GlassFish4可在官網下載: http://glassfish.java.net/ 。最新4.x版剛釋出不久。所以主流版本應當還是v2-3,3應該更多。支援php(v3基於Quercus),jRuby on Rails 和 Phobos等多種語言。

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。

預設資料來源:

enter image description here

GlassFish GetShell 

enter image description here

相關文章