在 Burpsuite 上模糊测试 WebSocket 消息

大家好,在本文中,我将解释如何使用 Burpsuite 模糊 WebSocket 消息。我将尝试更清楚地详细解释所有事情。

本文将涵盖:

  1. ? WebSocket 简介
  2. ⚙️ DVWS 实验室设置
  3. ? Ws-Harness 脚本
  4. ⚙️ 使用 Harness 脚本进行 Burp 设置
  5. ? 通过 WebSocket 暴力破解登录
  6. ? 通过 WebSocket 进行 SQL 注入
  7. ⚠️ 可能的攻击和安全风险
  8. ? 参考资料

# ? WebSocket 简介

WebSockets 是一种允许浏览器和服务器建立单个 TCP 连接,然后在任一方向进行异步通信的技术。这对于 Web 应用程序来说非常有用,因为它允许实时更新,而浏览器无需在后台发送数百个新的 HTTP 轮询请求。这对渗透测试人员来说很糟糕,因为对 WebSockets 的工具支持并不像 HTTP 那样普遍或复杂。

Burp Suite 允许用户拦截 Websocket 消息并手动操作它们(一次一个)但是,诸如模糊测试之类的基本功能尚不可用。

为了解决这个问题,我们使用 WebSocket 利用脚本来允许 HTTP 和 WebSocket 协议之间的通信。这是一个用 python 编写的应用程序。它可以发出 HTTP 请求,并将请求传输到易受攻击的 WebSocket 应用程序。


# ⚙️ DVWS 实验室设置

DVWS 类似于 Damn Vulnerable Web Application,但客户端和服务器之间的通信基于 WebSocket。源代码可 在此处获取但是,使用准备好的 Docker 映像要容易得多。

在 Burpsuite 上模糊测试 WebSocket 消息
在 Burpsuite 上模糊测试 WebSocket 消息

# ? Ws-Harness 脚本

我们需要从下面下载 ws-harness 脚本,该脚本执行从 HTTP 到 WebSocket 的转换,反之亦然。复制复制

https://github.com/xsxtw/PayloadsAllTheThings/blob/master/Web%20Sockets/Files/ws-harness.py

或者您可以将此代码另存为ws-harness.py复制复制

#!/usr/bin/python
from __future__ import print_function
import socket,ssl
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
from websocket import create_connection, WebSocket
from urlparse import parse_qs
import argparse
import os

LOOP_BACK_PORT_NUMBER = 8000

def FuzzWebSocket(fuzz_value):
    print(fuzz_value)
    ws.send(ws_message.replace("[FUZZ]", str(fuzz_value[0])))
    result =  ws.recv()
    return result

def LoadMessage(file):
    file_contents = ""
    try:
        if os.path.isfile(file):
            f = open(file,'r')
            file_contents = f.read()
            f.close()
    except:
        print("Error reading file: %s" % file)
        exit()
    return file_contents

class myWebServer(BaseHTTPRequestHandler):

    #Handler for the GET requests
    def do_GET(self):
        qs = parse_qs(self.path[2:])
        fuzz_value = qs['fuzz']
        result = FuzzWebSocket(fuzz_value)
        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()
        self.wfile.write(result)
        return

parser = argparse.ArgumentParser(description='Web Socket Harness: Use traditional tools to assess web sockets')
parser.add_argument('-u','--url', help='The remote WebSocket URL to target.',required=True)
parser.add_argument('-m','--message', help='A file that contains the WebSocket message template to send. Please place [FUZZ] where injection is desired.',required=True)
args = parser.parse_args()

ws_message = LoadMessage(args.message)

ws = create_connection(args.url,sslopt={"cert_reqs": ssl.CERT_NONE},header={},http_proxy_host="", http_proxy_port=8080)

try:
    #Create a web server and define the handler to manage the
    #incoming request
    server = HTTPServer(('', LOOP_BACK_PORT_NUMBER), myWebServer)
    print('Started httpserver on port ' , LOOP_BACK_PORT_NUMBER)

    #Wait forever for incoming http requests
    server.serve_forever()

except KeyboardInterrupt:
    print('^C received, shutting down the web server')
    server.socket.close()
    ws.close()

# ⚙️ 使用harness脚本进行Burp设置

1- 配置您的浏览器以使用 Burp Suite 作为其代理服务器。验证代理侦听器是否处于活动状态。

在 Burpsuite 上模糊测试 WebSocket 消息

2- 打开 DVWS 实验室并转到左侧面板中的 Brute Force。

在 Burpsuite 上模糊测试 WebSocket 消息

3- 输入随机凭据并单击登录按钮。

在 Burpsuite 上模糊测试 WebSocket 消息

4- 返回 burp,您可以在 Burp Proxy 的 WebSocket History 选项卡中看到 WebSocket 条目。

在 Burpsuite 上模糊测试 WebSocket 消息
在 Burpsuite 上模糊测试 WebSocket 消息

5- 用户名和密码被传输(通过 WebSockets)到服务器。我们需要暴力破解“auth_pass”字段,因为我们知道用户名是“admin”。在同一文件夹中创建“message.txt”文件。我们需要指定发送到端点的消息模板。消息内容应包含“[FUZZ]”关键字。我们需要将单词“[FUZZ]”放在我们想要放置单词列表项的位置。在这种情况下,我们的目标是暴力破解“auth_pass”参数。因此,我们将其放在“auth_pass”参数值之后。

在 Burpsuite 上模糊测试 WebSocket 消息

6- 执行 ws-harness 脚本以在本地主机上启动环回服务器。通过在终端上输入以下命令来启动环回服务器:复制复制

python ws-harness.py -u "ws://WebSocketURL" -m ./message.txt

(对于 HTTPS,请使用wss://WebSocketURL)

在 Burpsuite 上模糊测试 WebSocket 消息

7- 在浏览器上通过 URL“ localhost:8000/?fuzz= ”访问环回服务器时,浏览器中显示的响应应如以下屏幕截图所示:

在 Burpsuite 上模糊测试 WebSocket 消息

(请注意,我们必须将端点 URL 中的查询参数定义为“fuzz”。)

8- 使用 burpsuite 拦截请求并观察。

在 Burpsuite 上模糊测试 WebSocket 消息

# ? 暴力登录

1- 要将捕获的请求发送到 Intruder,请右键单击请求窗口中的任意位置,然后从菜单选项中选择发送到 Intruder。

在 Burpsuite 上模糊测试 WebSocket 消息

2- 一旦请求发送给入侵者,入侵者窗口就会自动显示出所选的请求。在这种情况下,当我们执行暴力攻击时,我们希望针对密码,因为我们已经知道用户名。选择模糊参数值。

在 Burpsuite 上模糊测试 WebSocket 消息

3-现在转到有效负载选项卡并加载密码单词列表。我们仍然需要对单词列表进行 Base64 编码,因为服务器接受 Base64 编码的密码,因此添加有效负载处理规则来执行此操作。

在 Burpsuite 上模糊测试 WebSocket 消息

4- 开始攻击并观察用户已登录。

在 Burpsuite 上模糊测试 WebSocket 消息

# ? 通过 WebSocket 进行 SQL 注入

1-导航到 DVWS 实验室并转到“盲 SQL 注入”选项卡。

在 Burpsuite 上模糊测试 WebSocket 消息

2- 观察 Burp WebSocket 历史记录选项卡中的请求,并根据它制作有效负载,并按照上述步骤中的说明启动环回服务器。

在 Burpsuite 上模糊测试 WebSocket 消息

3-使用Sqlmap工具来模糊“auth_pass”参数。

在 Burpsuite 上模糊测试 WebSocket 消息

4- 观察 Sqlmap 成功利用 SQL 注入。

在 Burpsuite 上模糊测试 WebSocket 消息

# ⚠️ 可能的攻击和安全风险

  1. 授权与认证控制
  2. 与用户输入相关的风险(XSS、SQL注入、代码注入等)
  3. 嗅探的风险
  4. 跨站点 WebSocket 劫持 (CSWH)

# ? 参考资料

portswigger.net/web-security/websockets owasp.org/www-project-damn-vulnerable-web-s..


今天就这样,感谢您的光临?!!

在 Burpsuite 上模糊测试 WebSocket 消息
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容