热门标签 | 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对于我们还很陌生,所以这个专题还是很有趣的,感兴趣的同学可以在评论区进行讨论,嘻嘻嘻。


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文深入探讨了如何通过调整InnoDB的关键配置参数来优化MySQL的随机IO性能,涵盖了缓存、日志文件、预读机制等多个方面,帮助读者全面提升数据库系统的性能。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细介绍了如何利用Go语言和WebSockets技术构建一个高效的实时聊天系统。随着网络应用的日益复杂化,实时交互成为了提升用户体验的关键要素之一。通过本指南,开发者可以学习到最新的技术和最佳实践。 ... [详细]
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社区 版权所有