Websocket,是一种在单个TCP连接上进行全双工通信的协议。近年来,Websocket在安全圈受到了不少关注,由于其允许实时更新的特性,在部分需要实时通信的领域更具灵活性。BUT!!
Websocket是HTML5的新特性,在客户端和服务端提供了一个基于TCP连接的双向通道。它的原理是是通过HTTP启动的双向、全双工通信协议,通常用于流式传输数据和其他异步流量的现代Web应用程序中。相比于更为熟知的HTTP这类无状态协议,WebSocket则是一种有状态协议。我们可以从服务器获得任意数量的传出“请求”和任意数量的传入“响应”。引用一个我们平日最常见的例子---网站中的聊天机器人。一句话来说,就是一个更方便的通道工。
在先前的文章中,相信大家已经看过了Repeater 和 Intruder 的国产化平替,Yakit的Web Fuzzer【Repeater 和 Intruder 的国产化平替 Web Fuzzer】。
Yakit 的大多数功能均由 Fuzz 的组合封装完成。
同理,Websocket劫持是否也能替换成一个Websocket Fuzzer呢?
的确如此!且Websocket Fuzzer 相比起 Burp,操作逻辑其实更加合理。
对比
1、找到对应的http请求
2、Websockets history里面查看Websocket通信请求和响应
3、选中请求,右键发送到repeater
4、在repeater中进行请求重放
在Yakit中,Websocket劫持仅需3步:
1、启动MITM流量劫持,然后访问测试用的Websocket服务或者是网站。在HTTP History
里面协议类型选择websocket
,就可以找到我们请求的Websocket数据包,(这里牛牛敲黑板,Burp是不同网站的Websocket请求都会展示在同一个页面,很难找到自己想要的那个请求,而我们的Yakit直接明了,建立连接之后就在右侧显示这个请求Websocket的通信)
2、在劫持到Websocket数据包以后,如果我们要对Websocket数据包进行Fuzz操作,可以选择所需数据包,然后点击Fuzz
按钮,即可进行Fuzz操作。
3、点击连接
,可以看到成功连接了服务端,并且在右侧可以看到实时的服务器请求与响应。在下方发送数据框里面发送Websocket请求,可以看到服务端成功接收数据。
Yakit特别亮点:针对一些特别的应用场景,需要重复发送一个请求。
Burp必须回到history页面再选中再发送到repeater,Yakit直接在Web Fuzzer界面左侧框操作即可,不用回到history页面。
总结
由于底层连接协议使用的是始终保持打开状态的TCP协议,因此,客户端和服务器可以随时发送消息,而无需等待另一端的响应。
虽然Websocket劫持的场景相对较少,但在金融交易、在线聊天等实时性强的操作环境下,其重要性不言而喻。
Yakit的Websocket Fuzzer,提供了较为方便的劫持流程以及更清楚的操作逻辑,给师傅们带来便捷的同时,也希望大家多多反馈。
更新日志
Yakit v1.2.3-sp4
Yaklang 1.2.4-sp1/sp2
More
YAK官方资源
YAK 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ
长按识别添加工作人员
开启Yakit进阶之旅