某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

  • 实验室做题记录

    • 实验室做题记录
    • 服务器端

    • 客户端

      • 跨站脚本(XSS)

      • 跨站请求伪造(CSRF)

      • 跨域资源共享(CORS)

      • 点击劫持

      • 基于DOM的漏洞

      • WebSockets

        • 学徒-操纵WebSocket消息以利用漏洞
        • 从业者-操纵WebSocket握手以利用漏洞
          • 题目
          • 实操
            • 重发WebSockets握手请求
            • 绕过过滤器
            • 解决方案1
            • 解决方案2
            • 解决方案3(答案)
        • 从业者-跨站点WebSocket劫持
    • 高级主题

  • BurpSuite及官方实验室
  • 实验室做题记录
  • 客户端
  • WebSockets
carsaid
2023-10-11
目录

从业者-操纵WebSocket握手以利用漏洞

# 实验室:操纵WebSocket握手以利用漏洞

# 题目

这个在线商店有一个使用 WebSockets 实现的实时聊天功能。

它具有一个激进但存在缺陷的 XSS 过滤器。

若要解决实验室问题,请使用 WebSocket 消息在支持代理的浏览器中执行alert()并弹出窗口。

提示

  • 如果你正在努力绕过 XSS 过滤器,请尝试我们的XSS实验室 (opens new window)。
  • 有时候,你可以使用像X-Forwarded-For这样的 HTTP 标头来绕过基于 IP 的限制。

实验室-从业者

操纵WebSocket握手以利用漏洞 >>

- name: 实验室-从业者
  desc: 操纵WebSocket握手以利用漏洞 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/websockets/lab-manipulating-handshake-to-exploit-vulnerabilities
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 实操

点击 “ACCESS THE LAB” 进入实验室。

Not Found Image

一个购物站点。

先启用 BurpSuite 代理,然后再点击 “Live chat” 进入聊天室。

Not Found Image

进入聊天室后,成功捕获到了 WebSockets 握手请求以及该连接内的消息。

Not Found Image

发送一条聊天消息。

Not Found Image

捕获成功。

Not Found Image

将刚刚的消息转发至 Repeater 功能模块。

Not Found Image

和上个实验室一样,尝试在消息中注入 XSS 载荷。

发送请求后,服务端没有返回响应消息。而且 “Send” 按钮变成灰色了,说明当前 WebSockets 连接已断开。

Not Found Image

回到网页,刷新一下看看。好家伙,IP 地址已经被列入黑名单。

正如题目中所说的那样,“激进” 的 XSS 过滤器......

Not Found Image

但题目中也给出了提示,这个过滤器存在缺陷,可以通过X-Forwarded-For标头来绕过这种 IP 限制。

Not Found Image

# 重发WebSockets握手请求

那么对于 Repeater 中已经断开连接的 WebSockets 请求,该如何实现重发呢?

BurpSuite 很贴心,点击上方的 “Reconnect” 按钮。

Not Found Image

点击按钮之后,会弹出一个重新连接的对话框。你可以编辑请求参数,然后重新发送用于 WebSockets 握手的 HTTP 请求,如果握手成功,则会建立一个新的 WebSockets 消息连接。

Not Found Image

我们在新的握手请求中加上X-Forwarded-For标头,随意指定一个 IP 地址。然后点击 “Connect” 进行连接。

Not Found Image

成功握手并建立新的连接,我们可以继续发送 WebSockets 消息。

Not Found Image

经过测试,每当你发送一次 XSS 载荷时,你当前的 IP 地址就会被封禁,这时候你需要重新 “Reconnect”。

一些被禁止的字符:

检测到攻击:事件
  onerror
  ...

检测到攻击:JavaScript
  <script>
  javascript
  alert(
  ...

...
1
2
3
4
5
6
7
8
9
10
11
Not Found Image

每次被禁,都需要在握手请求中更换标头的 IP 地址。

Not Found Image

# 绕过过滤器

经过一段时间的测试,我发现可以通过 “大小写” 的方式来绕过 XSS 过滤器:

<Img Src=1 Onerror=Alert(5)>
1
Not Found Image

尴尬的是,虽然 HTML 标签和属性不区分大小写,但 JavaScript 是区分大小写的。Alert()是无法使用的。

Not Found Image

然后我再次进行了测试,发现可以通过两种方式避开对alert(字符的过滤。

# 解决方案1

第一种方式:

<Img Src=1 Onerror=abc=alert;abc(5)>
1

将alert函数赋值给另一个变量abc,然后通过变量abc来执行弹框操作。

Not Found Image

完美!

Not Found Image

# 解决方案2

第二种方式:

<Img Src=1 Onerror=&#97;lert(6)>
1

HTML 中的 ASCII 编码,将字符a编码为&#97;。

Not Found Image

一样完美!

Not Found Image

不管使用以上哪种方式,都可以完成实验。

Not Found Image

# 解决方案3(答案)

这是答案提供的解决方案,通过反引号来代替括号,这同样可以正确执行函数。

(我明明会的,我咋没想到)

<Img Src=1 Onerror=alert`1`>
1
编辑 (opens new window)
学徒-操纵WebSocket消息以利用漏洞
从业者-跨站点WebSocket劫持

← 学徒-操纵WebSocket消息以利用漏洞 从业者-跨站点WebSocket劫持→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式