OWASP Juice Shop is an intentionally insecure web application written entirely in JavaScript which encompasses the entire range of OWASP Top Ten and other severe security flaws.
For a detailed introduction, full list of features and architecture overview please visit the official project page: http://owasp-juice.shop
Setup
Deploy on Heroku (free ($0/month) dyno)
- Click the button below and follow the instructions
This is the quickest way to get a running instance of Juice Shop! If you have forked this repository, the deploy button will automatically pick up your fork for deployment! As long as you do not perform any DDoS attacks you are free to use any tools or scripts to hack your Juice Shop instance on Heroku!
From Sources
- Install node.js
- Run
git clone https://github.com/bkimminich/juice-shop.git
(or clone your own fork of the repository) - Go into the cloned folder with
cd juice-shop
- Run
npm install
(only has to be done before first start or when you change the source code) - Run
npm start
- Browse to http://localhost:3000
Docker Container
- Install Docker
- Run
docker pull bkimminich/juice-shop
- Run
docker run --rm -p 3000:3000 bkimminich/juice-shop
- Browse to http://localhost:3000 (on macOS and Windows browse to http://192.168.99.100:3000 if you are using docker-machine instead of the native docker installation)
If you want to run Juice Shop on a Raspberry Pi 3, there is an unofficial Docker image available at https://hub.docker.com/r/arclight/juice-shop_arm which is based on resin/rpi-raspbian
and maintained by @battletux.
Even easier: Run Docker Container from Docker Toolbox (Kitematic)
- Install and launch Docker Toolbox
- Search for
juice-shop
and click Create to download image and run container - Click on the Open icon next to Web Preview to browse to OWASP Juice Shop
Packaged Distributions
- Install a 64bit node.js on your Windows (or Linux) machine
- Download
juice-shop-<version>_<node-version>_<os>_x64.zip
(or.tgz
) attached to latest release - Unpack and run
npm start
in unpacked folder - Browse to http://localhost:3000
Each packaged distribution includes some binaries for SQLite bound to the OS and node.js version which npm install
was executed on.
Amazon EC2 Instance
- Setup an Amazon Linux AMI instance
- In Step 3: Configure Instance Details unfold Advanced Details and copy the script below into User Data
- In Step 6: Configure Security Group add a Rule that opens port 80 for HTTP
- Launch instance
- Browse to your instance's public DNS
#!/bin/bash
yum update -y
yum install -y docker
service docker start
docker pull bkimminich/juice-shop
docker run -d -p 80:3000 bkimminich/juice-shop
Technically Amazon could view hacking activity on any EC2 instance as an attack on their AWS infrastructure! We highly discourage aggressive scanning or automated brute force attacks! You have been warned!
Azure Web App for Containers
- Open your Azure CLIor login to the Azure Portal, open the CloudShell and then choose Bash (not PowerShell).
- Create a resource group by running
az group create --name <group name> --location <location name, e.g. "East US">
- Create an app service plan by running
az appservice plan create --name <plan name> --resource-group <group name> --sku S1 --is-linux
- Create a web app with the Juice Shop Docker image by running the following (on one line in the bash shell)
az webapp create --resource-group <group name> --plan <plan name>
--name <app name> --deployment-container-image-name bkimminich/juice-shop
For more information please refer to the detailed walkthrough with screenshots by @JasonHaley. You can alternatively follow his guide to set up OWASP Juice Shop as an Azure Container Instance.
Vagrant
- Install Vagrant and Virtualbox
- Run
git clone https://github.com/bkimminich/juice-shop.git
(or clone your own fork of the repository) - Run
cd vagrant && vagrant up
- Browse to 192.168.33.10
To show the possible impact of XSS, assume you received and (of course) clicked this inconspicuous phishing link and login. Apart from the visual/audible effect, the attacker also installed an input logger to grab credentials! This could easily run on a 3rd party server in real life!
This feature is only available when running a Vagrant box. A recording of the effect is available on Youtube:
Node.js version compatibility
OWASP Juice Shop officially supports the following versions of node.js in line as close as possible with the official node.js LTS schedule. Docker images and packaged distributions are offered accordingly:
node.js | Docker image | Packaged distributions |
---|---|---|
9.x | latest (current official release), snapshot (preview from develop branch) | juice-shop-<version>_node9_windows_x64.zip , juice-shop-<version>_node9_linux_x64.tgz |
8.x | juice-shop-<version>_node8_windows_x64.zip , juice-shop-<version>_node8_linux_x64.tgz |
Demo
Feel free to have a look at the latest version of OWASP Juice Shop: http://demo.owasp-juice.shop
This is a deployment-test and sneak-peek instance only! You are not supposed to use this instance for your own hacking endeavours! No guaranteed uptime! Guaranteed stern looks if you break it!
Customization
Via a YAML configuration file in
/config
, the OWASP Juice Shop can be customized in its content and look & feel.For detailed instructions and examples please refer to our Customization documentation.
CTF-Extension
If you want to run OWASP Juice Shop as a Capture-The-Flag event, we recommend you set it up along with a CTFd server conveniently using the official
juice-shop-ctf-cli
tool.For step-by-step instructions and examples please refer to the Hosting a CTF event chapter of our companion guide ebook.
Contributors
Collaborators
- Björn Kimminich aka
bkimminich
(Project Leader) - Jannik Hollenbach aka
J12934
- Timo Pagel aka
wurstbrot
GitHub Contributors
Based on GitHub commits on
master
as of Wed, 14 Mar 2018- Shoeb Patel aka
CaptainFreak
- m4l1c3 aka
m4l1c3
- Josh Grossman aka
tghosth
- Madhur Wadhwa aka
madhurw7
- Omer Levi Hevroni aka
omerlh
- Jln Wntr aka
JlnWntr
- Aashish Singh aka
Aashish683
- Greg Guthe aka
g-k
- Viktor Lindström aka
ViktorLindstrm
- Ingo Bente aka
ingben
- Aaron Edwards aka
aaron-m-edwards
- Yuvraj aka
evalsocket
- Gorka Vicente aka
gorkavicente
- Dinis Cruz aka
DinisCruz
- Jason Haley aka
JasonHaley
- Simon Basset aka
simbas
- Ken Friis Larsen aka
kfl
- Simon De Lang aka
simondel
- battletux aka
battletux
- AviD aka
avidouglen
- Achim Grimm aka
achimgrimm
- Christian Kühn aka
cy4n
- Stuart Winter-Tear aka
StuartWinterTear
- Manabu Niseki aka
ninoseki
- Abhishek bundela aka
abhishekbundela
- Joe Butler aka
incognitjoe
- Stephen O'Brien aka
wayofthepie
- Johanna aka
johanna-a
- Alvaro Viebrantz aka
alvarowolfx