SQLi via WebSockets
Code Review - Identifying the Vulnerability
Application Overview
Backend Analysis (server.py)
@sock.route('/dbconnector')
def dbconnector(sock):
while True:
response = {}
try:
data = sock.receive(timeout=1)
if not data:
continue
username = json.loads(data).get('username', '')
response["username"] = username
messages = query(username)
if not messages:
response['error'] = "No messages for this user!"
else:
response['messages'] = [msg[0] for msg in messages]
sock.send(json.dumps(response))
except Exception as e:
response['error'] = "An error occured!"
sock.send(json.dumps(response))Vulnerable Query Function
Local Testing
Setup MySQL Docker
Confirm SQLi
Exploitation with sqlmap
The Problem
Solution: HTTP-to-WebSocket Middleware
Middleware Code
Install Dependencies
Run Middleware
Run sqlmap
Question Walkthrough
Step 1: Analyze Source Code
Step 2: Create Middleware
Step 3: Run Middleware
Step 4: Confirm SQLi
Step 5: Enumerate Databases
Step 6: Enumerate Tables
Step 7: Dump Flag
Summary
Key Points
Last updated