组件概述
1. 关键词
信息共享、协同编辑、企业内网
2.概述
Confluence是一个企业级的Wiki,它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享,Confluence使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息,文档协作,集体讨论。
可用于企业、部门、团队内部进行信息共享和协同编辑。
以上引用于:https://www.codenong.com/cs106243330/
3.使用范围及行业分布
lConfluence是全球流行的Wiki系统,业务涵盖100多个国家或地区。IBM、SAP等之知名企业都使用Confluence构建企业Wiki并向公众开放。
lConfluence被用于广泛地用于项目团队,开发团队,市场销售团队。
l全球共有78158个Confluence开放服务,美国最多,有23002个服务,德国第二,有14385个开放服务,中国第三,有7281个服务,澳大利亚第四,有7959个服务,爱尔兰第五,有2893个服务。全国的开放的Confluence服务中,浙江最多,有3040个服务,北京第二,有1713个服务,上海第三,有532个服务,广东第四,有525个服务。
lShodan :Confluence fofa:app="Confluence" Zoomeye:app:"Confluence"
4.重点产品特性
一.环境搭建、动态调试
1.下载基础ubuntu镜像
由于官方ubuntu没有一些基本工具,自己commit了一个
docker pull skaydocker/lamp:latest
2.启动 并进入docker 容器进行配置
docker run --name confluence6.13.2 -it -p 8090:8090 -p 10010:10010 skaydocker/lamp:latest /bin/bashker run -p 8090:8090 -p 10010:10010 -it skaydocker/lamp:latest /bin/bash
3.将confluence导入docker镜像
docker cp /root/confluence/atlassian-confluence-6.13.2.tar.gz confluence6.13.2:/opt/
tar zxf atlassian-confluence-6.13.0.tar.gz
cd atlassian-confluence-6.13.0
vim ./confluence/WEB-INF/classes/confluence-init.properties #设置confluence的home目录,这里我设置为
#confluence.home=/home/cqq/confluence
$ vi ./conf/server.xml
去掉注释
修改启动参数 ./bin/setup.sh
CATALINA_OPTS="-Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=10010 ${CATALINA_OPTS}" # for debug
4.安装jdk
JAVA_HOME=/usr/java/jdk1.8.0_74
JRE_HOME=$JAVA_HOME/jre
JAVA_BIN=$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME PATH CLASSPATH
5.启动
./bin/start-confluence.sh
再启动confluence ./start-confluence.sh
开始安装confluence
参考vulhub步骤 https://github.com/vulhub/vulhub/tree/master/confluence/CVE-2019-3396
6.配置idea
7.将要调试的jar包导入idea
docker cp confluence6.13.2:/opt/atlassian-confluence-6.13.2/confluence/WEB-INF/lib ~/confluence/lib
docker cp confluence6.13.2:/opt/atlassian-confluence-6.13.2/confluence/WEB-INF/atlassian-bundled-plugins ~/confluence/lib1
docker cp confluence6.13.2:/opt/atlassian-confluence-6.13.2/lib
~/confluence/lib2
8.下断点调试
二.漏洞相关
1.漏洞概览
1.1漏洞列表
注: 只列出高危漏洞 其它漏洞详情见 此处放链接
https://confluence.atlassian.com/doc/confluence-security-advisory-2019-03-20-966660264.html
1.2.漏洞分布与关联
A.分布
默认安装的一些插件存在安全漏洞
B.关联
3394 3395 3396 均是一个地方
1.3.漏洞过去、现在、未来
过去是插件存在漏洞 2020年还未爆出高危漏洞 由于使用量较大,未来还会是安全研究人员重点挖掘的目标,肯定还会出漏洞,应该还是插件问题
2.复现及分析
1.CVE-2020-0000
A.复现
1)任意文件读取
2)结合远程文件包含实现命令执行
B.分析
首先漏洞公告信息获得了Widget Connector组件名称,确认漏洞点,
然后在lib里面寻找相应代码位置comatlassianconfluenceextrawidgetconnector,根据漏洞点来精确的diff,
关键函数
this.sanitizeFields = Collections.unmodifiableList(Arrays.asList(VelocityRenderService.TEMPLATE_PARAM));
而TEMPLATE_PARAM的值就是_template,所以这个补丁就是过滤了外部传入的_template参数,TEMPLATE_PARAM就是模板文件的路径
以上参考于https://paper.seebug.org/884/
模板路径一般是写死,若出现例外,调用了可控的模板,造成模板注入
然后,去应用里找代码对应的功能点
插入参数开始debug
我这里就直接用poc来debug了
POST /rest/tinymce/1/macro/preview HTTP/1.1
Host: 192.168.33.128:8090
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3670.0 Safari/537.36
Referer: http://192.168.33.128:8090/pages/resumedraft.action?draftId=786457&draftShareId=056b55bc-fc4a-487b-b1e1-8f673f280c23&
Content-Type: application/json; charset=utf-8
Content-Length: 170
{"contentId":"786457","macro":{"name":"widget","body":"","params":{"url":"https://www.viddler.com/v/23464dc5","width":"1000","height":"1000","_template":"../web.xml"}}}
我们第一个断点下到这里render:31, DefaultVelocityRenderService 可以看到_template取出来赋值给template,其他传递进来的参数取出来经过判断之后放入到contextMap,调用getRenderedTemplate函数,也就是调用VelocityUtils.getRenderedTemplate。
跟进this.getRenderedTemplate
跟着作者跟断电到loadResource:322, ConfigurableResourceManager 这里我我发现只有_templete是url的时候才会停到这里,../web.xml并不会
这里有四个ResourceLoaders 用来取模板,因为Fresourcetype是1 所以我们直接跟进org.apache.velocity.runtime.resource.loader.FileResourceLoader getResourceStream:132, FileResourceLoader getResourceStream:132, FileResourceLoader FileResourceLoader会对用户传入的模板路径使用normalizePath函数进行校验
跟进去 过滤了/../ 跳目录失败
我们再回到getResourceStream:152, FileResourceLoader 停到inputStream = this.findTemplate(path, template); 这里会凭借一个固定的path,这个是Confluence的安装路径
所以我们可以督导Confluence目录下面的文件了,但是无法读取安装目录以外的文件,但是可以跳一层,../还是可以用的, 我们继续跟着作者走到getResourceStream:119, ClasspathResourceLoader 的ClassUtils.getResourceAsStream
跟进去停到getResourceAsStream:1087, WebappClassLoaderBase 这里也用了normallize多路径过滤了
我懒 就不踩坑了 图片链接https://paper.seebug.org/884/
跟着大佬直接i断到/org/apache/catalina/loader/WebappClassLoaderBase.class的getResourceAsStream
然后停到getResourceAsStream:1094, WebappClassLoaderBase 这里很关键,URL url = super.findResource(name); 会获取到url对象哦,可以远程加载模板啦
最终获取到数据给Velocity渲染。
跟着大佬一步步走下来 牛批,膜。
2.CVE-2019-3395
同3396 都可以file http协议之类的了 ssrf还不是小意思
3.CVE-2019-3394
Well 同上~
4.CVE-2019-3398
https://xz.aliyun.com/t/4854
3.漏洞信息跟进
官方公告
https://confluence.atlassian.com/doc/confluence-security-advisory-2019-03-20-966660264.html
4.厂商防护及绕过思路
漏洞pay都是url get post参数存在问题 单纯正则比较难以防御,绕过方式较多
5.漏洞自动化利用相关
反序列化漏洞exp公开,且可利用性高
简单burp发包即可
三.个人思考
主要参考链接是seebug一篇文章,从官方预警给出到自己构造poc,思考路径很值得借鉴,膜~
四.参考链接
https://note.qidong.name/2017/08/nexus-repository-oss/
https://github.com/sonatype/nexus-public/
本文始发于微信公众号(白帽100安全攻防实验室):Confluence 组件安全概览
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论