深信服华中天慧战队:哥斯拉二开-Websocket shell
内容提要
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。