SSTI and RCE in Confluence

漏洞介绍

Atlassian 公司的 Confluence Server 和 Data Center 产品中使用的 widgetconnecter 组件 (版本<=3.1.3) 中存在服务器端模板注入 (SSTI) 漏洞。利用该漏洞,攻击者可以实现本地敏感文件读取,SSRF,RCE等

影响范围

所有 1.xx,2.xx,3.xx,4.xx 和 5.xx 版本
所有 6.0.x,6.1.x,6.2.x,6.3.x,6.4.x 和 6.5.x 版本
6.6.12 之前的所有 6.6.x 版本
所有 6.7.x,6.8.x,6.9.x,6.10.x 和 6.11.x 版本
6.12.3 之前的所有 6.12.x 版本
6.13.3 之前的所有 6.13.x 版本
6.14.2 之前的所有 6.14.x 版本

漏洞简析

问题出现在往文章中插入其他元素的功能处,如下
在这里插入图片描述的当我们向文章中插入不同元素时,confluence会启用不同的渲染器对其进行渲染,不同的渲染器函数中会调用不同模板(_template参数),有些_template参数是直接写死了的,但是有些_template参数则是我们可控的。所以,问题也就出现了,我们可以通过修改_template参数来加载远程恶意代码来实现RCE(支持ftp,https协议),或者通过file协议直接读取本地文件(/etc/passwd等)。

0x01

我们向文章中插入一段视频,发出请求,抓包,并在请求中添加_template参数
在这里插入图片描述
由上图可以看到我利用ftp协议加载了一个远程的vm文件,这个文件的内容如下:

#set($e="e")
$e.getClass().forName('java.lang.System').getMethod('getProperty', $e.getClass().forName('java.lang.String')).invoke(null, 'os.name').toString()

该段代码的功能就是显示出当前系统种类(linux或者windows)。效果如下:
在这里插入图片描述
可见成功读出操作系统类型。

可使用python的pyftplib库快速搭建一个ftp服务器,简单灵活,使用方法如下
https://my.oschina.net/kangvcar/blog/1599867

0x02

除此之外我们还可以利用file协议进行本地文件读取
在这里插入图片描述

0x03

利用github上放出的exp试一试:https://github.com/Yt1g3r/CVE-2019-3396_EXP
在这里插入图片描述
只需输入目标地址与命令即可,方便快捷

痕迹排查

由于confluence使用的是log4j进行日志管理,log4j又是按需记录java以及http行为,所以即使攻击者成功利用了漏洞,我们也很难在服务器上查找到攻击痕迹,除非管理源对confluence日志系统进行了以下配置

  1. 配置记录用户访问每个页面的记录
    https://confluence.atlassian.com/confkb/how-to-enable-user-access-logging-182943.html
    开启此设置后,用户对每个页面的访问都会被记录到atlassian-confluence.log中,而这个文件是存放在confluence的家目录下(区别与安装目录,这是我之前一直踩的一个坑),寻找家目录的方法下面链接中的手册有提到
    https://confluence.atlassian.com/doc/working-with-confluence-logs-108364721.html
  2. 配置开启Profiling功能
    这个功能大概就是会详细展示出用户访问每个页面时都发生了什么。
    https://confluence.atlassian.com/doc/configuring-logging-181535215.html

在这里插入图片描述
进行了如上配置过后,当我利用ftp加载远程恶意脚本时就可以在日志atlassian-confluence.log看到如下条目
在这里插入图片描述
上图中Rendering velocity template: ftp://xxxxxxxxxx就是我们此次攻击的关键所在,这里也成功捕获到了。

发布了116 篇原创文章 · 获赞 161 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/he_and/article/details/89320353