0x00 前言本文將要繼續擴充開源代碼Zimbra_SOAP_API_Manage的功能,實現郵件導出和文件夾共享,分享開發細節。
0x01 簡介本文將要介紹以下內容:
郵件導出
文件夾共享
開源代碼
0x02 郵件導出Zimbra支持導出當前郵箱的所有郵件,通過Web界面的操作方法如下:
登錄郵箱後,依次選擇Preferences-Import/Export,如下圖
接下來,通過抓包的方式分析實現流程,進而使用程序實現這部分功能
1.默認配置導出郵件默認配置下,會導出所有郵件,以壓縮包的形式保存
訪問URL示例:
參數解析:
admin%40test.com為郵箱用戶,可以用~替代
filename=All-2022-07-27-181056為存在記錄時保存的文件名,2022-07-27-181056對應的時間格式為年-月-日-時分秒,時間為帶時區的時間,需要計算時差
emptyname=No+Data+to+Export為空記錄時保存的文件名
在程序實現上,需要同Web操作的格式保持一致,代碼細節:
(1)構造保存的文件名
(2)保存文件
保存文件時使用binary寫入
實現代碼示例:
2.加入篩選條件導出郵件高級選項下,可以添加篩選條件,導出特定的郵件
訪問URL示例:
參數解析,新增加了以下參數:
start=1658818800000為篩選的起始時間,格式為unix時間戳,沒有額外計算時差
end=1658991600000為篩選的結束時間,格式為unix時間戳,沒有額外計算時差
query=content%3Apassword為篩選的關鍵詞,作用是查詢正文中帶有password關鍵詞的郵件
篩選條件的語法可參考:https://wiki.zimbra.com/wiki/Zimbra_Web_Client_Search_Tips
代碼實現細節:
(1)時間格式轉換的示例代碼
時間轉換成秒:
秒轉換成時間:
實現代碼示例:
0x03 文件夾共享1.流程分析Zimbra支持將當前郵箱的文件夾共享至其他用戶,通過Web界面的操作方法如下:
登錄郵箱後,依次選擇Preferences-Sharing,如下圖
文件夾共享可選擇以下三個文件夾:
Inbox
Sent
Junk
如下圖
設置共享屬性如下圖
需要區別以下設置:
(1)Role
Viewer只能查看郵件
Manager可以修改郵件
(2)Message
Send stanard message,在設置後會向目的郵箱發送一份確認郵件
Do not send mail about this share,不發送確認郵件
這裡可以通過抓包分析每項設置對應的具體數值
示例數據包1:
格式分析:
(1)
id='2'表示Inbox
Sent對應id='5'
Junk對應id='4'
通過測試,還可以指定Drafts,對應id='6'
(2)
d='test1@test.com'表示可訪問共享的郵箱
perm='r'表示權限為可讀,對應Viewer
Manager對應的配置為perm='rwidx',表示權限為讀、寫、添加和刪除
如果設置了Send stanard message,在設置後會向目的郵箱(例如test1@test.com)發送一份確認郵件,數據包格式示例:
郵箱test1@test.com會收到一份郵件,確認是否接受文件夾共享
2.代碼實現(1)添加文件共享
需要指定目標郵箱和共享文件夾
添加文件共享成功的響應中返回共享文件夾對應的zid
實現代碼示例:
(2)發送文件共享請求
需要指定目標郵箱
實現代碼示例:
這裡需要注意,只有在添加文件共享後,發送文件共享請求才能成功返回200,否則返回500,提示invalid request: no matching grant
(3)刪除文件共享
需要指定目標郵箱對應的zid和共享文件夾,zid可在添加文件共享成功的響應中獲得
實現代碼示例:
0x04 開源代碼新的代碼已上傳至github,地址如下:
https://github.com/3gstudent/Homework-of-Python/blob/master/Zimbra_SOAP_API_Manage.py
添加以下五個功能:
AddShare:添加文件夾共享,默認權限為rwidx
ExportMail:導出帶有搜索條件的郵件,可指定日期和關鍵詞
ExportMailAll:導出所有郵件
RemoveShare:刪除當前郵箱的文件夾共享
SendShareNotification:在添加文件夾共享後,向目標郵箱發送一封確認郵件
0x05 小結本文擴充了Zimbra SOAP API的調用方法,添加五個實用功能,實現方法和思路還可在XSS漏洞上進行測試。
Recommended Comments