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

梨子带你刷burpsuite靶场系列之客户端漏洞篇WebSocket专题

 本系列介绍PortSwigger是信息安全从业者必备工具burpsuite的发行商,作为网络空间安全的领导者,他们为信息安全初学者提供了一个在线的网络安全学院(也称练兵场),在讲解相关漏洞的同时还配

 

本系列介绍


PortSwigger是信息安全从业者必备工具burpsuite的发行商,作为网络空间安全的领导者,他们为信息安全初学者提供了一个在线的网络安全学院(也称练兵场),在讲解相关漏洞的同时还配套了相关的在线靶场供初学者练习,本系列旨在以梨子这个初学者视角出发对学习该学院内容及靶场练习进行全程记录并为其他初学者提供学习参考,希望能对初学者们有所帮助。

 

梨子有话说


梨子也算是Web安全初学者,所以本系列文章中难免出现各种各样的低级错误,还请各位见谅,梨子创作本系列文章的初衷是觉得现在大部分的材料对漏洞原理的讲解都是模棱两可的,很多初学者看了很久依然是一知半解的,故希望本系列能够帮助初学者快速地掌握漏洞原理。

 

客户端漏洞篇介绍


相对于服务器端漏洞篇,客户端漏洞篇会更加复杂,需要在我们之前学过的服务器篇的基础上去利用。

 

客户端漏洞篇 – WebSocket专题



什么是WebSocket?

WebSocket是一种通过HTTP发起的双向、全双工通信协议。它通常用于现代Web应用程序,用于异步传输。经过测试,burp经典版本1.7只支持查看WebSockets History,并不能对WebSocket包进行重放等操作,所以建议大家一步到位直接更新到最新版哦。


HTTP与WebSocket有什么区别?

从传输模式上就有区别,HTTP是只能由客户端发出请求,然后服务器返回响应,而且是立即响应。而WebSockets是异步传输的,即双方随时都可以向对方发送消息,一般可以用于对数据有实时传输需求的应用程序中。


WebSocket连接是如何建立的?

WebSocket连接通常由客户端的JS脚本发起
var ws = new WebSocket("wss://normal-website.com/chat");
这里的wss协议是经过TLS加密的,而ws就是未加密的。首先会通过HTTP发起一个WebSocket握手请求

GET /chat HTTP/1.1
Host: normal-website.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
Connection: keep-alive, Upgrade
COOKIE: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocket

如果服务器接收了握手请求,则会返回一个WebSocket握手响应

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=

建立WebSocket握手后将保持打开状态,这样双方就能随时向另一方发送消息了。WebSocket握手消息有以下值得关注的特性


  • 请求和响应中的Connection和Upgrade头表明这是一次WebSocket握手。

  • Sec-WebSocket-Version请求头指定客户端希望使用的WebSocket协议版本。通常是13。

  • Sec-WebSocket-Key请求头包含一个Base64编码的随机值,是在每个握手请求中随机生成的。

  • Sec-WebSocket-Accept响应头包含在Sec-WebSocket-Key请求头中提交的值的哈希值,并与协议规范中定义的特定字符串连接。这样做是为了防止错误配置的服务器或缓存代理导致误导性响应。



WebSocket消息长什么样?

在双端建立连接以后,就可以异步发送消息了。比如可以从客户端的JS脚本发出这样的消息
ws.send("Peter Wiener");
一般情况下,WebSocket消息使用JSON格式进行传输数据,例如
{"user":"Hal Pline","content":"I wanted to be a Playstation growing up, not a device to answer your inane questions"}


操纵WebSocket传输

我们可以通过新版的Burp操纵WebSocket传输,例如


  • 拦截和修改WebSocket消息

  • 重放并生成新的WebSocket消息

  • 操纵WebSocket连接



拦截和修改WebSocket消息

我们开启了拦截按钮以后,就可以拦截到WebSocket消息,然后直接修改。我们还可以在Proxy的设置里设置拦截哪个方向的WebSocket消息


重放并生成新的WebSocket消息

WebSocket消息也是可以发到Repeater进行重放的。只不过界面和HTTP包不太一样。我们可以在WebSockets History里找到历史接收到的WebSocket消息,然后进行重放。


操纵WebSocket连接

有的时候会因为某些原因WebSocket连接断开了,这时候我们可以点击Repeater中的小铅笔图标,里面可以选择新建、克隆、重新连接,经过这样操作以后我们就可以继续攻击了。


WebSocket安全漏洞

理论上,几乎所有的Web安全漏洞都可能与WebSocket相关,比如


  • 数据被以不安全的方式发送到服务器导致如Sql注入、XXE等

  • 一些需要通过带外技术触发的WebSocket盲打漏洞

  • 也可以通过WebSocket发消息给其他用户导致如XSS等客户端漏洞



操纵WebSocket消息利用漏洞

如果我们发送这样一条消息给其他用户
{"message":"Hello Carlos"}
这个用户接收到这条消息时会被这样被浏览器解析
Hello Carlos
这样的话我们就可以利用这个触发XSS
{"message":""}


配套靶场:操纵WebSocket消息利用漏洞

我们在聊天框中插入xss payload,但是在WebSocket消息看到尖括号被HTML编码了

然后我们将其发到Rpeater中,将其手动修改回来,重放

这样就能成功在对方浏览器触发XSS了


操纵WebSocket握手利用漏洞

有些漏洞可以通过篡改WebSocket握手请求来触发,例如


  • 利用信任关系错误执行某些策略,如篡改X-Forwarded-For头以伪造IP等

  • 篡改WebSocket握手上下文以篡改WebSocket消息

  • 注入自定义HTTP头触发的攻击



配套靶场:操纵WebSocket握手利用漏洞

我们还是试试能不能触发XSS

发现服务端发现了我们的意图关闭了WebSocket连接,并且试着重连也会马上断开,所以我们要伪装成别的IP,并且得想办法处理一下XSS payload才行

我们使用X-Forwarded-For伪装IP,并且通过大小写处理绕过了检测成功触发XSS


跨站WebSocket点击劫持



什么是跨站WebSocket点击劫持?

顾名思义,就是利用WebSocket触发的点击劫持,一般点击劫持的目的和CSRF是相同的,所以叫跨站WebSocket点击劫持。但是与常规的CSRF不同的是,跨站WebSocket点击劫持可以实现与受害者双向交互的效果。


跨站WebSocket点击劫持可以实现哪些效果?



  • 与常规CSRF类似,执行额外的违规操作。

  • 与常规CSRF不同的是,跨站WebSocket点击劫持因为可以实现双向交互,所以可以从受害者那获取敏感数据



如何发动跨站WebSocket点击劫持攻击?

因为跨站WebSocket点击劫持其实就是通过WebSocket握手触发的CSRF漏洞,所以我们要检查是否存在CSRF防护。例如这样的WebSocket握手请求就可以

GET /chat HTTP/1.1
Host: normal-website.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
Connection: keep-alive, Upgrade
COOKIE: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocket

Sec-WebSocket-Key头包含一个随机值,以防止缓存代理出错,并不是用于身份验证或会话处理的。下面我们通过一道靶场深入理解


配套靶场:跨站WebSocket点击劫持

我们发现每次重新进入聊天室都会发送一条消息获取历史聊天记录,并且没有CSRF Token,所以我们在Eploit Server构造这样的payload

然后当受害者接收到后就会发送历史聊天记录到burp collaborator中

发现历史聊天记录中的用户名和密码


如何加固WebSocket连接?



  • 使用wss://协议加密WebSocket连接

  • 硬编码WebSocket的端点URL,然后不要将用户可控的数据拼接到URL中

  • 对WebSocket握手消息进行CSRF防护

  • 在服务端和客户端均安全地处理数据,以防止基于输入的漏洞

 

总结

以上就是梨子带你刷burpsuite官方网络安全学院靶场(练兵场)系列之客户端漏洞篇 – WebSocket专题的全部内容啦,本专题主要讲了WebSocket的通信原理、以及可能出现的利用WebSocket触发的漏洞及其利用还有WebSocket连接如何加固,WebSocket对于我们还很陌生,所以这个专题还是很有趣的,感兴趣的同学可以在评论区进行讨论,嘻嘻嘻。


推荐阅读
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 利用 Zend Framework 实现高效邮件发送功能 ... [详细]
  • 深入解析HTTPS:保障Web安全的加密协议
    本文详细探讨了HTTPS协议在保障Web安全中的重要作用。首先分析了HTTP协议的不足之处,包括数据传输过程中的安全性问题和内容加密的缺失。接着介绍了HTTPS如何通过使用公钥和私钥的非对称加密技术以及混合加密机制,确保数据的完整性和机密性。最后强调了HTTPS的安全性和可靠性,为现代网络通信提供了坚实的基础。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • 本文介绍了 Confluence 6 中使用的其他 Cookie,这些 Cookie 主要用于存储产品的基本持久性和用户偏好设置,以提升用户体验。 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 本文将详细介绍如何在 Vue 项目中使用 Handsontable 插件,包括 npm 安装、基本配置和常用功能的实现。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • MySQL Server 8.0.28 升级至 8.0.30 的详细步骤
    为了修复安全漏洞,本文档提供了从 MySQL Server 8.0.28 升级到 8.0.30 的详细步骤,包括备份数据库、停止和删除旧服务、安装新版本以及配置相关环境变量。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
author-avatar
拍友2602890695
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有