Jump to content

0x00 前言本文記錄從零開始搭建Zimbra漏洞調試環境的細節。

0x01 簡介本文將要介紹以下內容:

Zimbra服務器開啟調試模式

本地使用IDEA進行遠程調試

常用知識

0x02 Zimbra服務器開啟調試模式相關資料:

https://github.com/Zimbra-Community/zimbra-tools/blob/master/java-debug-zimbra-intellij-ide.md

詳細步驟如下:

1.停止Zimbra服務image.png

2.開啟調試模式image.png

此處先備份zmmailboxdmgr,再使用zmmailboxdmgr.unrestricted替換zmmailboxdmgr

3.添加調試信息image.png

注:

也可以直接修改/opt/zimbra/conf/localconfig.xml中的mailboxd_java_options屬性值

4.關閉防火牆image.png

5.重啟服務image.png

0x03 本地使用IDEA進行遠程調試1.下載jar文件本地使用IDEA進行遠程調試時,本地和遠程的代碼需要保持一致,也就是說,我們需要拿到zimbra相關的jar文件

zimbra文件位置:

/opt/zimbra/common/jetty_home/lib/

/opt/zimbra/common/jetty_home/lib/apache-jsp/

2.批量導入jar文件新建java工程,依次選擇File-Project Structure.在Libraries下選擇New Project Library-Java,設置為c:\zimbrajar\

3.添加斷點在External Libraries-zimbrajar下面打開.class文件,在合適的位置添加斷點

4.設置遠程調試參數頂部菜單欄選擇Add Configuration.在彈出的頁面中選擇Remote JVM Debug,填入遠程調試參數,參數示例:

image.png

使用的JDK選擇JDK 5-8

5.開啟Debug模式回到IDEA主頁面,選擇剛才的配置文件,點擊Debug圖標(快捷鍵Shift+F9)

如果遠程調試執行成功,斷點圖標會發生變化,增加一個對號

此時,Console頁面顯示如下:

image.png

0x04 常用知識Zimbra使用Jetty框架作為web容器

用戶在訪問jsp文件時,服務器先將JVM不認識的JSP文件解析成java文件,保存路徑為:/opt/zimbra/jetty_base/work/zimbra/jsp/org/apache/jsp/

每個jsp文件被成功訪問後,都會註冊一個JspServletWrapper實例,我們可以通過調試器查看request變量獲得所有已註冊的JspServletWrapper實例,也可以通過反射的方式以jsp文件的形式進行枚舉

jsp文件代碼示例:

image.png

整個反射的邏輯來自於跟踪調試的結果,實現邏輯不唯一,枚舉JspServletWrapper實例用到了ConcurrentHashMap枚舉

0x05 小結在我們搭建好Zimbra漏洞調試環境後,接下來就可以著手對漏洞和Jetty框架進行研究學習。

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...