学徒-操纵WebSocket消息以利用漏洞
# 实验室:操纵WebSocket消息以利用漏洞
# 题目
这个在线商店有一个使用 WebSockets 实现的实时聊天功能。
在代理的支持下,你提交的聊天消息可以实时查看。
若要解决实验室问题,请使用 WebSocket 消息在支持代理的浏览器中执行alert()
并弹出窗口。
- 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-messages-to-exploit-vulnerabilities
bgColor: '#001350'
textColor: '#39d50c'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
一个购物站点?
在右上角可以看到一个 “Live chat” 聊天功能,点击进入。
输入消息,例如 “hello”,然后点击 “Send” 并捕获请求数据包。
交流成功。
查看 BurpSuite 没有发现任何 WebSockets 数据包,就连 HTTP 也没有。
为什么?
若想捕获 WebSockets 消息数据包,就需要先捕获握手数据包。而在进入聊天室的时候,握手就已经完成了。
我们退回上一个页面,在进入聊天室之前,先把代理开启。
进入聊天室的一瞬间,成功捕获到了 WebSockets 的 HTTP 握手包,随之而来的是一连串的 WebSockets 消息。
我们之前发送的消息 “hello” 会被保存到服务端,当我们访问聊天室的时候,服务端会将所有消息返回给客户端,构成聊天记录。
通过客户端发送消息。
服务端返回对应的消息。
服务端返回的聊天记录,会被客户端显示在网页中。
通过开发者工具查看 HTML 上下文,发现评论位于 HTML 标签之间。
将 WebSockets 消息数据包转发至 Repeater 功能模块。
发送一次消息请求包,服务端正常返回了聊天记录。
在消息中注入 XSS 载荷,发送给服务端。
服务端信任来自客户端的数据,所以没有进行任何安全处理。服务端原封不动地返回了用户的聊天记录。
服务端返回了 XSS 载荷,并显示在网页中,成功执行alert
函数。
实验完成。
编辑 (opens new window)