首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kali Linux Web渗透测试手册-5.7-使用ZAP测试WebSokets

翻译来自掣雷小组

成员信息:

thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt

标记红色的部分为今日更新内容。

第五章、使用跨站脚本攻击客户端

5.0、介绍

5.1、使用浏览器绕过客户端控制

5.2、识别跨站脚本漏洞

5.3、利用XSS获取Cookie

5.4、利用DOM XSS

5.5、利用BeEF执行xss攻击

5.6、从Web存储中提取信息

5.7、使用ZAP测试WebSokets

5.8、使用XSS和Metasploit获取远程shell

5.7、使用ZAP测试WebSokets

由于HTTP是一种无状态协议,它将每个请求视为惟一的,与上一个和下一个请求无关,这就是为什么应用程序需要实现会话cookie等机制来管理会话中单个用户执行的操作。作为克服这一限制的替代方案,HTML5合并了WebSockets。WebSockets通过HTTP协议在客户端和服务器之间提供了一个持久的、双向的通信通道。

在这个小节中,我们将展示如何使用OWASP_ZAP来监控、拦截和修改WebSockets通信,就像我们在渗透测试期间处理普通请求一样。

环境准备

OWASP_BWA还没有包含一个使用WebSockets的应用程序,因此我们需要使用同样来自OWASP的Damn Vulnerable Web Sockets(DVWS)(https://www.owasp.org/index.php/OWASP_Damn_Vulnerable_Web_Sockets_(DVWS))来完成这个小节。

DVWS是一个基于php的开源应用程序;从它的GitHub存储库下载到您的KaliVM:https://github.com/interfer-security/dvws/。

在理想的情况下,我们只需要下载应用程序,将其复制到Apache根目录,并启动服务使其运行,但不幸的是,在Kali Linux中并非如此。

首先,您需要使用apt install php-mysqli包来安装php-mysqli。注意它的PHP版本;在我们的例子中是7.2。检查Apacheconfig文件中的PHP版本并相应地进行调整。确保PHP模块的正确版本在/etc/apache2/mods-enabled/;如果没有,从/etc/apache2/mod-available删除不必要的:

另外,检查MySQL模块是否在php.ini启用(/etc/php/

/apache2/php.ini)。查找DynamicExtensions部分并启用(删除之前的),在这行写入extension=mysqli。

接下来,配置数据库。首先,启动MySQL服务(service mysql start),然后从终端启动MySQL客户端(mysql)。在MySQL提示符下,使用createdatabase dvws_db创建DVWS数据库;然后退出MySQL。创建数据库时,我们需要创建它的表结构。DVWS包含了一个实现此目的的脚本,因此在终端中执行以下操作:mysqldvws_db

由于DVWS使用预定义的主机名,我们需要将该名称的名称解析固定到本地地址,我们将使用该地址进行测试。使用您最喜欢的文本编辑器打开/etc/hosts并添加行:

127.0.0.1 dvws。

现在,我们可以使用service apache2 start启动Apache服务并浏览到http://dvws.local/ DVWS/。按照这里给出的说明操作,包括启动WebSockets侦听器(php ws-socket),并运行steup脚本来完成数据库的配置(http://dvws.local/DVWS/setup.php):

现在,我们准备继续向下进行。

实战演练

我们选择ZAP作为这个练习,因为它可以监视、拦截和重放WebSockets消息。Burp Suite可以监控websocket通信;但是,它不能拦截、修改和重放消息:

1.将浏览器配置为使用ZAP作为代理,在ZAP中,通过单击底部面板中的plus图标启用WebSockets选项卡:

2.现在,在浏览器中转到http://dvws.local/DVWS/,从菜单中选择Stored XSS:

3.输入一些评论然后切换到ZAP。在History选项卡中,查找到http://dvws.local:8080/post-comments;这是启动WebSockets会话的握手包:

发起websocket通信的请求包括Sec-WebSocket-Key报头和base64编码的值。此密钥不是身份验证机制;它只帮助确保服务器不接受来自非websockets客户端的连接:

服务器的响应是101的交换协议代码,其中包括一个头Sec-WebSocket-Accept,其目的与客户机使用的键类似。

4.在ZAP的WebSockets选项卡中,你可以看到有多个通信通道,也就是建立了多个连接,所有的消息都有一个方向(进出),一个操作码,一个有效载荷,这也就是要传输的信息:

5.要拦截WebSocket,请单击WebSockets选项卡中的break图标添加断点。选择需要与拦截匹配的操作码、通道和载荷模式:

6.当一个断点被命中时,消息将显示在上面的面板中,就像ZAP中的其他所有断点一样,在这里我们可以更改内容并发送或丢弃消息:

7.ZAP还具有重放/重发现有消息的能力;右键单击WebSockets选项卡中的任何一行,选择Open/Resend withMessage Editor:

8. 然后,我们将看到WebSocket Message Editor窗口,在这里我们可以更改消息的所有参数,包括消息的方向和内容,然后再次发送:

如果web应用程序易受攻击,则可以通过websocket重复的利用web应用程序中固有的大多数安全缺陷。

原理剖析

WebSocket通信是客户端通过JavaScript中的WebSocket类发起的。当创建WebSocket实例时,客户机启动与服务器的握手。当服务器响应握手并建立连接时,HTTP连接随后被WebSocket连接替换,它就变成了一个双向的二进制协议,不一定与HTTP兼容。

WebSockets是纯文本,HTTP也是。服务器仍然需要实现HTTPS来提供加密层。如果我们嗅出前面练习中(非https)与Wireshark的通信,则我们可以很容易地读取消息:

请注意客户机发送的消息是如何被隐藏的(未加密),而来自服务器的消息是如何以明文形式发送的;这是RFC 6455协议定义的一部分(http://www.rfc-base.org/txt/rfc-6455.txt)。

----------------------------------------------------------------------

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181228B1LB6000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券