前言
WebSocket是一种全双工通信协议,即客户端可以向服务端发送请求,服务端也可以主动向客户端推送数据。这样的特点,使得它在一些实时性要求比较高的场景效果斐然(比如微信朋友圈实时通知、在线协同编辑等)。主流浏览器以及一些常见服务端通信框架(Tomcat、Spring、Jetty、WebSphere、WebLogic等)都对WebSocket进行了技术支持。
本文主要讲解如何让哥斯拉支持Websocket协议的shell。
添加SocketClient
首先,需要在util中,添加SocketClient类,实现“打开连接”、“发送数据”、“接收数据”、“关闭连接”等功能
Shell生成界面修改
添加"WS Shell类型"下拉框
添加选项
整体设计完成后,界面如下图所示
算法实现
在src/main/java/shells/cryptions/JavaAes/中新建JavaAesBase64WebSocket.java并定义算法名称
修改init方法,实现SocketClient.sendMsg发送payload
修改shells.payloads.java.JavaShell#evalFunc。添加SocketClient.sendMsg发送data数据
Shell代码实现
这里可以根据wsMemShell模板作为参考,进行修改。
参考模板:https://github.com/veo/wsMemShell
这里需要注意,要添加setDefaultMaxTextMessageBufferSize和setDefaultMaxBinaryMessageBufferSize方法。解决payload传输的大小限制问题。
这里需要注意,要添加setDefaultMaxTextMessageBufferSize和setDefaultMaxBinaryMessageBufferSize方法。解决payload传输的大小限制问题。
container.setDefaultMaxTextMessageBufferSize(52428800);
container.setDefaultMaxBinaryMessageBufferSize(52428800);
功能预览
shell连接时,填写url为ws://开头。例如 ws://192.168.136.72:8080/ws.jsp
加密器选择JAVA_AES_BASE64_WebSocket
通过抓包,可看到通信协议及流量
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022