組件概述
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:latest2.啟動 並進入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/bash3.將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.gzcd atlassian-confluence-6.13.0vim ./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 debug4.安裝jdk
JAVA_HOME=/usr/java/jdk1.8.0_74JRE_HOME=$JAVA_HOME/jreJAVA_BIN=$JAVA_HOME/binCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/libPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binexport JAVA_HOME JRE_HOME PATH CLASSPATH5.啟動
./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/libdocker cp confluence6.13.2:/opt/atlassian-confluence-6.13.2/confluence/WEB-INF/atlassian-bundled-plugins ~/confluence/lib1docker cp confluence6.13.2:/opt/atlassian-confluence-6.13.2/lib
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裡面尋找相應代碼位置com\atlassian\confluence\extra\widgetconnector,根據漏洞點來精確的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.1Host: 192.168.33.128:8090Connection: closeUser-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.36Referer: http://192.168.33.128:8090/pages/resumedraft.action?draftId=786457&draftShareId=056b55bc-fc4a-487b-b1e1-8f673f280c23&Content-Type: application/json; charset=utf-8Content-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/