菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。
0x00 前言
在上一篇文章《Zimbra-SOAP-API开发指南》先容了Zimbra SOAP API的挪用方式,开源代码Zimbra_SOAP_API_Manage。 本文将要在此基础上扩充功效,添加使用治理员权限可以实现的功效。
0x01 简介
本文将要先容以下内容:
· 获得指定邮箱用户的token
· 通过clientUploader插件向服务器上传文件
· 日志检测
0x02 获得指定邮箱用户的token
说明文档:https://files.zimbr *** /docs/soap_api/8.8.15/api-reference/zimbraAdmin/DelegateAuth.html
对应命名空间为zimbraAdmin
请求的地址为:uri+":7071/service/admin/soap"
凭据说明文档中的SOAP花样,可通过以下Python代码实现:
返回的效果如下:
提取出authToken值可以用于邮箱登录,登录方式如下:
进入Zimbra邮箱登录的Web页面,添加以下Cookie信息:
Name:ZM_AUTH_TOKEN Value:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
在登录页面输入邮箱用户名称,不需要输入口令,点击登录。
Chrome浏览器添加Cookie的方式:
在Chrome浏览器中按下F12,开启开发者工具,选择Application标签。
依次打开Storage->Cookies
0x03 通过clientUploader插件向服务器上传文件
这里需要注重上传文件的操作需要在请求头(Request Headers)中设置Content-Type为multipart/form-data; boundary=${boundary},花样示例:
,,菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1abcdefghijklmno
完整的数据包花样示例:
POST /service/extension/clientUploader/upload HTTP/1.1 Host: mail.xx.com Proxy-Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1abcdefghijklmno Content-Length: 400 Cookie:ZM_ADMIN_AUTH_TOKEN=0_530bf417d0f3e55ed628e4671e44b1dea4652bab_69643d33363a65306661666438392d313336302d313164392d383636312d3030306139356439386566323b6578703d31333a313535343835323934303131393b61646d696e3d313a313b Upgrade-Insecure-Requests:1 ------WebKitFormBoundary1abcdefghijklmno Content-Disposition:form-data;name="file";filename="test.jsp" Content-Type: image/jpeg test12345 ------WebKitFormBoundary1abcdefghijklmno--
其中,------WebKitFormBoundary1abcdefghijklmno为分隔符,------WebKitFormBoundary1abcdefghijklmno--为结束符
若是未设置该属性,上传文件的操作会会失败,返回效果如下:
在Python剧本的编写过程中,若是直接在Headers中加入属性:Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1abcdefghijklmno,示例代码如下:
headers["Content-Type"]="multipart/form-data; boundary=----WebKitFormBoundary1abcdefghijklmno"
这样会发生bug,无法乐成
此时的数据包花样如下:
POST /service/extension/clientUploader/upload HTTP/1.1 Host: mail.xx.com Proxy-Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1abcdefghijklmno Content-Length: 400 Cookie:ZM_ADMIN_AUTH_TOKEN=0_530bf417d0f3e55ed628e4671e44b1dea4652bab_69643d33363a65306661666438392d313336302d313164392d383636312d3030306139356439386566323b6578703d31333a313535343835323934303131393b61646d696e3d313a313b Upgrade-Insecure-Requests:1 ------3c4bc2fbc2368a87e5def7b234fd126b Content-Disposition:form-data;name="file";filename="test.jsp" Content-Type: image/jpeg test12345 ------3c4bc2fbc2368a87e5def7b234fd126b--
发现分隔符和结束符为重新随机天生的数值,而不是我们在请求头(Request Headers)中设置的----WebKitFormBoundary1abcdefghijklmno
以是Python代码需要做修改,这里给出一种解决方式:使用requests_toolbelt库。
代码示例:
fileContent = 0; path = input("[*] Input the path of the file:") with open(path,'r') as f: fileContent = f.read() filename = path print("[*] filepath:"+path) print("[*] filedata:"+fileContent) headers = { "Content-Type":"application/xml" } headers["Content-Type"]="multipart/form-data; boundary=----WebKitFormBoundary1abcdefghijklmno" headers["Cookie"]="ZM_ADMIN_AUTH_TOKEN="+token+";" m = MultipartEncoder(fields={ 'filename1':(None,"test",None), 'clientFile':(filename,fileContent,"image/jpeg"), 'requestId':(None,"12345",None), }, boundary = '----WebKitFormBoundary1abcdefghijklmno') r = requests.post(uri+"/service/extension/clientUploader/upload",data=m,headers=headers,verify=False) if 'window.parent._uploadManager.loaded(1,' in r.text: print("[+] Upload Success!") print("[+] URL:%s/downloads/%s"%(uri,filename)) else: print("[!]") print(r.text) exit(0)
上传乐成后,路径为downloads目录,经由验证的用户才气接见。
0x04 开源代码
新的代码已上传至github,地址如下:
https://github.com/3gstudent/Homework-of-Python/blob/master/Zimbra_SOAP_API_Manage.py
增加了以下两个功效:
· Gettoken
· upload
同时增加了对CVE-2019-9621 SSRF破绽的支持,在邮件服务器关闭了7071治理端口的情况下,通过SSRF破绽实现对治理资源的接见。
0x05 日志检测
登录日志的位置为/opt/zimbra/log/mailbox.log
其他种类的邮件日志可参考https://wiki.zimbr *** /wiki/Log_Files
0x06 小结
本文扩充了Zimbra SOAP API的挪用方式,添加两个实用功效:获得指定邮箱用户的token和通过clientUploader插件向服务器上传文件,纪录实现细节。
本文为 3gstudent 原创稿件,授权嘶吼独家公布,
网友评论