Sliver C2 服务器漏洞:攻击者如何通过 TCP 连接拦截流量

162 阅读2分钟

什么是 Sliver C2 服务器漏洞?

Sliver C2 框架的 teamserver 实现中发现了一个严重的服务器端请求伪造(SSRF)漏洞(CVE-2025-27090)。这个漏洞允许攻击者通过易受攻击的服务器建立未经授权的 TCP 连接,从而可能导致 IP 泄露、横向移动和流量拦截。

受影响版本

漏洞影响 Sliver 的版本 1.5.26 至 1.5.42,以及在提交 Of340a2 之前的预发布版本。

技术机制

SSRF 攻击链

  1. 会话注册处理
    攻击者首先利用 registerSessionHandler 函数创建一个新的会话对象。这个函数通过 Protobuf 反序列化来处理植入物注册序列。

    go
    // server/handlers/sessions.go
    session := core.NewSession(implantConn)
    core.Sessions.Add(session) // 将会话添加到团队服务器的跟踪中
    
  2. 隧道数据处理
    攻击者然后利用 tunnelDataHandler 函数发送特制的 TunnelData 消息,其中 CreateReverse 设置为 true。这会触发 SSRF 攻击。

    go
    // server/handlers/session.go
    if rtunnel == nil && tunnelData.CreateReverse == true {
        createReverseTunnelHandler(implantConn, data) // 触发 SSRF
    }
    
  3. 建立 TCP 连接
    团队服务器通过 defaultDialer.DialContext 函数建立出站连接。

    go
    remoteAddress := fmt.Sprintf("%s:%d", req.Rportfwd.Host, req.Rportfwd.Port)
    dst, err := defaultDialer.DialContext(ctx, "tcp", remoteAddress)
    

Python PoC 代码示例

以下是 Python 中的概念验证(PoC)代码,展示了攻击者如何注册一个假会话,然后初始化反向隧道:

python
# 注册一个假会话
registration_envelope = generate_registration_envelope() 
ssock.write(registration_envelope_len + registration_envelope)

# 初始化反向隧道
reverse_tunnel_envelope = generate_create_reverse_tunnel_envelope(target_ip, port, data)
ssock.write(reverse_tunnel_envelope_len + reverse_tunnel_envelope)

解决方案

  • 更新 Sliver 版本:管理员应立即更新到 Sliver v1.5.43 或更高版本。
  • 审计监听器:检查所有暂存监听器是否存在未经授权的 shellcode 生成能力。

总结

这个 SSRF 漏洞强调了在 C2 框架中处理双向网络通信时,严格的输入验证的重要性。随着红队工具越来越成为攻击目标,团队服务器组件的强隔离对于操作安全至关重要。