├── install_docker_kali_x64.sh ├── README.md └── pentestlab.sh /install_docker_kali_x64.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | if [ "$1" != "-f" ]; then 5 | echo "For Kali 2020 and other newer linux distros, this script is no longer needed." 6 | echo "Please use:" 7 | echo " sudo apt install docker.io" 8 | echo "" 9 | echo "If you still would like to use this script then append the flag -f" 10 | echo " ./install_docker_kali_x64.sh -f" 11 | exit 1 12 | fi 13 | 14 | 15 | if fuser /var/lib/dpkg/lock > /dev/null 2>&1 16 | then 17 | echo "Software management (APT) is already running. Cannot install docker right now." 18 | echo "Just wait a minute or two and try again" 19 | exit 20 | fi 21 | 22 | 23 | sudo apt-get update 24 | 25 | # apt-get dependencies 26 | sudo apt-get install \ 27 | apt-transport-https \ 28 | ca-certificates \ 29 | curl \ 30 | software-properties-common 31 | 32 | # Add gpg key for docker 33 | curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - 34 | 35 | if grep -q download.docker.com /etc/apt/sources.list; then 36 | echo sources.list already contains download.docker.com 37 | else 38 | echo Adding to sources.list 39 | echo "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable" | sudo tee --append /etc/apt/sources.list > /dev/null 40 | fi 41 | 42 | sudo apt-get update 43 | 44 | sudo apt-get install docker-ce 45 | 46 | # Start Docker on boot 47 | sudo systemctl enable docker -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Local PentestLab Management Script 2 | 3 | Bash script to manage web apps using docker and hosts aliases. 4 | Made for Kali linux, but should work fine with pretty much any linux distro. 5 | 6 | ### Current available webapps 7 | 8 | * bWAPP 9 | * WebGoat 7.1 10 | * WebGoat 8.0 11 | * Damn Vulnerable Web App 12 | * Mutillidae II 13 | * OWASP Juice Shop 14 | * WPScan Vulnerable Wordpress 15 | * OpenDNS Security Ninjas 16 | * Altoro Mutual 17 | * Vulnerable GraphQL API 18 | 19 | 20 | ### Get started 21 | 22 | Using any of these apps can be done in 3 quick and simple steps. 23 | 24 | #### 1) Clone the repo 25 | Clone this repo, or download it any way you prefer 26 | ``` 27 | git clone https://github.com/eystsen/pentestlab.git 28 | cd pentestlab 29 | ``` 30 | 31 | #### 2) Install docker 32 | The provided docker install script is no longer needed. 33 | On Kali 2020 you can install docker using apt, like this: 34 | ``` 35 | sudo apt install docker.io 36 | ``` 37 | 38 | For any other distro, use the prefered way to install docker. 39 | 40 | 41 | #### 3) Start an app on localhost 42 | Now you can start and stop one or more of these apps on your system. 43 | As an example, to start bWAPP just run this command 44 | ``` 45 | ./pentestlab.sh start bwapp 46 | ``` 47 | This will download the docker, add bwapp to hosts file and run the docker 48 | mapped to one of the localhost IPs. 49 | That means you can just point your browser to http://bwapp and it will be up 50 | and running. 51 | 52 | 53 | #### 4) Start an app and expose it from machine 54 | Use the startpublic command to bind the app to your IP 55 | ``` 56 | ./pentestlab.sh startpublic bwapp 57 | ``` 58 | If you have multiple interfaces and/or IPs, **or** you need to expose the app on a different port specify it like this 59 | ``` 60 | ./pentestlab.sh startpublic bwapp 192.168.1.105 8080 61 | ``` 62 | IP needs to be an IP on the machine and port in this example is 8080 63 | 64 | You can only have one app exposed on any given port. If you need to expose more than one app, you need to use different ports. 65 | 66 | 67 | #### 5) Stopp any app 68 | To stop any app use the stop command 69 | ``` 70 | ./pentestlab.sh stop bwapp 71 | ``` 72 | 73 | 74 | #### Print a complete list of available projects use the list command 75 | ``` 76 | ./pentestlab.sh list 77 | ``` 78 | 79 | #### Running just the script will print help info 80 | ``` 81 | ./pentestlabs.sh 82 | ``` 83 | 84 | 85 | ### Usage 86 | ``` 87 | Usage: ./pentestlab.sh {list|status|info|start|startpublic|stop} [projectname] 88 | 89 | This scripts uses docker and hosts alias to make web apps available on localhost" 90 | 91 | Ex. 92 | ./pentestlab.sh list 93 | List all available projects 94 | 95 | ./pentestlab.sh status 96 | Show status for all projects 97 | 98 | ./pentestlab.sh start bwapp 99 | Start docker container with bwapp and make it available on localhost 100 | 101 | ./pentestlab.sh startpublic bwapp 102 | Start docker container with bwapp and make it available on machine IP 103 | 104 | ./pentestlab.sh stop bwapp 105 | Stop docker container 106 | 107 | ./pentestlab.sh info bwapp 108 | Show information about bwapp project 109 | ``` 110 | 111 | ### Dockerfiles from 112 | DVWA - Ryan Dewhurst (vulnerables/web-dvwa) 113 | Mutillidae II - OWASP Project (citizenstig/nowasp) 114 | bWapp - Rory McCune (raesene/bwapp) 115 | Webgoat(s) - OWASP Project 116 | Juice Shop - OWASP Project (bkimminich/juice-shop) 117 | Vulnerable Wordpress - github.com/wpscanteam/VulnerableWordpress 118 | Security Ninjas - OpenDNS Security Ninjas 119 | Altoro Mutual - github.com/hclproducts/altoroj 120 | Vulnerable GraphQL API - Carve Systems LLC (carvesystems/vulnerable-graphql-api) 121 | 122 | github references means the docker is custom created and hosted in dockerhub. 123 | 124 | 125 | ## Troubleshoot / FAQ 126 | 127 | ### I can't connect to the application I just stared, what is wrong? 128 | - Make sure you are using HTTP not HTTPS 129 | - Try using the IP address instead of the name (to see if the issue is with host file or docker) 130 | - If you are still not able to connect then follow the steps below to create a ticket 131 | 132 | ### I still cannot make it work, how do I create an issue to get help? 133 | Do these steps and record ouput (image, copy paste from screen, whatever works for you) 134 | - Stop the application first (to clean up some configuration that are done during start) 135 | - Start the application again 136 | - Run this command to get information about running dockers 137 | ``` 138 | sudo docker ps 139 | ``` 140 | - Try to access the application using the IP address 141 | -------------------------------------------------------------------------------- /pentestlab.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | ETC_HOSTS=/etc/hosts 5 | 6 | ######################### 7 | # The command line help # 8 | ######################### 9 | display_help() { 10 | echo "Local PentestLab Management Script (Docker based)" 11 | echo 12 | echo "Usage: $0 {list|status|info|start|startpublic|stop} [projectname]" >&2 13 | echo 14 | echo " This scripts uses docker and hosts alias to make web apps available on localhost" 15 | echo 16 | echo " Ex." 17 | echo " $0 list" 18 | echo " List all available projects" 19 | echo " $0 status" 20 | echo " Show status for all projects" 21 | echo " $0 start bwapp" 22 | echo " Start project and make it available on localhost" 23 | echo " $0 startpublic bwapp" 24 | echo " Start project and make it publicly available (to anyone with network connectivity to the machine)" 25 | echo " $0 info bwapp" 26 | echo " Show information about bwapp proejct" 27 | echo 28 | echo " Dockerfiles from:" 29 | echo " DVWA - Ryan Dewhurst (vulnerables/web-dvwa)" 30 | echo " Mutillidae II - OWASP Project (citizenstig/nowasp)" 31 | echo " bWapp - Rory McCune (raesene/bwapp)" 32 | echo " Webgoat(s) - OWASP Project" 33 | echo " Juice Shop - OWASP Project (bkimminich/juice-shop)" 34 | # echo " Security Sheperd - OWASP Project (ismisepaul/securityshepherd)" 35 | echo " Vulnerable Wordpress - Custom made from github.com/wpscanteam/VulnerableWordpress" 36 | echo " Security Ninjas - OpenDNS Security Ninjas AppSec Training" 37 | echo " Altoro Mutual - Custom made from github.com/hclproducts/altoroj" 38 | echo " Vulnerable GraphQL API - Carve Systems LLC (carvesystems/vulnerable-graphql-api)" 39 | 40 | exit 1 41 | } 42 | 43 | 44 | ############################################ 45 | # Check if docker is installed and running # 46 | ############################################ 47 | if ! [ -x "$(command -v docker)" ]; then 48 | echo 49 | echo "Docker was not found. Please install docker before running this script." 50 | echo "For kali linux you can install docker with the following command:" 51 | echo " apt install docker.io" 52 | exit 53 | fi 54 | 55 | if sudo service docker status | grep inactive > /dev/null 56 | then 57 | echo "Docker is not running." 58 | echo -n "Do you want to start docker now (y/n)?" 59 | read answer 60 | if echo "$answer" | grep -iq "^y"; then 61 | sudo service docker start 62 | else 63 | echo "Not starting. Script will not be able to run applications." 64 | fi 65 | fi 66 | 67 | 68 | ######################### 69 | # List all pentest apps # 70 | ######################### 71 | list() { 72 | echo "Available pentest applications" >&2 73 | echo " bwapp - bWAPP PHP/MySQL based from itsecgames.com" 74 | echo " webgoat7 - OWASP WebGoat 7.1" 75 | echo " webgoat8 - OWASP WebGoat 8.0" 76 | echo " webgoat81 - OWASP WebGoat 8.1" 77 | echo " dvwa - Damn Vulnerable Web Application" 78 | echo " mutillidae - OWASP Mutillidae II" 79 | echo " juiceshop - OWASP Juice Shop" 80 | echo " vulnerablewordpress - WPScan Vulnerable Wordpress" 81 | echo " securityninjas - OpenDNS Security Ninjas" 82 | echo " altoro - Altoro Mutual Vulnerable Bank" 83 | echo " graphql - Vulnerable GraphQL API" 84 | 85 | # echo " securitysheperd - OWASP Security Sheperd" 86 | echo 87 | exit 1 88 | 89 | } 90 | 91 | ######################### 92 | # Info dispatch # 93 | ######################### 94 | info () { 95 | case "$1" in 96 | bwapp) 97 | project_info_bwapp 98 | ;; 99 | webgoat7) 100 | project_info_webgoat7 101 | ;; 102 | webgoat8) 103 | project_info_webgoat8 104 | ;; 105 | webgoat81) 106 | project_info_webgoat8 107 | ;; 108 | dvwa) 109 | project_info_dvwa 110 | ;; 111 | mutillidae) 112 | project_info_mutillidae 113 | ;; 114 | juiceshop) 115 | project_info_juiceshop 116 | ;; 117 | vulnerablewordpress) 118 | project_info_vulnerablewordpress 119 | ;; 120 | securityninjas) 121 | project_info_securityninjas 122 | ;; 123 | altoro) 124 | project_info_altoro 125 | ;; 126 | graphql) 127 | project_info_graphql 128 | ;; 129 | *) 130 | echo "Unknown project name" 131 | list 132 | ;; 133 | esac 134 | } 135 | 136 | 137 | 138 | ######################### 139 | # hosts file util # 140 | ######################### # Based on https://gist.github.com/irazasyed/a7b0a079e7727a4315b9 141 | function removehost() { 142 | if [ -n "$(grep $1 /etc/hosts)" ] 143 | then 144 | echo "Removing $1 from $ETC_HOSTS"; 145 | sudo sed -i".bak" "/$1/d" $ETC_HOSTS 146 | else 147 | echo "$1 was not found in your $ETC_HOSTS"; 148 | fi 149 | } 150 | 151 | function addhost() { # ex. 127.5.0.1 bwapp 152 | HOSTS_LINE="$1\t$2" 153 | if [ -n "$(grep $2 /etc/hosts)" ] 154 | then 155 | echo "$2 already exists in /etc/hosts" 156 | else 157 | echo "Adding $2 to your $ETC_HOSTS"; 158 | sudo -- sh -c -e "echo '$HOSTS_LINE' >> /etc/hosts"; 159 | 160 | if [ -n "$(grep $2 /etc/hosts)" ] 161 | then 162 | echo -e "$HOSTS_LINE was added succesfully to /etc/hosts"; 163 | else 164 | echo "Failed to Add $2, Try again!"; 165 | fi 166 | fi 167 | } 168 | 169 | 170 | ######################### 171 | # PROJECT INFO & STARTUP# 172 | ######################### 173 | project_info_bwapp () 174 | { 175 | echo "http://www.itsecgames.com" 176 | } 177 | 178 | project_startinfo_bwapp () 179 | { 180 | echo "Default username/password: bee/bug" 181 | 182 | if [ -z $1 ] 183 | then 184 | echo "Run install first to use bWapp at http://bwapp/install.php" 185 | else 186 | echo "Run install first to use bWapp at http://$1/install.php" 187 | fi 188 | } 189 | 190 | project_info_webgoat7 () 191 | { 192 | echo "https://www.owasp.org/index.php/Category:OWASP_WebGoat_Project" 193 | } 194 | 195 | project_startinfo_webgoat7 () 196 | { 197 | echo "WebGoat 7.0 now runnung at http://webgoat7/WebGoat or http://127.6.0.1/WebGoat" 198 | } 199 | 200 | project_info_webgoat8 () 201 | { 202 | echo " https://www.owasp.org/index.php/Category:OWASP_WebGoat_Project" 203 | } 204 | 205 | project_startinfo_webgoat8 () 206 | { 207 | echo "WebGoat 8.0 now runnung at http://webgoat8/WebGoat or http://127.7.0.1/WebGoat" 208 | } 209 | 210 | project_startinfo_webgoat81 () 211 | { 212 | echo "WebGoat 8.1 now runnung at http://webgoat81/WebGoat or http://127.17.0.1/WebGoat" 213 | echo "WebWolf is not mapped yet, so only challenges not using WebWolf can be completed" 214 | } 215 | 216 | 217 | project_info_dvwa () 218 | { 219 | echo "http://www.itsecgames.com" 220 | } 221 | 222 | project_startinfo_dvwa () 223 | { 224 | echo "Default username/password: admin/password" 225 | echo "Remember to click on the CREATE DATABASE Button before you start" 226 | } 227 | 228 | project_info_mutillidae () 229 | { 230 | echo "https://www.owasp.org/index.php/OWASP_Mutillidae_2_Project" 231 | } 232 | 233 | project_startinfo_mutillidae () 234 | { 235 | echo "Remember to click on the create database link before you start" 236 | } 237 | 238 | project_info_juiceshop () 239 | { 240 | echo "https://owasp-juice.shop" 241 | } 242 | 243 | project_startinfo_juiceshop () 244 | { 245 | echo "OWASP Juice Shop now running" 246 | } 247 | 248 | project_info_securitysheperd () 249 | { 250 | echo "https://www.owasp.org/index.php/OWASP_Security_Shepherd" 251 | } 252 | 253 | project_startinfo_securitysheperd () 254 | { 255 | echo "OWASP Security Sheperd running" 256 | } 257 | 258 | project_info_vulnerablewordpress () 259 | { 260 | echo "https://github.com/wpscanteam/VulnerableWordpress" 261 | } 262 | 263 | project_startinfo_vulnerablewordpress () 264 | { 265 | echo "WPScan Vulnerable Wordpress site now running" 266 | } 267 | 268 | project_info_securityninjas () 269 | { 270 | echo "https://github.com/opendns/Security_Ninjas_AppSec_Training" 271 | } 272 | 273 | project_startinfo_securityninjas () 274 | { 275 | echo "Open DNS Security Ninjas site now running" 276 | } 277 | project_info_altoro () 278 | { 279 | echo "https://github.com/opendns/Security_Ninjas_AppSec_Training" 280 | } 281 | 282 | project_startinfo_altoro () 283 | { 284 | echo "Sign in with username jsmith and password demo1234 to initialize database." 285 | echo "Second known credential is admin/admin" 286 | } 287 | 288 | project_info_graphql () 289 | { 290 | echo "https://carvesystems.com/news/the-5-most-common-graphql-security-vulnerabilities/" 291 | } 292 | 293 | project_startinfo_graphql () 294 | { 295 | echo "Vulnerable GraphQL now mapped to port 80 (not 3000 as documentation states)." 296 | echo "Have a look at this post for more information on this API: https://carvesystems.com/news/the-5-most-common-graphql-security-vulnerabilities/" 297 | } 298 | 299 | 300 | 301 | 302 | ######################### 303 | # Common start # 304 | ######################### 305 | project_start () 306 | { 307 | fullname=$1 # ex. WebGoat 7.1 308 | projectname=$2 # ex. webgoat7 309 | dockername=$3 # ex. raesene/bwapp 310 | ip=$4 # ex. 127.5.0.1 311 | port=$5 # ex. 80 312 | port2=$6 # optional override port (if app doesn't support portmapping) 313 | 314 | echo "Starting $fullname" 315 | addhost "$ip" "$projectname" 316 | 317 | if [ "$(sudo docker ps -aq -f name=^/$projectname$)" ]; 318 | then 319 | echo "Running command: docker start $projectname" 320 | sudo docker start $projectname 321 | else 322 | if [ -n "${6+set}" ]; then 323 | echo "Running command: docker run --name $projectname -d -p $ip:80:$port -p $ip:$port2:$port2 $dockername" 324 | sudo docker run --name $projectname -d -p $ip:80:$port -p $ip:$port2:$port2 $dockername 325 | else echo "not set"; 326 | echo "Running command: docker run --name $projectname -d -p $ip:80:$port $dockername" 327 | sudo docker run --name $projectname -d -p $ip:80:$port $dockername 328 | fi 329 | fi 330 | echo "DONE!" 331 | echo 332 | echo "Docker mapped to http://$projectname or http://$ip" 333 | echo 334 | } 335 | 336 | project_startpublic () 337 | { 338 | fullname=$1 # ex. WebGoat 7.1 339 | projectname=$2public # ex. webgoat7 340 | dockername=$3 # ex. raesene/bwapp 341 | internalport=$4 # ex. 8080 342 | publicip=$5 # ex. 192.168.0.105 343 | port=$6 # ex. 80 344 | 345 | echo "Starting $fullname for public access" 346 | 347 | if [ "$(sudo docker ps -aq -f name=^/$projectname$)" ]; 348 | then 349 | echo "Running command: docker start $projectname" 350 | sudo docker start $projectname 351 | else 352 | echo "Running command: docker run --name $projectname -d -p $publicip:$port:$internalport $dockername" 353 | sudo docker run --name $projectname -d -p $publicip:$port:$internalport $dockername 354 | fi 355 | 356 | echo "DONE!" 357 | echo 358 | if [ $port -eq 80 ] 359 | then 360 | echo "$fullname now available on http://$publicip" 361 | else 362 | echo "$fullname now available on http://$publicip:$port" 363 | fi 364 | echo 365 | } 366 | 367 | 368 | ######################### 369 | # Common stop # 370 | ######################### 371 | project_stop () 372 | { 373 | fullname=$1 # ex. WebGoat 7.1 374 | projectname=$2 # ex. webgoat7 375 | 376 | if [ "$(sudo docker ps -q -f name=^/$projectname$)" ]; 377 | then 378 | echo "Stopping... $fullname" 379 | echo "Running command: docker stop $projectname" 380 | sudo docker stop $projectname 381 | removehost "$projectname" 382 | fi 383 | 384 | projectname=${projectname}public 385 | if [ "$(sudo docker ps -q -f name=^/$projectname$)" ]; 386 | then 387 | echo "Stopping... $fullname" 388 | echo "Running command: docker stop $projectname" 389 | sudo docker stop $projectname 390 | fi 391 | } 392 | 393 | 394 | 395 | project_running() 396 | { 397 | projectname=$1 398 | shortname=$2 399 | url=$3 400 | running=0 401 | 402 | if [ "$(sudo docker ps -q -f name=^/${shortname}$)" ]; then 403 | echo "$projectname running at $url (localhost)" 404 | running=1 405 | fi 406 | if [ "$(sudo docker ps -q -f name=^/${shortname}public$)" ]; then 407 | echo "$projectname running (public)" 408 | running=1 409 | fi 410 | if [ $running -eq 0 ]; 411 | then 412 | echo "$projectname not running" 413 | fi 414 | } 415 | 416 | project_status() 417 | { 418 | project_running "bWapp " "bwapp" "http://bwapp" 419 | project_running "WebGoat 7.1 " "webgoat7" "http://webgoat7/WebGoat" 420 | project_running "WebGoat 8.0 " "webgoat8" "http://webgoat8/WebGoat" 421 | project_running "WebGoat 8.1 " "webgoat81" "http://webgoat81/WebGoat" 422 | project_running "DVWA " "dvwa" "http://dvwa" 423 | project_running "Mutillidae II " "mutillidae" "http://mutillidae" 424 | project_running "OWASP Juice Shop " "juiceshop" "http://juiceshop" 425 | project_running "WPScan Vulnerable Wordpress " "vulnerablewordpress" "http://vulnerablewordpress" 426 | project_running "OpenDNS Security Ninjas " "securityninjas" "http://securityninjas" 427 | project_running "Altoro Mutual " "altoro" "http://altoro" 428 | project_running "Vulnerable GraphQL API " "graphql" "http://graphql" 429 | 430 | # if [ "$(sudo docker ps -q -f name=securitysheperd)" ]; then 431 | # echo "OWASP Security Sheperd running at http://securitysheperd" 432 | # else 433 | # echo "OWASP Security Sheperd not running" 434 | # fi 435 | } 436 | 437 | 438 | project_start_dispatch() 439 | { 440 | case "$1" in 441 | bwapp) 442 | project_start "bWAPP" "bwapp" "raesene/bwapp" "127.5.0.1" "80" 443 | project_startinfo_bwapp 444 | ;; 445 | webgoat7) 446 | project_start "WebGoat 7.1" "webgoat7" "webgoat/webgoat-7.1" "127.6.0.1" "8080" 447 | project_startinfo_webgoat7 448 | ;; 449 | webgoat8) 450 | project_start "WebGoat 8.0" "webgoat8" "webgoat/webgoat-8.0" "127.7.0.1" "8080" 451 | project_startinfo_webgoat8 452 | ;; 453 | webgoat81) 454 | project_start "WebGoat 8.1" "webgoat81" "webgoat/goatandwolf" "127.17.0.1" "8080" 455 | project_startinfo_webgoat81 456 | ;; 457 | dvwa) 458 | project_start "Damn Vulnerable Web Appliaction" "dvwa" "vulnerables/web-dvwa" "127.8.0.1" "80" 459 | project_startinfo_dvwa 460 | ;; 461 | mutillidae) 462 | project_start "Mutillidae II" "mutillidae" "citizenstig/nowasp" "127.9.0.1" "80" 463 | project_startinfo_mutillidae 464 | ;; 465 | juiceshop) 466 | project_start "OWASP Juice Shop" "juiceshop" "bkimminich/juice-shop" "127.10.0.1" "3000" 467 | project_startinfo_juiceshop 468 | ;; 469 | securitysheperd) 470 | project_start "OWASP Security Shepard" "securitysheperd" "ismisepaul/securityshepherd" "127.11.0.1" "80" 471 | project_startinfo_securitysheperd 472 | ;; 473 | vulnerablewordpress) 474 | project_start "WPScan Vulnerable Wordpress" "vulnerablewordpress" "eystsen/vulnerablewordpress" "127.12.0.1" "80" "3306" 475 | project_startinfo_vulnerablewordpress 476 | ;; 477 | securityninjas) 478 | project_start "Open DNS Security Ninjas" "securityninjas" "opendns/security-ninjas" "127.13.0.1" "80" 479 | project_startinfo_securityninjas 480 | ;; 481 | altoro) 482 | project_start "Altoro Mutual" "altoro" "eystsen/altoro" "127.14.0.1" "8080" 483 | project_startinfo_altoro 484 | ;; 485 | graphql) 486 | project_start "Vulnerable GraphQL API" "graphql" "carvesystems/vulnerable-graphql-api" "127.15.0.1" "3000" 487 | project_startinfo_graphql 488 | ;; 489 | *) 490 | echo "ERROR: Project start dispatch doesn't recognize the project name $1" 491 | ;; 492 | esac 493 | } 494 | 495 | project_startpublic_dispatch() 496 | { 497 | publicip=$2 498 | port=$3 499 | 500 | case "$1" in 501 | bwapp) 502 | project_startpublic "bWAPP" "bwapp" "raesene/bwapp" "80" $publicip $port 503 | project_startinfo_bwapp $publicip 504 | ;; 505 | webgoat7) 506 | project_startpublic "WebGoat 7.1" "webgoat7" "webgoat/webgoat-7.1" "8080" $publicip $port 507 | project_startinfo_webgoat7 $publicip 508 | ;; 509 | webgoat8) 510 | project_startpublic "WebGoat 8.0" "webgoat8" "webgoat/webgoat-8.0" "8080" $publicip $port 511 | project_startinfo_webgoat8 $publicip 512 | ;; 513 | webgoat81) 514 | project_startpublic "WebGoat 8.1" "webgoat81" "webgoat/goatandwolf" "8080" $publicip $port 515 | project_startinfo_webgoat8 $publicip 516 | ;; 517 | dvwa) 518 | project_startpublic "Damn Vulnerable Web Appliaction" "dvwa" "vulnerables/web-dvwa" "80" $publicip $port 519 | project_startinfo_dvwa $publicip 520 | ;; 521 | mutillidae) 522 | project_startpublic "Mutillidae II" "mutillidae" "citizenstig/nowasp" "80" $publicip $port 523 | project_startinfo_mutillidae $publicip 524 | ;; 525 | juiceshop) 526 | project_startpublic "OWASP Juice Shop" "juiceshop" "bkimminich/juice-shop" "3000" $publicip $port 527 | project_startinfo_juiceshop $publicip 528 | ;; 529 | securitysheperd) 530 | project_startpublic "OWASP Security Shepard" "securitysheperd" "ismisepaul/securityshepherd" "80" $publicip $port 531 | project_startinfo_securitysheperd $publicip 532 | ;; 533 | vulnerablewordpress) 534 | project_startpublic "WPScan Vulnerable Wordpress" "vulnerablewordpress" "eystsen/vulnerablewordpress" "3306" $publicip $port 535 | project_startinfo_vulnerablewordpress $publicip 536 | ;; 537 | securityninjas) 538 | project_startpublic "Open DNS Security Ninjas" "securityninjas" "opendns/security-ninjas" "80" $publicip $port 539 | project_startinfo_securityninjas $publicip 540 | ;; 541 | altoro) 542 | project_startpublic "Altoro Mutual" "altoro" "eystsen/altoro" "8080" $publicip $port 543 | project_startinfo_altoro $publicip 544 | ;; 545 | graphql) 546 | project_startpublic "Vulnerable GraphQL API" "graphql" "carvesystems/vulnerable-graphql-api" "3000" $publicip $port 547 | project_startinfo_altoro $publicip 548 | ;; 549 | *) 550 | echo "ERROR: Project public dispatch doesn't recognize the project name $1" 551 | ;; 552 | esac 553 | } 554 | 555 | 556 | project_stop_dispatch() 557 | { 558 | case "$1" in 559 | bwapp) 560 | project_stop "bWAPP" "bwapp" 561 | ;; 562 | webgoat7) 563 | project_stop "WebGoat 7.1" "webgoat7" 564 | ;; 565 | webgoat8) 566 | project_stop "WebGoat 8.0" "webgoat8" 567 | ;; 568 | webgoat81) 569 | project_stop "WebGoat 8.1" "webgoat81" 570 | ;; 571 | dvwa) 572 | project_stop "Damn Vulnerable Web Appliaction" "dvwa" 573 | ;; 574 | mutillidae) 575 | project_stop "Mutillidae II" "mutillidae" 576 | ;; 577 | juiceshop) 578 | project_stop "OWASP Juice Shop" "juiceshop" 579 | ;; 580 | securitysheperd) 581 | project_stop "OWASP Security Sheperd" "securitysheperd" 582 | ;; 583 | vulnerablewordpress) 584 | project_stop "WPScan Vulnerable Wordpress" "vulnerablewordpress" 585 | ;; 586 | securityninjas) 587 | project_stop "Open DNS Security Ninjas" "securityninjas" 588 | ;; 589 | altoro) 590 | project_stop "Altoro Mutual" "altoro" 591 | ;; 592 | graphql) 593 | project_stop "Vulnerable GraphQL API" "graphql" 594 | ;; 595 | *) 596 | echo "ERROR: Project stop dispatch doesn't recognize the project name $1" 597 | ;; 598 | esac 599 | } 600 | 601 | 602 | ######################### 603 | # Main switch case # 604 | ######################### 605 | 606 | case "$1" in 607 | start) 608 | if [ -z "$2" ] 609 | then 610 | echo "ERROR: Option start needs project name in lowercase" 611 | echo 612 | list # call list () 613 | break 614 | fi 615 | project_start_dispatch $2 616 | ;; 617 | startpublic) 618 | if [ -z "$2" ] 619 | then 620 | echo "ERROR: Option start needs project name in lowercase" 621 | echo 622 | list # call list () 623 | break 624 | fi 625 | 626 | if [ -z "$4" ] 627 | then 628 | port=80 629 | else 630 | port=$4 631 | fi 632 | 633 | 634 | if [ "$3" ] 635 | then 636 | publicip=$3 637 | else 638 | publicip=`hostname -I | cut -d" " -f1` 639 | 640 | echo "Continue using local IP address $publicip?" 641 | select yn in "Yes" "No"; do 642 | case $yn in 643 | Yes ) 644 | break;; 645 | No ) 646 | echo "Specify the correct IP address."; 647 | echo " ex."; 648 | echo " $0 startpublic bwapp 192.168.0.105"; 649 | exit;; 650 | esac 651 | done 652 | fi 653 | 654 | listen="$publicip:$port" 655 | if [ "$(netstat -ln4 | grep -w $listen )" ] 656 | then 657 | echo "$publicip already listening on port $port" 658 | echo "Free up the port or select a different port to bind $2" 659 | exit 660 | fi 661 | 662 | project_startpublic_dispatch $2 $publicip $port 663 | echo "WARNING! Only do this in trusted lab environment. WARNING!" 664 | echo "WARNING! Anyone with nettwork access can now pwn this machine! WARNING!" 665 | ;; 666 | stop) 667 | if [ -z "$2" ] 668 | then 669 | echo "ERROR: Option start needs project name in lowercase" 670 | echo 671 | list # call list () 672 | break 673 | fi 674 | project_stop_dispatch $2 675 | ;; 676 | list) 677 | list # call list () 678 | ;; 679 | status) 680 | project_status # call project_status () 681 | ;; 682 | info) 683 | if [ -z "$2" ] 684 | then 685 | echo "ERROR: Option start needs project name in lowercase" 686 | echo 687 | list # call list () 688 | break 689 | fi 690 | info $2 691 | ;; 692 | *) 693 | display_help 694 | ;; 695 | esac 696 | --------------------------------------------------------------------------------