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


推荐阅读
  • 【系列二】长连接,短连接及WebSocket介绍(含http1.0,1.1,2.0相关)
    前言上一节讲了长轮询和轮询及其实现,这节讲一讲长连接、短连接及webSocket,在讲这些之前,我们先来普及一下http相关的一 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • 面试:Websocket简介WebSocket是一种与HTTP不同的协议。两者都位于OSI模型的应用层,并且都依赖于传输层的TCP协议。虽然它们不同& ... [详细]
  • iwanttowriteasimpleAppforme(Android).Forthisitisnecessarythattheservercansenddat ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 主从复制_mysql主从复制简介
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了mysql主从复制简介相关的知识,希望对你有一定的参考价值。  ... [详细]
  • 好友关系是社交IM中非常重要的一个模块,一般意义上的理解即是成为好友关系以后。才能进行聊天沟通但是对于融云来说只要你给了的userid,我知道了对方的userid就跟 ... [详细]
  • JWT的基本使用
    1场景JSONWebToken(JWT)是一种开放标准(RFC7519),它定义了一种紧凑和自包含的方式,用于作为JSON对象在各方之 ... [详细]
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社区 版权所有