关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » UI前端 »如何全面掌控Session 且看WebSocket跨站劫持

    如何全面掌控Session 且看WebSocket跨站劫持

    2014-12-16 00:00:00 出处:豆浆油条 - melon
    分享

    WebSockets是一个能够给单TCP连接提供全双工信道的HTML5特性。它的持续性连接功能,使得构建B/S模式的实时应用成为可能。Websockets常常用在那些带有聊天功能的WEB应用上。

    下面的图片就非常贴切地阐释了一个APT攻击用到的websockets:

    如何全面掌控session 且看WebSocket跨站劫持

    科普:

    同源策略(Same origin policy):同源是指,域名,协议,端口相同,即浏览器会检查同一浏览器的不同选项卡中,来源相同的脚本才能跨选项卡执行。

    Origin字段:浏览器在发送POST请求的时候可能会加上一个Origin字段,这个Origin字段主要是用来标识出最初请求是从哪里发起的。假如浏览器不能确定源在哪里,那么在发送的请求里面Origin字段的值就为空。

    IronWASP:某开源WEB测试平台,用户可以自定义安全扫描,并且可以自己用python/ruby来定义插件系统。相关介绍见:http://www.freebuf.com/tools/32948.html

    ZAP(Zed Attack Proxy):是一款集成各种工具的渗透测试框架,可以发现在WEB应用程序中的漏洞,相关介绍见:http://www.freebuf.com/tools/5427.html

    WebSocket的安全评估

    最近,我们对一个拥有复杂菜单选项和功能的WEB应用做了安全评估。该应用中大部分操作都用到了web-sockets,这意味着其大多数行为都不会记录到http代理日志上。

    首先,我们打开主页后,网站会加载一个带有JS脚本和CSS文件的静态网页。此后,整个通信交互会转为Websockets模式,浏览器和服务端之间会建立websocket连接,从而加载网站里所有可见的HTML资源。点击链接或者提交Form表单时,浏览器会向服务端发送一些WebSocket消息。服务器处理了这些消息后,会通过WebSocket进行反馈,而后客户端浏览器会展示新的HTML内容。

    这时当websocket消息在进行交互时,通信数量是非常巨大的。每隔一秒它们之间会有心跳探测包的交互。然而现有的工具达不到我的要求,我不得不给IronWASP添加了一个Websocket消息分析装置和一个WebSocket客户端,这样它才能识别Websocket从而尝试fuzz其漏洞。你可以在在这里了解下相关知识。

    在测试这个应用时,我发现它存在WebSocket跨站劫持(Cross-Site WebSocket Hijacking)漏洞(由christian schneider首创)。当然,我会在给大家介绍测试方法之前,解释下这个漏洞的影响。在测试相关Websockets应用之前,我们需要先做下准备。

    WebSocket跨站劫持漏洞实验准备

    大家应该明白,同源策略(SOP)不会通过浏览器在websockets上强制执行(同一浏览器下,受SSL保护的页面,不会让非SSL的WebSocket通过),我们测试的应用采用了http cookie作为session认证,WebSocket通过浏览器发送的消息不会有Session ID或是随机参数。

    这样一来,假如某用户登录了带有漏洞的WEB应用,然后在同一浏览器还打开了http://attacker.com(攻击者的网站),http://attacker.com可以尝试通过该漏洞应用与应用的服务端建立一个WebSocket连接,然后通过浏览器发送一个带有效的认证Session ID的请求包。于是,这个由攻击者网站建立的WebSocket连接会和应用本身有相同的权限。

    由于整个应用都是以websockets为基础运行的,劫持了WebSocket就相当于劫持了用户的session。所以这个漏洞在本质上和存储型跨站脚本漏洞是一样的。

    假如你认为这就很糟了,那当你听到某些情况下WebSocket跨站脚本,甚至可以在用户系统上实现远程代码执行的时候,会不会更惊讶呢 事见IPython Notebook的案例。

    测试之前,你首先要做的就是确认该应用是否存在WebSockets。幸运的是,做这个非常简单,你只需要知道以下三点:

    1.WebSocket的URL连接一般是以ws://或者wss://开头的。

    2.需要检测建立连接的Origin头,该网页可能是通过Origin字段建立的WebSocket链接。

    3.浏览器和服务端之间发送的消息中,我们可以从中检查出普通WebSocket连接的特征。

    下面这张图会给你展示:如何通过IronWASP日志得到Origin字段的值和WebSocket的URL值。

    如何全面掌控session 且看WebSocket跨站劫持

    一旦你得到这些信息,你可以使用一些特殊方法,对跨站WebSocket劫持漏洞进行检测。我在这里例举三个简单的例子:

    使用代理软件(如Burpsuite):

    这里必须提到的是,burpsuite可以捕获和记录WebSockets的消息。而ZAP和IronWASP是我所知道的,可以重放websocket请求的软件。

    在burpsuite里,我们不能重放websockets消息,但我们还是可以在有限条件下,检测WebSocket握手包是否成功。为了进行测试,我们需要分析websocket的升级请求包:它们会通过http或者https发送,因此可以被重放。

    以下截图为burpsuite重放器(Repeat选项卡)的记录,其显示了websocket连接的有效请求和应答情况:

    如何全面掌控session 且看WebSocket跨站劫持

    为了测试这个漏洞,我们需要发送另一个带有重制后的Origin头的请求包。假如我们回应包里有“101 Web Socket Protocol Handshake”的标志,这就表示WebSocket已经建立成功了。

    假如连接没有建立成功,那就意味着该应用不存在这个漏洞,因为它会拒绝外部的WebSocket连接。建立成功后,我们就可以开始下一步测试,看看该应用是否有WebSocket跨站劫持漏洞。这里需要说明一下:即使已经建立连接,也需要其如Origin的正常连接一般,确认得到服务端对WebSocket消息的应答之后,才能证明该应用存在漏洞。这是因为开发者可能会同时启用Origin检测与连接权限认证。因此我们的实验中也许会出下面这种情况:建立的连接可以一直保持,但拥有外部来源的Origins不会通过认证。

    ZAP可以重放WebSocket消息,但据我了解,它并不能更改Origin头。下面介绍的方法可以给你科普下,如何通过CSWSH(WebSocket跨站劫持)来获得更多的东西。

    使用WebSocket跨站劫持的在线测试工具

    打开需要测试的WEB应用登入其中,然后在同一浏览器中开一个新选项卡,访问http://ironwasp.org/cswsh.html(模拟的黑客网站),输入该WebSocket的URL地址,然后点击网页上的Connect按钮。一旦建立连接,你就可以通过这个页面向WebSocket的服务器发送消息。我们需要通过重放有效session发送过的消息,然后查看服务器的回应包。

    假如服务端的回应与前面有效session发送的正常包相同,那就说明该应用可能存在WebSocket跨站劫持漏洞。

    如何全面掌控session 且看WebSocket跨站劫持

    如何全面掌控session 且看WebSocket跨站劫持

    使用IronWASP

    IronWASP可以做到更多,即使是最基础的检测也能提供自动化脚本检查。

    使用IronWASP的WebSocket客户端

    以上测试Origin的方法的使用的服务端是http://ironwasp.org,假如你想要更加灵活地设置Origin值,你可以使用IronWASP的客户端功能。它允许你自定义Origin值来测试WebSocket连接。

    如何全面掌控session 且看WebSocket跨站劫持

    在以下环境下可能会用到客户端功能:

    1.应用允许来自开放的Origin的WebSocket连接

    2.应用允许来自localhost和内网IP的Origin字段值

    这种做法是为了方便开发者和应用的内部测试。通过使用IronWASP的客户端,你可以尝试内网IP或者localhost作为Origin是否能够生效。假如可以的话,那没准儿你可以耍一点小手段,在真实环境下利用这个漏洞。比如,假如某个应用允许http:/127.0.0.1:8080作为Origin字段,那我们就可以这样做:若受害者正好有个在本地8080端口运行的WEB应用,而且其存在跨站脚本漏洞。假如满足这些条件,黑客可以先在该WEB应用上进行跨站攻击,然后再向目标应用服务端建立WebSocket连接:

    如何全面掌控session 且看WebSocket跨站劫持

    使用IronWASP的WebSocket API进行自动化检测

    假如你需要利用localhost或者内网IP进行测试Origin头,使用客户端脚本进行自动化检测会让你的行动更加轻松。IronWASP允许你使用Python或者Ruby进行实现自定义脚本编写。

    下面这个脚本可以单独检测Origin头里填充的内网IP地址,测试服务端对此是否认可:

    import clr
    clr.AddReference("WebsocketClient.exe")
    from WebsocketClient import *
    def check_conn(origin):
    print "Testing origin - " + origin
    ws = SyncWebsockClient()
    ws.Connect("ws://tatgetapp.com/ws", origin, "SessionID=KSDI2923EWE9DJSDS01212")
    ws.Send("first message to send")
    msg = ws.Read()
    ws.Close()
    if msg == "message that is part of valid session":
    print "Connection successful!!"
    return True
    else:
    return False
    def check_nw():
    for nws in ["192.168.0.0/16", "172.16.0.0/12", "10.0.0.0/8"]:
    for ip in Tools.NwToIp(nws):
    if check_conn("http://" + ip):
    break
    check_nw()
    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。