深信服华中天慧战队:哥斯拉二开-Websocket shell

💡 原文中文,约1200字,阅读约需3分钟。
📝

内容提要

WebSocket是一种全双工通信协议,可以实现实时通知和在线协同编辑等功能。本文介绍了如何让哥斯拉支持WebSocket协议的shell。需要添加SocketClient类和修改界面设计。还需注意payload传输大小限制问题。

🔎

延伸解读

WebSocket Shell 的适用场景

文章指出 WebSocket 是全双工通信协议,适合实时性要求高的场景,如实时通知和在线协同编辑。将其用于哥斯拉的 shell,意味着控制端与被控端可以保持长连接,服务端也能主动推送数据,可能提升交互的实时性。但文章未具体说明这种 shell 在实战中的优势或限制,读者需结合自身需求评估。

实现要点:SocketClient 与算法类

要让哥斯拉支持 WebSocket shell,需在 util 中添加 SocketClient 类,实现打开连接、发送数据、接收数据、关闭连接等功能。同时,在 src/main/java/shells/cryptions/JavaAes/ 中新建 JavaAesBase64WebSocket.java 并定义算法名称,修改 init 方法以通过 SocketClient.sendMsg 发送 payload。这些步骤是功能实现的核心,缺一不可。

注意 payload 传输大小限制

文章特别提醒,需添加 setDefaultMaxTextMessageBufferSize 和 setDefaultMaxBinaryMessageBufferSize 方法,并将缓冲区大小设置为 52428800,以解决 payload 传输的大小限制问题。若不设置,较大的 payload 可能无法正常传输,导致 shell 功能异常。这是实现过程中容易忽略但关键的一步。

连接配置与流量特征

连接时,URL 需以 ws:// 开头,例如 ws://192.168.136.72:8080/ws.jsp,加密器选择 JAVA_AES_BASE64_WebSocket。文章提到通过抓包可看到通信协议及流量,但未详细分析流量特征。读者在实际使用中应注意 WebSocket 通信可能产生的流量模式,以便评估隐蔽性。

❓

Q&A

WebSocket是什么?

WebSocket是一种全双工通信协议,支持客户端和服务端双向通信。

如何让哥斯拉支持WebSocket协议的shell?

需要在util中添加SocketClient类,并修改界面设计,添加'WS Shell类型'下拉框选项。

WebSocket适合用于哪些场景?

WebSocket适用于实时性要求高的场景,如实时通知和在线协同编辑。

在实现WebSocket时需要注意哪些问题?

需要注意payload传输大小限制,设置最大文本和二进制消息缓冲区大小为52428800。

如何修改Shell代码以支持WebSocket?

可以参考wsMemShell模板,修改init方法以实现SocketClient.sendMsg发送payload。

连接WebSocket时URL应该如何设置?

连接时,URL需以ws://开头,例如ws://192.168.136.72:8080/ws.jsp。

🏷️

标签

➡️

继续阅读