原文地址:
https://blog.tint0.com/2019/03/a-saga-of-code-executions-on-zimbra.html
https://paper.tuisec.win/detail/8ac5a3d1efbf40b
下载Zimbra的包:
1.从地址https://www.zimbra.com/downloads/zimbra-collaboration-open-source/下载了Zimbra 8.6.0的开源版,并解压
2.解压packages/zimbra-core-***.rpm,得到zimbra核心库的内容,命令如下:
#需要自行安装rpm2cpio
rpm2cpio zimbra-core-8.6.0_GA_1153.RHEL6_64-20141215151155.x86_64.rpm | cpio -div
github上其实也有源码,但是jd-gui方便代码追踪
https://github.com/Grynn/zimbra-mirror
利用XXE读取密码:
CVE-2019-9670,文章中提示使用Autodiscover
查找zimbra-core中带有Autodiscover的类名
find . -name "*.jar"|awk '{print "jar -tvf "$1}' | sh -x | grep -i Autodiscover
更新一下命令(大家可以自己对比一下~):
find . -name "*.jar"|awk '{print "jar -tvf "$1"|awk '\''{
print ""\""$1"\"""$0}'\''"}' | sh | grep -i Autodiscover
PS:Windows下可以直接用Winrar之类的解压缩工具进行搜索。
找到如下两个包:
- jar -tvf ./j2sdk-20140721/jre/lib/ext/nashorn.jar
1758 Tue Jul 29 17:08:16 CST 2014 jdk/internal/dynalink/support/AutoDiscovery.class - jar -tvf ./lib/jars/zimbrastore.jar
20149 Mon Dec 15 15:19:12 CST 2014 com/zimbra/cs/service/AutoDiscoverServlet.class
可以看出nashorn.jar是jre的中的jar包,应该不是我们的目标,而AutoDiscoverServlet带有Servlet字样,应是对外提供服务的。
在Zimbra的Wiki中https://wiki.zimbra.com/wiki/Autodiscover,给出了Autodiscover的地址为/Autodiscover/Autodiscover.xml(其实这个功能应该是exchange的)
向/Autodiscover/Autodiscover.xml POST一个空的xml:
发现提示:No Email address is specified in the Request,在AutoDiscoverServlet.class的doPost中找到如下代码,确认为Autodiscover功能对应类。
使用Jd-gui反编译代码,发现如下代码逻辑:
public void doPost(HttpServletRequest req, HttpServletResponse resp){
...
reqBytes = ByteUtil.getContent(req.getInputStream(), req.getContentLength());
...
String content = new String(reqBytes, "UTF-8");
...
Document doc = docBuilder.parse(new InputSource(new StringReader(content)));
..