Web安全学院
Web安全学院
  • 首页
  • 译序
  • 学习路线
  • 前篇
    • Web应用程序安全测试
    • 动态应用程序安全测试(DAST)
    • 带外应用程序安全测试(OAST)
  • 服务器端主题
    • SQL注入
      • SQL注入
      • SQL注入UNION攻击
      • 在SQL注入攻击中检索数据库
      • SQL盲注
      • SQL注入速查表
    • 认证
      • 认证漏洞
      • 基于密码登录中的漏洞
      • 多因素认证中的漏洞
      • 其他认证机制中的漏洞
      • 如何保护你的认证机制
    • 目录遍历
      • 目录遍历
    • 命令注入
      • OS命令注入
    • 业务逻辑漏洞
      • 业务逻辑漏洞
      • 业务逻辑漏洞示例
    • 信息泄露
      • 信息泄露漏洞
      • 如何发现并利用信息泄露漏洞
    • 访问控制
      • 访问控制漏洞与权限提升
      • 不安全的直接对象引用(IDOR)
      • 访问控制安全模型
    • 文件上传漏洞
      • 文件上传漏洞
    • 条件竞争
      • 条件竞争
    • 服务器端请求伪造(SSRF)
      • 服务器端请求伪造(SSRF)
      • 盲SSRF漏洞
    • XXE注入
      • XML外部实体(XXE)注入
      • XML实体
      • 发现并利用盲XXE漏洞
  • 客户端主题
    • 跨站脚本(XSS)
      • 跨站脚本
      • 反射型XSS
      • 存储型XSS
      • 基于DOM的XSS
      • XSS上下文
        • 跨站脚本上下文
        • 客户端模版注入
      • 利用跨站脚本漏洞
      • 内容安全策略
      • 悬空标记注入
      • 如何防范XSS漏洞
      • 跨站脚本(XSS)速查表
    • 跨站请求伪造(CSRF)
      • 跨站请求伪造(CSRF)
      • XSS与CSRF
      • 绕过CSRF令牌验证
      • 绕过SameSite Cookie限制
      • 绕过基于Referer的CSRF防御
      • 如何防范CSRF漏洞
    • 跨域资源共享(CORS)
      • 跨域资源共享(CORS)
      • 同源策略(SOP)
      • CORS和Access-Control-Allow-Origin响应标头
    • 点击劫持
      • 点击劫持(UI伪装)
    • 基于DOM的漏洞
      • 基于DOM的漏洞
      • 控制Web消息源
      • 基于DOM的开放重定向
      • 基于DOM的Cookie操纵
      • 基于DOM的JavaScript注入
      • 基于DOM的document-domain操纵
      • 基于DOM的WebSocket URL投毒
      • 基于DOM的链接操纵
      • Web消息操纵
      • 基于DOM的Ajax请求标头操纵
      • 基于DOM的本地文件路径操纵
      • 基于DOM的客户端SQL注入
      • 基于DOM的HTML5 Storage操纵
      • 基于DOM的客户端XPath注入
      • 基于DOM的客户端JSON注入
      • DOM-data操纵
      • 基于DOM的拒绝服务
      • DOM破坏
    • WebSocket
      • 测试WebSocket安全漏洞
      • 什么是WebSocket?
      • 跨站WebSocket劫持
  • 进阶主题
    • 不安全的反序列化
      • 不安全的反序列化
      • 利用不安全的反序列化漏洞
    • 测试GraphQL API
      • 测试GraphQL API
      • 什么是GraphQL?
    • 服务器端模板注入
      • 服务器端模板注入
      • 利用服务器端模板注入漏洞
    • Web缓存投毒
      • Web缓存投毒
      • 缓存设计缺陷的利用
      • 缓存实现缺陷的利用
    • HTTP Host标头攻击
      • HTTP Host标头攻击
      • 如何识别和利用HTTP Host头的漏洞
      • 密码重置投毒
    • HTTP请求走私
      • HTTP请求走私
      • 查找HTTP请求走私漏洞
      • 利用HTTP请求走私漏洞
      • 高级请求走私
        • 高级请求走私
        • HTTP/2降级
        • 响应队列投毒
        • HTTP/2专属载体
        • HTTP请求隧道
      • 浏览器驱动的请求伪造
        • 浏览器驱动的请求伪造
        • CL.0请求走私
        • 客户端异步攻击
        • 基于暂停的异步攻击
    • OAuth认证
      • OAuth 2.0认证漏洞
      • OAuth授权类型
      • OpenID Connect
      • 如何防范OAuth认证漏洞
    • JWT攻击
      • JWT攻击
      • 在Burp Suite中使用JWT
      • 算法混淆攻击
    • 原型污染
      • 什么是原型污染?
      • JavaScript原型和继承
      • 客户端
        • 客户端原型污染漏洞
        • 通过浏览器API进行原型污染
      • 服务器端
        • 服务器端原型污染
      • 预防原型污染漏洞
    • 基本技能
      • 基本技能
      • 使用编码混淆攻击
      • 在手动测试中使用Burp Scanner
Powered by GitBook
On this page
  • WebSocket
  • 操作WebSocket流量
  • 拦截并修改WebSocket消息
  • 重放并生成新的WebSocket消息
  • 操作WebSocket连接
  • WebSocket安全漏洞
  • 操作WebSocket消息来利用漏洞
  • 操作WebSocket握手来利用漏洞
  • 使用跨站WebSocket来利用漏洞
  • 如何保护WebSocket连接的安全
  1. 客户端主题
  2. WebSocket

测试WebSocket安全漏洞

PreviousWebSocketNext什么是WebSocket?

Last updated 1 year ago

在本节中,我们将讲解如何操作WebSocket消息和连接,描述WebSocket可能产生的安全漏洞类型,并举例说明如何利用WebSocket漏洞。

WebSocket

WebSocket广泛用于现代Web应用中。WebSocket通过HTTP启动,提供双向异步通信的长连接。

WebSocket可用于各种用途,包括执行用户操作和传输敏感信息。几乎所有在常规HTTP中出现的Web安全漏洞都有可能出现在WebSocket通信中。

阅读更多

Labs

如果你已经熟悉WebSocket漏洞背后的基本概念,并且只想在一些真实的、故意易受攻击的目标上练习利用它们,你可以从下面的链接访问本主题中的所有实验。

操作WebSocket流量

发现WebSocket安全漏洞通常需要以应用程序未预期的方式对其进行操作。你可以使用Burp Suite来实现这一点。

你可以使用Burp Suite来:

  • 拦截并修改WebSocket消息。

  • 重放并生成新的WebSocket消息。

  • 操作WebSocket连接。

拦截并修改WebSocket消息

你可以使用Burp Proxy拦截并修改WebSocket消息,具体如下:

  • 打开Burp的浏览器。

  • 浏览使用WebSocket的应用程序功能。你可以通过使用应用程序并查找Burp Proxy中的WebSocket history选项卡中出现的条目来确定WebSocket正在被使用。

  • 在Burp Proxy的Intercept选项卡中,确保拦截已经打开。

  • 当浏览器或服务器发送WebSocket消息时,它将显示在Intercept选项卡中,以供你查看或修改。按Forward按钮以转发消息。

注意

重放并生成新的WebSocket消息

除了实时拦截和修改WebSocket消息外,还可以重放单个消息并生成新的消息。你可以使用Burp Repeater来实现这一点。

  • 在Burp Proxy中,选择WebSockets history或Intercept选项卡的一条消息,然后从上下文菜单中选择“发送到Repeater”。

  • 在Burp Repeater中,你可以编辑之前选定的消息,并重复地发送。

  • 你可以输入新的消息,并将其发送到客户端或服务器。

  • 在Burp Repeater的“History”面板中,你可以查看通过WebSocket连接传输的消息历史记录。包括你在Burp Repeater中生成的消息,以及浏览器或服务器通过同一连接生成的任何消息。

  • 如果要编辑并重新发送历史面板中的任何消息,你可以选择该消息并从上下文菜单中选择“Edit and resend”。

操作WebSocket连接

除了操作WebSocket消息外,有时还需要操作建立连接的WebSocket握手。

在多种情况下,可能需要对WebSocket握手进行操作:

  • 这样可以扩大攻击面。

  • 有些攻击可能导致你的连接中断,因此你需要建立一个新的连接。

  • 原始握手请求中的令牌或其他数据可能已过期,需要更新。

你可以使用Burp Repeater操作WebSocket握手:

  • 如前所述,将WebSocket消息发送到Burp Repeater。

  • 在Burp Repeater中,点击WebSocket URL旁边的铅笔图标。这将打开一个向导,让你可以连接到一个现有已连接的WebSocket、克隆一个已连接的WebSocket或重新连接到一个已断开的WebSocket。

  • 如果你选择克隆一个已连接的WebSocket或重新连接到一个已断开的WebSocket,那么向导将显示WebSocket握手请求的全部详细信息,你可以在进行握手前根据需要对其进行编辑。

  • 点击“Connect”后,Burp将尝试执行配置的握手并显示结果。如果成功建立了一个新的WebSocket连接,你就可以使用它在Burp Repeater中发送新的消息。

WebSocket安全漏洞

原则上,几乎所有Web安全漏洞都可能与WebSocket有关:

  • 传输到服务器的用户输入可能会以不安全的方式进行处理,从而导致SQL注入或XML外部实体注入等漏洞。

  • 一些通过WebSocket实现的盲漏洞可能只能使用带外(OAST)技术才能检测到。

  • 如果攻击者控制的数据通过WebSocket传输给其他应用程序用户,则可能导致XSS或其他客户端漏洞。

操作WebSocket消息来利用漏洞

大多数影响WebSocket的基于输入的漏洞都可以通过篡改WebSocket消息的内容来发现和利用。

例如,假设一个聊天应用程序使用WebSocket在浏览器和服务器之间发送聊天消息。当用户输入一条聊天信息时,一个类似如下的WebSocket消息会发送到服务器:

{"message":"Hello Carlos"}

消息的内容将(再次通过WebSocket)传输给另一位聊天用户,并在该用户的浏览器中呈现如下:

<td>Hello Carlos</td>

在这种情况下,只要没有其他的输入处理或防御措施,攻击者就可以通过提交如下WebSocket消息来进行一个概念验证的XSS攻击:

{"message":"<img src=1 onerror='alert(1)'>"}

LAB

操作WebSocket握手来利用漏洞

一些WebSocket漏洞只能通过操作WebSocket握手来发现和利用。这些漏洞往往牵扯设计缺陷,例如:

  • 错误地信任HTTP标头来执行安全决策,比如X-Forwarded-For标头。

  • 会话处理机制的缺陷,因为处理WebSocket消息的会话上下文通常由握手消息的会话上下文决定。

  • 由应用程序使用的自定义HTTP标头引入的攻击面。

LAB

使用跨站WebSocket来利用漏洞

一些WebSocket安全漏洞在攻击者从其控制的网站发起跨域WebSocket连接时出现。这被称为跨站WebSocket劫持攻击,它涉及在WebSocket握手上利用跨站请求伪造漏洞。这种攻击通常具有严重的影响,允许攻击者代表受害用户执行特权操作或捕获受害用户能够访问的敏感数据。

阅读更多

如何保护WebSocket连接的安全

为了尽量降低WebSocket产生安全漏洞的风险,请使用以下指南:

  • 使用wss://协议(基于TLS的WebSocket)。

  • 硬编码WebSocket端点的URL,并且一定不要将用户可控的数据合并到这个URL。

  • 保护WebSocket握手消息免受CSRF攻击,以避免跨站WebSocket劫持漏洞。

  • 将通过WebSocket接收到的数据在两端都视为不受信任的数据。在服务器和客户端两端安全地处理数据,以防止基于输入的漏洞,如SQL注入和跨站脚本。

你可以配置Burp Proxy拦截客户端到服务器或服务器到客户端的消息。在Settings对话框中的设置中进行配置。

查看所有WebSocket实验
WebSocket interception rules
操作WebSocket消息来利用漏洞
操作WebSocket握手来利用漏洞
跨站WebSocket劫持
什么是WebSocket?