LoRexxar's Blog | 信息技术分享
LoRexxar's Blog
马上订阅 LoRexxar's Blog | 信息技术分享 RSS 更新: https://lorexxar.cn/atom.xml
CS Xss2Rce CVE-2022-39197分析与复现
前段时间这个漏洞被挖掘出来之后的时候还是引发了很多关注的,但是最初一直都没有什么像样的分析文章出来,最早看@漂亮鼠的文章之后才大体上对这个漏洞有了一个基本的认识。
https://mp.weixin.qq.com/s/l5e2p_WtYSCYYhYE0lzRdQ
但是不知道是我的java水平真的不够,又或者说这篇文章中隐去的部分太多了,我顺着文章研究了一段时间但是几个点都串不起来。后来又接二连三的看了几篇文章,直到看完@pang0lin才算是把逻辑串联起来许多
这篇文章不知道什么时候发出来,主要是记录一下整个复现分析的心路历程,以便以后需要的时候没处看。
漏洞原文
https://www.cobaltstrike.com/blog/out-of-band-update-cobalt-strike-4-7-1/
CVE-2022-39197
An independent researcher identified as “Beichendream” reached out to inform us about an XSS vulnerability that they discovered in the teamserver. This would allow an attacker to set a malformed username in the Beacon configuration, allowing them to remotely execute code. We created a CVE for this issue which has been fixed.
这个漏洞在cs的 4.7.1版本中被修复,他允许攻击者可以伪造用户名来构造xss,通过xss利用可以造成RCE。
修复的手段也很简单,就是把这个xss给修了,正所谓只要入口点没了,你后面也利用不起来。

Cobalt Strike与swing
在理解这个漏洞之前,我们首先需要理解cs和swing这个框架的关系。
众所周知,Cobalt Strike是世界上最流行的网站管理工具,cs提供了允许多个目标通过非对称的加密方式链接teamserver,在这个过程中,只要传输的数据可以被teamserver解开,那么这个连接就会上线,这本质上就是一个简单的服务通信逻辑,这没什么问题。

而这个公钥呢可以从Beacon stage的bin文件中获取,相关的脚本其实也可以多,比如
https://github.com/LiAoRJ/CS_fakesubmit
本地测试的话,可以用更简单这个解密脚本获得这个公私钥。
1 | import java.io.File; |
只要获得了公钥,那么我们就可以向teamserver传入一个虚假的会话上线,通过客户端链接服务端之后就可以看到这条链接。

在这个页面当中虽然说看上去信息很多,实际上可控的部分并不多,这一点在漂亮鼠的文章中有详细的解释,主要是数据结构中的可控点问题
https://mp.weixin.qq.com/s/l5e2p_WtYSCYYhYE0lzRdQ

这里我们先不深究cs的传输协议,我们只需要关注,在这个页面中可以控制的其实就是中间的会话信息部分,其中包括总共117字节的user、computer、process一共3个部分

而且理论上来说,如果伪造脚本足够合理,那么由这个界面衍生出来的各种界面都是可以控制的,最简单的就比如原文提到的查看进程列表,但其实其他的比如查看文件管理等功能其实都差不多。

而前面说了这么多,和swing有什么关系呢?前面看到的所有画面都是用swing这个库画的,所谓的XSS也来源于这里。
Swing库与Xss
https://docs.oracle.com/javase/tutorial/uiswing/components/html.html
从相关的官方文档可以知道,Swing本身是支持HTML的标签的。

只要在文本的开始加入html标签就会解析html标签,而比较有趣的事情是,这套html的解析引擎是他自己实现的,并不是引了一个第三方引擎。从swing的代码中可以看到这一点。
path: swing.text.html
)
而更有趣的是,类似script这种标签虽然解析,但是并没有用,而是套了一个娃直接关了

而这个漏洞的入口点XSS也正是由于这个原因,网上的很多分析文章也都是到这里为止,算是进了个门口

从Swing XSS 到 RCE
从XSS到实例化任意类?
逻辑走到这里接下来最大的问题就是如何从XSS走到RCE,这也是这个漏洞最有意思的地方。
总所周知啊,一般来说我们常规意义上的XSS利用主要是围绕JS来做文章,即便是那种客户端的xss2rce,大多数也都是建立在Electron的基础上,说白了是在Node的环境下执行JS,由Node才从客户端走到服务端,才构成RCE。...
剩余内容已隐藏