热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:利用跨站WebSocket劫持(CSWH)实现账户劫持

篇首语:本文由编程笔记#小编为大家整理,主要介绍了利用跨站WebSocket劫持(CSWH)实现账户劫持相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了利用跨站WebSocket劫持(CSWH)实现账户劫持相关的知识,希望对你有一定的参考价值。


本文分享的是作者在某次漏洞测试中,由于目标应用使用了WebSocket协议,经测试后,存在跨站WebSocket劫持漏洞。之后,作者利用该漏洞结合用户密码重置功能,实现了对目标应用注册账户的账户劫持攻击。


WebSocket技术和跨站WebSocket劫持攻击导读

为了更好地理解WebSocket 技术,在此,我们参考了IBM Developer社区《深入理解跨站点 WebSocket 劫持漏洞的原理及防范》一文,对WebSocket 技术和跨站点 WebSocket劫持漏洞做了大概的梳理。


WebSocket协议技术

WebSocket 是 html5 推出的新协议,跟 HTTP 协议内容本身没有关系。WebSocket 是持久化的协议,而 HTTP 是非持久连接。WebSocket 提供了全双工沟通,俗称 Web 的 TCP 连接,且WebSocket 基于 TCP 实现了消息流。WebSocket 也类似于 TCP 一样进行握手连接,跟 TCP 不同的是,WebSocket 是基于 HTTP 协议进行的握手,它在客户端和服务器之间提供了一个基于单 TCP 连接的高效全双工通信信道。通信协议从 http://或 https://切换到 ws://或 wss://后,表示应用已经切换到了WebSocket协议通信状态。

对于实时性要求比较高的应用而言,譬如在线证券、在线游戏,以及不同设备之间信息同步。信息实时同步一直是技术难题,在 WebSocket 出现之前,常见解决方案一般就是轮询(Polling)和 Comet 技术,但这些技术增加了设计复杂度,也造成了网络和服务器的额外负担,在负载较大的情况下效率相对低下,导致应用的可伸缩行收到制约。对于此类应用的开发者来说,WebSocket 技术简直就是神兵利器,详细可登陆 websocket.org 网站查看具体应用案例。


跨站WebSocket劫持漏洞

例如,以下是websocket.org 网站和其Echo 测试服务器echo.websocket.org之间,从HTTP到WebSocket协议升级切换的握手请求和响应。

WebSocket 协议切换请求:

GET ws://echo.websocket.org/?encoding=text HTTP/1.1
Host: echo.websocket.org
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://www.websocket.org
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) Chrome/49.0.2623.110
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6
COOKIE: _gat=1; _ga=GA1.2.2904372.1459647651; JSESSIOnID=1A9431CF043F851E0356F5837845B2EC
Sec-WebSocket-Key: 7ARps0AjsHN8bx5dCI1KKQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

Connection:Upgrade 和 Upgrade:websocket 这两行,相当于告诉服务器端:我要申请切换到 WebSocket 协议。

WebSocket 协议切换响应:

HTTP/1.1 101 Web Socket Protocol Handshake
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Headers: authorization
Access-Control-Allow-Headers: x-websocket-extensions
Access-Control-Allow-Headers: x-websocket-version
Access-Control-Allow-Headers: x-websocket-protocol
Access-Control-Allow-Origin: http://www.websocket.org
Connection: Upgrade
Date: Sun, 03 Apr 2016 03:09:21 GMT
Sec-WebSocket-Accept: wW9Bl95VtfJDbpHdfivy7csOaDo=
Server: Kaazing Gateway
Upgrade: websocket

一旦服务器端返回 101 响应,即可完成 WebSocket 协议切换。服务器端即可以基于相同端口,将通信协议从 http://或 https://切换到 ws://或 wss://。协议切换完成后,浏览器和服务器端即可以使用 WebSocket API 互相发送和收取文本和二进制消息。

从以上请求响应消息中可以看到,WebSocket 协议没有规范 Origin 必须相同,没有指定“Access-Control-Allow-Origin”,也没有规定服务器在握手阶段应该如何认证客户端身份,跨域资源共享 Cross-Origin Resource Sharing(CORS)机制并不适用WebSocket 协议。所以在此来说,攻击者可以伪造握手请求来绕过身份认证,最终实现的效果就是跨站点WebSocket劫持攻击(Cross-Site WebSocket Hijacking,CSWH)。


发现跨站WebSocket劫持漏洞

有了以上对跨站点WebSocket劫持攻击的理解,作者在某邀请测试项目中,发现了某个使用了WebSocket协议连接的应用,在分析了WebSocket URL之后,作者发现其存在跨站WebSocket劫持漏洞。

假设某个应用用wss://website.com的方式建立起了WebSocket协议通道,要验证它是否存在跨站WebSocket劫持漏洞,可以遵循以下几个步骤:

1、在浏览器中打开目标Web应用页面;

2、在浏览器新选项卡中访问http://websocket.org/echo.html这个测试页面,在其中的Location处输入上述目标应用的WebSocket URL- wss://website.com,点击 ‘Connect’连接;

利用跨站WebSocket劫持(CSWH)实现账户劫持3、一旦和目标WebSocket URL建立起了WebSocket连接,就可以通过该测试页面向目标服务器中发送数据。在该过过程,我们可以利用BurpSuite来抓取有效连接的websocket数据session包,然后,通过更改origin头的方式进行包重放,查看目标服务器的响应情况。如果重放后服务器的响应与前面有效session发送的正常包相同,那就说明该应用可能存在跨站WebSocket劫持漏洞。

当然,还可以利用跨站点WebSocket劫持漏洞检测网站 - http://ironwasp.org/cswsh.html,来确定该漏洞是否存在。通过以上几个步骤的检测分析,最终我发现该应用存在跨站WebSocket劫持漏洞。


利用跨站WebSocket劫持漏洞劫持账户

当我在浏览器中和目标应用建立起WebSocket连接之后,我就能获取到类似以下的WebSocket响应数据包:

利用跨站WebSocket劫持(CSWH)实现账户劫持仔细查看上图,可以发现,其中包含了一个名为 “_forgotPasswordId” 且值为“null”的参数,所以,现在我们需要来确定这个 “_forgotPasswordId” 的值,看看能否对它进行利用。对应的,我在浏览器中,用https方式,输入了目标应用相关的某个注册邮箱对应用户的忘记密码功能页面,如下:

利用跨站WebSocket劫持(CSWH)实现账户劫持之后,我查看此时的WebSocket响应数据包时,它为forgotPassword带了一个token,很明显,这表示我的此次操作得到了服务端验证。

利用跨站WebSocket劫持(CSWH)实现账户劫持所以,这种跨站WebSocket劫持和密码重置功能的组合,可以充分利用形成对目标应用特定用户的账户劫持。为此,我写了以下的Payload脚本CSWH.html,用XHR方式向目标应用服务端发送WebSocket连接请求:






WebSocket Test



账号劫持步骤:

1、把目标应用的正常密码重置请求页面发送给受害者;

2、在攻击者网站托管上述CSWH.html,把该html访问链接也发送受害者;

3、一旦受害者分别点击了上述两个URL链接之后,攻击者端就能通过数据包监听方式获取到目标应用服务端对此次密码重置的Websocket响应消息,如下:

4、利用其中的密码重置token,我们就能向目标应用服务端伪造请求,实现对受害者账户的密码重置,以此实现对其账户劫持。

*参考来源:medium,clouds编译,转载请注明来自FreeBuf.COM


推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • 渗透测试基础bypass绕过阻挡我们的WAF(下)
    渗透测试基础-bypass ... [详细]
author-avatar
处男是你_909
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有