0x00 前言本文記錄從零開始搭建Zimbra漏洞調試環境的細節。
0x01 簡介本文將要介紹以下內容:
◼Zimbra服務器開啟調試模式
◼本地使用IDEA進行遠程調試
◼常用知識
0x02 Zimbra服務器開啟調試模式相關資料:
https://github.com/Zimbra-Community/zimbra-tools/blob/master/java-debug-zimbra-intellij-ide.md
詳細步驟如下:
1.停止Zimbra服務
2.開啟調試模式
此處先備份zmmailboxdmgr,再使用zmmailboxdmgr.unrestricted替換zmmailboxdmgr
3.添加調試信息
注:
也可以直接修改/opt/zimbra/conf/localconfig.xml中的mailboxd_java_options屬性值
4.關閉防火牆
5.重啟服務
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,填入遠程調試參數,參數示例:
使用的JDK選擇JDK 5-8
5.開啟Debug模式回到IDEA主頁面,選擇剛才的配置文件,點擊Debug圖標(快捷鍵Shift+F9)
如果遠程調試執行成功,斷點圖標會發生變化,增加一個對號
此時,Console頁面顯示如下:
0x04 常用知識Zimbra使用Jetty框架作為web容器
用戶在訪問jsp文件時,服務器先將JVM不認識的JSP文件解析成java文件,保存路徑為:/opt/zimbra/jetty_base/work/zimbra/jsp/org/apache/jsp/
每個jsp文件被成功訪問後,都會註冊一個JspServletWrapper實例,我們可以通過調試器查看request變量獲得所有已註冊的JspServletWrapper實例,也可以通過反射的方式以jsp文件的形式進行枚舉
jsp文件代碼示例:
整個反射的邏輯來自於跟踪調試的結果,實現邏輯不唯一,枚舉JspServletWrapper實例用到了ConcurrentHashMap枚舉
0x05 小結在我們搭建好Zimbra漏洞調試環境後,接下來就可以著手對漏洞和Jetty框架進行研究學習。
Recommended Comments