bWAPP Install Guide: Docker, Linux, Windows & Login (2026)
bWAPP Install Guide: Docker, Linux & Windows
Local training lab · Often searched as “OWASP bWAPP”

bWAPP Install Guide: Docker, Linux, Windows & Login (2026)

bWAPP is a deliberately insecure PHP/MySQL application for authorized web-security training. This guide shows the fastest repeatable Docker setup, the official SourceForge and bee-box options, the local installer, the documented bee / bug training login, and safe troubleshooting for Ubuntu, RHEL, Kali Linux, and Windows.

Your reusable bWAPP command kitCopy one block, copy everything, save this page, or export a text file.
What is it?A deliberately vulnerable PHP/MySQL lab with more than 100 historical web-security exercises.
Fastest setupA reviewed community Docker build, overridden so only 127.0.0.1 exposes the web service.
Browser URLhttp://127.0.0.1:8080/bWAPP/install.php
Training loginUsername bee · Password bug

People often search for “OWASP bWAPP,” but the distinction matters: bWAPP was created as part of ITSEC GAMES and is not maintained by OWASP. OWASP lists it in the Vulnerable Web Applications Directory. The official bWAPP v2.2 archive was published in November 2014, so a modern installation is mainly a compatibility exercise. Use the original source for provenance, bee-box for a prebuilt historical environment, or a clearly labeled community container for a quick local lab.

Safety boundary: bWAPP contains intentionally exploitable behavior and depends on legacy components. Run it only on localhost or an isolated host-only lab network. Do not expose it through a public IP, tunnel, shared reverse proxy, school/work network, or cloud load balancer. Stop or remove the lab when the exercise ends.

Fastest bWAPP setup: Docker, installer, and login

Already have Docker, Docker Compose, and Git? The block below clones the community-maintained PHP 7.4 adaptation, records the exact Git commit for repeatability, and replaces its default Compose exposure with a localhost-only configuration. The database remains inside Docker and is not published to the host.

Compatibility warning: this community build uses PHP 7.4 and MySQL 5.7-era components. PHP 7.4 reached end of life in November 2022, and the database branch is also legacy. That is acceptable only for a disposable, isolated training lab—not for a normal application or shared server.
Fastest Linux or macOS startRequires Docker, Docker Compose, and Git
git clone https://github.com/lmoroz/bWAPP.git bwapp-lab
cd bwapp-lab
git rev-parse HEAD | tee BWAPP_COMMIT.txt

cat > compose.local.yml <<'YAML'
services:
  web:
    build: .
    image: bwapp-local:php74
    ports:
      - "127.0.0.1:8080:80"
    depends_on:
      - db
    environment:
      MYSQL_HOST: db
      MYSQL_USER: root
  db:
    image: mysql:5.7
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
      - bwapp_db_data:/var/lib/mysql
volumes:
  bwapp_db_data:
YAML

docker compose -f compose.local.yml up -d --build
docker compose -f compose.local.yml ps
1
Open the installer

Visit the local install.php page and use its installation link to create the training database.

2
Open the login page

Use the direct login URL after the installer reports success.

3
Sign in locally

Use bee as the username and bug as the password, or create a disposable local learner account.

4
Record and reset

Keep the recorded commit, document observations, and remove the volume when you need a clean lab.

Manage, stop, restart, or reset bWAPPRun from the bwapp-lab directory
# Show status and recent logs
docker compose -f compose.local.yml ps
docker compose -f compose.local.yml logs --tail 120

# Stop the lab but keep its database
docker compose -f compose.local.yml stop

# Start it again later
docker compose -f compose.local.yml start

# Remove containers and the training database
docker compose -f compose.local.yml down -v

What bWAPP is—and what it is not

bWAPP means “buggy web application.” It is a free, open-source PHP/MySQL application intentionally built with vulnerable behavior for authorized education. The project and OWASP’s directory describe more than 100 exercises spanning injection, scripting, authentication, authorization, file handling, server-side request forgery, XML, web services, parameter tampering, insecure configuration, and other historical web-security topics.

Local bWAPP Docker lab architecture with the web service bound to loopback

Useful for fundamentals

The exercise menu and security-level selector help learners compare vulnerable behavior with partial and stronger controls.

Useful for request analysis

Browser developer tools or a local intercepting proxy can show how input, cookies, parameters, and responses change.

Legacy by design

The official v2.2 archive dates to November 2, 2014. Containers or bee-box reduce compatibility work, but they do not modernize the underlying lessons.

Not a complete 2026 curriculum

bWAPP predates the OWASP Top 10:2025 and modern API, cloud, identity, supply-chain, and software-delivery practices. Use it as one lab, not as a complete security program.

The most accurate phrasing is: bWAPP is listed by OWASP, but it is not an OWASP-maintained application. That distinction improves technical accuracy and avoids implying that every exercise maps directly to the current OWASP Top 10.

Which bWAPP installation method should you choose?

MethodBest forAdvantagesMain limitation
Reviewed community Docker buildFast local labs on Linux, macOS, or WindowsRepeatable setup and easy resetNot an official release; review and record the exact commit
Official bWAPP v2.2 ZIPSource review and custom LAMP/WAMP/XAMPP workCanonical original project filesLegacy PHP/MySQL compatibility requires more work
bee-box VMCourses that expect the historical prebuilt environmentNo separate application installationOld guest OS and services; host-only networking is essential
OWASP Broken Web Apps VMOlder courses that use several labs in one applianceMultiple vulnerable applicationsOutdated image and a larger exposed surface

For most readers, a localhost-only Docker build is the simplest option. Use the official ZIP when provenance or source inspection matters. Use bee-box only when a course expects it or when the original environment is more important than modern host integration.

Install bWAPP on Ubuntu, RHEL, Kali Linux, or Windows

The bWAPP application steps remain the same after Docker is available. What changes is the supported installation method for Docker and Compose on each operating system. Before copying commands, confirm that your OS release is supported by the current vendor documentation.

Ubuntu: Docker’s official repository

Use Docker’s official Ubuntu repository, verify the engine, then clone the community bWAPP build and apply the localhost-only Compose file.

Ubuntu bWAPP installationOfficial Docker packages plus isolated bWAPP Compose
sudo apt update
sudo apt install -y ca-certificates curl git
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources >/dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker run --rm hello-world

sudo git clone https://github.com/lmoroz/bWAPP.git /opt/bwapp-lab
cd /opt/bwapp-lab
sudo git rev-parse HEAD | sudo tee BWAPP_COMMIT.txt
sudo tee compose.local.yml >/dev/null <<'YAML'
services:
  web:
    build: .
    image: bwapp-local:php74
    ports:
      - "127.0.0.1:8080:80"
    depends_on:
      - db
    environment:
      MYSQL_HOST: db
      MYSQL_USER: root
  db:
    image: mysql:5.7
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
      - bwapp_db_data:/var/lib/mysql
volumes:
  bwapp_db_data:
YAML
sudo docker compose -f compose.local.yml up -d --build

On a headless host, keep the container bound to loopback and use an SSH local port forward rather than changing it to 0.0.0.0.

Official bWAPP download, SourceForge, bee-box, and GitHub

The official ITSEC GAMES website points to SourceForge for the original project files and bee-box. SourceForge currently lists bWAPP v2.2, modified on November 2, 2014, as the latest application archive. OWASP’s directory links to the same project but does not maintain the code.

Official bWAPP archive

Use SourceForge when you need the canonical v2.2 source, release notes, installation file, vulnerability list, or training documents.

bee-box

A prebuilt virtual machine with bWAPP installed. Use host-only networking, disable unnecessary shared services, and take a clean snapshot before training.

Community Docker adaptation

The lmoroz repository updates bWAPP for PHP 7.4 and bundles Docker files. It is convenient, but it is not an official ITSEC GAMES or OWASP image.

Source verification

Record the download URL, file hash, Git commit, and date. A hash you calculate is useful for repeatability, but it is not independent verification unless the publisher provides a trusted expected value.

Optional official source download checkDownload and inventory the archive before extraction
curl -L \
  "https://sourceforge.net/projects/bwapp/files/bWAPP/bWAPPv2.2/bWAPPv2.2.zip/download" \
  -o bWAPPv2.2.zip

# Record a local hash and inspect the archive contents
sha256sum bWAPPv2.2.zip
unzip -l bWAPPv2.2.zip | less
SourceForge warning: security software may flag the archive because it intentionally contains insecure examples. That warning is a reason to verify the project identity and isolate the files—not a reason to disable security controls across your computer.

bWAPP install.php, login page, and documented credentials

The first page is the database installer. Open http://127.0.0.1:8080/bWAPP/install.php, use the installation link once, and wait for a success message before opening login.php. The project documentation and common lab builds use bee as the username and bug as the password.

bWAPP installer and login workflow for an isolated web security training lab
1
Confirm the containers are healthy

Run docker compose ps and inspect the web and database logs if the installer cannot connect.

2
Initialize the local database

Use the installer only inside the private lab. Do not expose it after setup.

3
Sign in with the training account

Use bee / bug only in this disposable environment. Never reuse the password.

4
Choose a security level deliberately

Start with the weakest level to understand the defect, then compare stronger levels and document which control changed.

If login fails, confirm that the installation completed, clear only the lab site’s cookies, and review both service logs. Resetting the database volume is a last resort because it deletes all local training state.

A better bWAPP walkthrough: learn the control, not just the answer

A useful lab note should be reproducible, defensive, and limited to the environment you control. Avoid collecting payload lists without explaining why the application accepted the input or how a production system should prevent the same class of failure.

StepWhat to recordWhy it matters
1. ScopeLab URL, selected exercise, account, security level, Git commit or VM snapshotMakes the observation repeatable
2. BaselineNormal request, normal response, expected state changePrevents confusing ordinary behavior with a flaw
3. One controlled changeThe single input or sequence you changed inside the labIsolates the cause without unnecessary activity
4. EvidenceStatus, response difference, application state, relevant local logsSupports a defensible conclusion
5. Root causeMissing validation, authorization, encoding, resource control, or configurationTurns the exercise into an engineering lesson
6. Fix and regression testCode or architecture control plus an expected-deny testPrevents the same defect from returning
Keep the evidence minimal: do not place real credentials, personal data, or unrelated system details into screenshots, tickets, or shared notes. Synthetic lab data is enough.

bWAPP SSRF lesson: a safe local learning method

bWAPP includes a server-side request forgery exercise. The safe objective is to observe that the application server makes a request based on user-controlled input, then identify the missing destination controls. Keep every destination on loopback or inside the same isolated lab; do not probe cloud metadata services, school/work systems, or networks you do not own.

Safe SSRF lab worksheetDefensive learning scope only
Exercise goal: observe a server making a request from user-controlled input.
Safe destination: 127.0.0.1 or a service created inside the same private lab.
Record: baseline request, changed input, response difference, server-side effect.
Root cause: destination is trusted without strict validation.
Defenses: exact allowlist, DNS and resolved-IP validation, redirect checks,
egress restrictions, short timeouts, response limits, and minimal logging.

Exact destination policy

Prefer a small allowlist of required destinations. Avoid substring checks and broad scheme-only validation.

Resolution and redirects

Validate resolved addresses and every redirect destination, or disable redirects when they are not needed.

Network egress

Restrict which networks and services the application can reach, including link-local and internal management ranges.

Operational evidence

Log destination class, decision, timing, and outcome without copying secrets or full sensitive responses.

For defensive controls, use the OWASP SSRF Prevention Cheat Sheet. For API-specific context, see OWASP API7:2023.

bWAPP troubleshooting: fix the common setup problems

bWAPP diagnostic and reset commandsRun from the repository directory
# Container state and logs
docker compose -f compose.local.yml ps
docker compose -f compose.local.yml logs --tail 200 web
docker compose -f compose.local.yml logs --tail 200 db

# Check whether port 8080 is already used on Linux
sudo ss -lntp | grep ':8080' || true

# Validate the Compose file before rebuilding
docker compose -f compose.local.yml config

# Rebuild after a failed or partial build
docker compose -f compose.local.yml down
docker compose -f compose.local.yml build --no-cache
docker compose -f compose.local.yml up -d

# Intentionally erase the local training database
docker compose -f compose.local.yml down -v
docker compose -f compose.local.yml up -d --build

install.php cannot reach MySQL

Wait for MySQL to initialize, inspect both logs, and confirm that the web service uses MYSQL_HOST=db. A first start is slower than later starts.

Port 8080 is already in use

Stop the conflicting local service or change only the loopback mapping to 127.0.0.1:8081:80, then use port 8081 in the browser.

404 on the installer

The community build used here serves the application under /bWAPP/. Use /bWAPP/install.php, not a root-path URL copied from another image.

Build fails on ARM or Apple Silicon

Legacy images and packages may assume amd64. Review the Dockerfile and base-image architecture. Emulation can work but may be slower and should be treated as a compatibility workaround.

Windows cannot reach Docker

Start Docker Desktop, verify wsl --version and docker version, confirm Linux-container mode, then reopen PowerShell.

docker compose is unavailable on Kali

Use the installed docker-compose v2 command, or install a Compose plugin that matches your Docker package. Do not mix commands from unrelated package sources without checking compatibility.

Primary sources and current references

The guide distinguishes official project sources, OWASP catalog entries, current platform documentation, and community code.

What bWAPP can teach—and where modern security goes further

bWAPP is mainly a traditional web application lab. Its most transferable skill is the observation loop: identify the route, capture a normal baseline, change one controlled input, compare the result, name the trust failure, and define both a preventive control and a regression test.

Defensive lessons that connect bWAPP exercises to modern API security controls
bWAPP lessonTransferable engineering lessonModern extension
Parameter tamperingDo not trust client-controlled values or hidden fieldsTyped contracts, server-side validation, authorization, and behavior-aware monitoring
Broken authorizationEvaluate permission at the requested object, property, and functionTenant context, machine identities, delegated access, and expected-deny tests
SSRFRestrict server-side destinations and egressResolved-IP controls, redirect validation, cloud metadata protection, and service identity
InjectionSeparate untrusted data from commands and queriesPrepared interfaces, safe parsers, dependency controls, and secure error handling
Data exposureReturn only fields the caller needs and may accessProperty-level authorization, schema drift detection, masking, and privacy-conscious telemetry
Do not overstate the lab: bWAPP does not replace secure design reviews, current OWASP guidance, software-supply-chain controls, cloud and Kubernetes security, modern identity testing, or production API inventory and runtime assurance.

Continue with the OWASP Top 10 guide, the API risk guide, and the API security evaluation checklist.

bWAPP lab checklist before you begin

CheckExpected result
Source identifiedOfficial SourceForge archive or a clearly labeled community repository with its exact commit recorded
Network scopeWeb service bound to 127.0.0.1 or a private host-only VM network
Database exposureNo MySQL host port published
Legacy components acceptedUsed only inside the disposable lab; never treated as production dependencies
Installer completeDatabase created and login page loads locally
Credentials isolatedbee / bug used only in the lab and never reused
Evidence templateScope, baseline, one controlled change, result, root cause, fix, and regression test
Reset planCompose volume removal or a clean VM snapshot is ready
End-of-session actionLab stopped or removed when no longer needed

Conclusion: keep bWAPP local, repeatable, and honest about its age

bWAPP remains useful because it gathers many classic web-security mistakes into one selectable training application. The most practical modern setup is a reviewed community Docker build with a localhost-only Compose override and the exact Git commit recorded. The official v2.2 source and bee-box remain available through the project’s SourceForge pages, while OWASP provides independent directory entries.

Open the installer locally, use the documented training account, capture a normal baseline, change one input at a time, and finish each exercise with the root cause, production control, and regression test. Just as importantly, recognize the limits: a 2014 training application is a foundation for learning—not a complete map of the OWASP Top 10:2025 or modern API security.

bWAPP frequently asked questions

What is bWAPP?

bWAPP, short for buggy web application, is a free and open-source PHP/MySQL application intentionally made insecure for authorized security education. OWASP lists it in the Vulnerable Web Applications Directory, but OWASP does not maintain the application.

What is the fastest safe way to install bWAPP?

For most users, the fastest practical route is a reviewed community Docker build with a Compose override that binds the web service only to 127.0.0.1 and keeps MySQL private inside Docker. Record the exact Git commit and remove the lab when training ends.

Is there an official bWAPP Docker image?

The canonical project distribution remains the bWAPP v2.2 archive and bee-box files linked by ITSEC GAMES on SourceForge. Docker repositories are community adaptations, so review them, record the commit, and keep them isolated.

What is the latest official bWAPP version?

SourceForge currently lists bWAPP v2.2, modified on November 2, 2014, as the latest official application archive. Its age is why containers or bee-box are often easier than installing it directly on a modern PHP/MySQL stack.

What URL opens bWAPP after installation?

For the Docker workflow in this guide, first open http://127.0.0.1:8080/bWAPP/install.php. After database initialization succeeds, open http://127.0.0.1:8080/bWAPP/login.php.

What is the default bWAPP login?

The documented training credentials are bee for the username and bug for the password. Use them only in the private lab, never reuse the password elsewhere, and create a disposable local learner account when useful.

How do I install bWAPP on Ubuntu or RHEL?

Install Docker Engine from Docker’s current official repository for the supported OS release, install Git, clone the reviewed community repository, create the localhost-only Compose file, record the Git commit, and build the lab.

How do I install bWAPP on Kali Linux?

Kali’s documentation recommends the docker.io package. Install Docker, the current Compose package, and Git, then run the same localhost-only community build. Keep Kali as a testing workstation rather than placing bWAPP directly into its host Apache/PHP stack.

How do I install bWAPP on Windows?

Use a supported Windows 10 or 11 release, current WSL 2, and Docker Desktop in Linux-container mode. Clone the community repository in PowerShell, create the loopback-only Compose file, start the containers, and open the local installer.

What is bee-box?

bee-box is a prebuilt virtual machine with bWAPP installed. It is convenient for historical compatibility, but it should use host-only or another isolated network and should never be bridged directly to an untrusted network.

Does bWAPP cover the current OWASP Top 10:2025?

bWAPP contains many classic vulnerability classes, but its official release predates the 2025 list. It is useful for fundamentals, not a complete or current OWASP Top 10:2025 verification program.

How should I use the bWAPP SSRF lesson safely?

Use only loopback addresses or services created inside the same isolated lab. Focus on the root cause and defenses such as exact allowlists, resolved-IP checks, redirect controls, restricted egress, timeouts, response limits, and minimal security logging.

Apply the lab method to real API traffic

A vulnerable training application teaches observation and root-cause analysis. Production API security also requires inventory, identity and authorization context, sensitive-data controls, runtime evidence, and safe response workflows.

© 2026 Ammune Security · Run intentionally vulnerable applications only in authorized, isolated labs.