大家好,在本文中,我将解释如何使用 Burpsuite 模糊 WebSocket 消息。我将尝试更清楚地详细解释所有事情。
本文将涵盖:
- ? WebSocket 简介
- ⚙️ DVWS 实验室设置
- ? Ws-Harness 脚本
- ⚙️ 使用 Harness 脚本进行 Burp 设置
- ? 通过 WebSocket 暴力破解登录
- ? 通过 WebSocket 进行 SQL 注入
- ⚠️ 可能的攻击和安全风险
- ? 参考资料
# ? WebSocket 简介
WebSockets 是一种允许浏览器和服务器建立单个 TCP 连接,然后在任一方向进行异步通信的技术。这对于 Web 应用程序来说非常有用,因为它允许实时更新,而浏览器无需在后台发送数百个新的 HTTP 轮询请求。这对渗透测试人员来说很糟糕,因为对 WebSockets 的工具支持并不像 HTTP 那样普遍或复杂。
Burp Suite 允许用户拦截 Websocket 消息并手动操作它们(一次一个)但是,诸如模糊测试之类的基本功能尚不可用。
为了解决这个问题,我们使用 WebSocket 利用脚本来允许 HTTP 和 WebSocket 协议之间的通信。这是一个用 python 编写的应用程序。它可以发出 HTTP 请求,并将请求传输到易受攻击的 WebSocket 应用程序。
# ⚙️ DVWS 实验室设置
DVWS 类似于 Damn Vulnerable Web Application,但客户端和服务器之间的通信基于 WebSocket。源代码可 在此处获取但是,使用准备好的 Docker 映像要容易得多。
# ? 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 作为其代理服务器。验证代理侦听器是否处于活动状态。
2- 打开 DVWS 实验室并转到左侧面板中的 Brute Force。
3- 输入随机凭据并单击登录按钮。
4- 返回 burp,您可以在 Burp Proxy 的 WebSocket History 选项卡中看到 WebSocket 条目。
5- 用户名和密码被传输(通过 WebSockets)到服务器。我们需要暴力破解“auth_pass”字段,因为我们知道用户名是“admin”。在同一文件夹中创建“message.txt”文件。我们需要指定发送到端点的消息模板。消息内容应包含“[FUZZ]”关键字。我们需要将单词“[FUZZ]”放在我们想要放置单词列表项的位置。在这种情况下,我们的目标是暴力破解“auth_pass”参数。因此,我们将其放在“auth_pass”参数值之后。
6- 执行 ws-harness 脚本以在本地主机上启动环回服务器。通过在终端上输入以下命令来启动环回服务器:复制复制
python ws-harness.py -u "ws://WebSocketURL" -m ./message.txt
(对于 HTTPS,请使用wss://WebSocketURL)
7- 在浏览器上通过 URL“ localhost:8000/?fuzz= ”访问环回服务器时,浏览器中显示的响应应如以下屏幕截图所示:
(请注意,我们必须将端点 URL 中的查询参数定义为“fuzz”。)
8- 使用 burpsuite 拦截请求并观察。
# ? 暴力登录
1- 要将捕获的请求发送到 Intruder,请右键单击请求窗口中的任意位置,然后从菜单选项中选择发送到 Intruder。
2- 一旦请求发送给入侵者,入侵者窗口就会自动显示出所选的请求。在这种情况下,当我们执行暴力攻击时,我们希望针对密码,因为我们已经知道用户名。选择模糊参数值。
3-现在转到有效负载选项卡并加载密码单词列表。我们仍然需要对单词列表进行 Base64 编码,因为服务器接受 Base64 编码的密码,因此添加有效负载处理规则来执行此操作。
4- 开始攻击并观察用户已登录。
# ? 通过 WebSocket 进行 SQL 注入
1-导航到 DVWS 实验室并转到“盲 SQL 注入”选项卡。
2- 观察 Burp WebSocket 历史记录选项卡中的请求,并根据它制作有效负载,并按照上述步骤中的说明启动环回服务器。
3-使用Sqlmap工具来模糊“auth_pass”参数。
4- 观察 Sqlmap 成功利用 SQL 注入。
# ⚠️ 可能的攻击和安全风险
- 授权与认证控制
- 与用户输入相关的风险(XSS、SQL注入、代码注入等)
- 嗅探的风险
- 跨站点 WebSocket 劫持 (CSWH)
# ? 参考资料
portswigger.net/web-security/websockets owasp.org/www-project-damn-vulnerable-web-s..
今天就这样,感谢您的光临?!!
暂无评论内容