5465 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / reset-lab.sh SH
#!/usr/bin/env bash
#
# reset-lab.sh - restore the Mercator lab to a pristine state between
# ssrf2redis.py runs, so the SSRF -> Redis -> webshell chain can be
# re-tested as a true one-shot.
#
# Steps:
#   1. ensure the colocated redis-poc container is running
#   2. delete the dropped PHP webshell from the Mercator webroot
#   3. reset Redis (FLUSHALL + dir/dbfilename back to defaults) - a stale
#      `dir` left pointing at the webroot would let a degenerate exploit
#      "succeed" without doing CONFIG SET itself, i.e. a false positive
#   4. verify the lab is clean (webshell -> HTTP 404)
#
# Only the named webshell artifact is ever removed - Mercator's own files
# (index.php, ...) are never touched.
#
# Usage:  ./reset-lab.sh [webshell-name]      (default: poc.php)
#
set -euo pipefail

VM="mercator-lab"
REDIS_CTR="redis-poc"
WEBROOT="/var/www/mercator/public"
BASE="http://127.0.0.1:8000"
SHELL_NAME="${1:-poc.php}"

echo "[*] Resetting Mercator lab (artifact: ${SHELL_NAME})"

# 1. ensure redis-poc is up
if [ -z "$(orb -m "$VM" docker ps -q -f "name=^${REDIS_CTR}$")" ]; then
    echo "[*] ${REDIS_CTR} is down -> starting it"
    orb -m "$VM" docker start "$REDIS_CTR" >/dev/null
fi

# 2. delete the webshell artifact (exact name only)
orb -m "$VM" bash -lc "rm -fv '${WEBROOT}/${SHELL_NAME}'" \
    | sed 's/^/    removed: /' || true

# 3. reset Redis to pristine defaults
rcli() { orb -m "$VM" docker exec "$REDIS_CTR" redis-cli "$@"; }
rcli FLUSHALL                       >/dev/null
rcli CONFIG SET dir /data           >/dev/null
rcli CONFIG SET dbfilename dump.rdb >/dev/null
echo "[+] Redis flushed (dbsize=$(rcli DBSIZE)), dir/dbfilename reset to defaults"

# 4. verify clean state
code="$(curl -s -o /dev/null -w '%{http_code}' "${BASE}/${SHELL_NAME}")"
if [ "$code" = "404" ]; then
    echo "[+] Clean: ${BASE}/${SHELL_NAME} -> 404"
    echo "[+] Lab reset complete - ready for a fresh exploit run"
else
    echo "[-] WARNING: ${BASE}/${SHELL_NAME} -> ${code} (expected 404)"
    exit 1
fi