Requirements: Ruby 3.4.5 and a MySQL (or MariaDB) server.
git clone <this repo>
cd myVulnerableShop
bin/setupbin/setup installs gems, creates the rails/password MySQL user expected by
config/database.yml if it doesn't already exist, then prepares
(creates, migrates, seeds) the development and test databases. It's safe to re-run at
any time.
Then start the app:
bin/dev # Rails server + Dart Sass watcher (recommended)
# or
bin/rails server # Rails server onlyVisit http://localhost:3000 and sign in with the seeded admin account:
- email:
admin@domain.com - password:
password
Payments work out of the box without any configuration — see Payments below if you want real Stripe checkout.
This app ships with intentional vulnerabilities to practice against, CTF-style. See docs/challenges for the list of challenges and their writeups.
By default this app runs without any Stripe account or API keys. Checkout uses a
FakePaymentService that immediately marks the order as paid — no card is validated
and no network call is made — so anyone cloning the repo can run the full app right away.
If you want real Stripe checkout (Stripe Elements card form, 3D Secure redirects, etc.):
-
Create a free Stripe account and grab your test mode API keys from the Stripe Dashboard.
-
Set the following environment variables before starting the server:
export STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxx export STRIPE_PUBLISHABLE_KEY=pk_test_xxxxxxxxxxxx
-
Start the app as usual.
PaymentsControllerautomatically switches toStripePaymentServicewheneverSTRIPE_SECRET_KEYis present.
Never commit real API keys — use Stripe's test keys only.