OWASP Mutillidae II Install Guide: Docker, Linux, Windows, and Safe Lab Setup
OWASP Mutillidae II: Docker, GitHub, Install & Walkthrough
Hands-on vulnerable application lab • Updated 2026

OWASP Mutillidae II Walkthrough & Tutorial: Windows and Kali Linux Install, GitHub, Docker, Download, SourceForge.net, Writeup and Solutions

Start with the working Docker commands, open the correct localhost address, initialize the database, choose the right Windows or Kali Linux path, and use a repeatable walkthrough that turns every lab into a clear security lesson and useful writeup.

OWASP Mutillidae II is one of the most practical ways to learn what insecure web behavior actually looks like. Instead of reading a vulnerability definition in isolation, you can run a deliberately vulnerable application on your own machine, observe a request and response, use the built-in hints, switch security levels, reset the lab, and document the secure fix.

Safety first: Mutillidae II is intentionally unsafe. Keep it on localhost or in an isolated virtual machine, never expose it directly to the public internet, and practice only in environments you own or have explicit permission to test. Docker-published ports can bypass some host firewall expectations, so network isolation matters more than a single firewall toggle.

Fastest Safe Start: Run OWASP Mutillidae II with Docker Compose

The most valuable information belongs first: for most learners, the official pre-built Docker Compose stack is the fastest route. It brings up the web application, MySQL, OpenLDAP, phpMyAdmin, and phpLDAPadmin together, which avoids many native PHP and database compatibility problems.

Best for most readers

Use the official mutillidae-dockerhub repository. It downloads pre-built images and starts the full lab with one Compose command.

Best for developers

Use the official mutillidae-docker repository when you want to build the containers from source and inspect the Dockerfiles.

Copy-and-paste quick start

git clone https://github.com/webpwnized/mutillidae-dockerhub.git
cd mutillidae-dockerhub
docker compose up -d

docker compose ps
curl http://127.0.0.1/set-up-database.php

Open http://127.0.0.1/. If that port is already occupied, try http://127.0.0.1:8080/. The official stack exposes the Mutillidae HTTP interface on ports 80 and 8080, HTTPS on 443, phpMyAdmin on 81, phpLDAPadmin on 82, and LDAP on 389.

Expected first-run behavior: the application may initially report that its database is missing. That is normal. Use the setup or rebuild link on the warning page, or run the curl command above, then reload the application.

Stop the lab when you finish

docker compose down

Use docker compose down -v only when you intentionally want to remove the lab's persistent volumes and start over. The -v option is destructive to the Compose-managed data.

What Is OWASP Mutillidae II?

OWASP Mutillidae II is a free, open-source, deliberately vulnerable PHP application maintained for web-security education. The official project describes it as a target for labs, classrooms, capture-the-flag exercises, security enthusiasts, and vulnerability-assessment tools. It includes more than 40 vulnerabilities and challenges, built-in hints and tutorials, secure and insecure modes, and a one-click reset capability.

The lab covers generations of the OWASP Top 10 and includes examples related to injection, cross-site scripting, authentication, authorization, file handling, information exposure, and web-service behavior. That breadth makes it useful for beginners, but the best learning comes from a disciplined process: establish a baseline, change one input, observe evidence, identify the root cause, and write down the secure implementation.

OWASP Mutillidae II deliberately vulnerable web application training lab

Current project status checked in July 2026

On July 13, 2026, the official source repository's version file reported 2.12.7, and the official Docker Hub repository also listed the www-2.12.7 image tag. Versions can change, so verify the repository version file and Docker tags before publishing a tutorial or pinning a classroom image.

CapabilityWhy it mattersHow to use it well
Built-in hintsHelps beginners progress without immediately copying an answer keyRead hints in order and record what each hint reveals
Security levelsShows how implementation choices change application behaviorRepeat the same test in insecure and secure modes
Reset or setupReturns the database and lessons to a known stateReset before reproducing a result for a writeup
Web-service labsConnects classic web vulnerabilities to service and API trafficCapture both request and response evidence
Deliberately unsafeProvides realistic behavior but creates real exposureUse localhost, an isolated VM, and a shutdown checklist

OWASP Mutillidae II Download: GitHub, Docker and the SourceForge.net Question

Readers searching for an OWASP Mutillidae II download often encounter several generations of links. The active project source is on GitHub, while the official OWASP page links to the main source repository, Docker build repository, DockerHub Compose repository, Docker Hub images, and tutorial channel.

Official source code

Use the webpwnized/mutillidae GitHub repository. Clone it with Git or use GitHub's Download ZIP option. The actual application source now lives in the repository's src directory.

Pre-built Docker Compose

Use webpwnized/mutillidae-dockerhub when you want the fastest full-stack setup using pre-built images.

Build containers locally

Use webpwnized/mutillidae-docker when you want to inspect and build the container stack yourself.

Official OWASP project page

Use the OWASP Mutillidae II project page as the source of truth for project links and maintainer resources.

What about “OWASP Mutillidae II download SourceForge.net”?

SourceForge results still appear in searches because older Mutillidae packages were distributed there. However, the maintained source has moved to GitHub. Do not assume an old SourceForge ZIP or a third-party mirror is current merely because it ranks highly. Compare the package version, repository activity, and checksum information, and prefer the links published by OWASP and the active maintainer.

A useful download rule: begin at the official OWASP project page, follow its maintained GitHub or Docker links, and verify the version before you build a lab guide around it.

Verify what you downloaded

git clone https://github.com/webpwnized/mutillidae.git
cd mutillidae
cat version
git remote -v
git log -1 --oneline

This small check records the source origin, current project version, and commit used for your lab. Include those details in an OWASP Mutillidae II writeup so another reader can reproduce the same behavior.

OWASP Mutillidae II Docker Tutorial

The project offers two official Docker paths. Use pre-built images when speed matters, or build locally when container internals are part of the lesson. Both approaches create a multi-container environment rather than a single isolated PHP container.

Option A: Pre-built Docker images with Compose

git clone https://github.com/webpwnized/mutillidae-dockerhub.git
cd mutillidae-dockerhub

docker compose pull
docker compose up -d
docker compose ps

Option B: Build the official containers from source

git clone https://github.com/webpwnized/mutillidae-docker.git
cd mutillidae-docker

docker compose -f .build/docker-compose.yml up --build --detach
docker compose -f .build/docker-compose.yml ps

The build repository documents five containers: the Mutillidae web application, MySQL database, phpMyAdmin, OpenLDAP, and phpLDAPadmin. It also documents the initial database build endpoint at http://127.0.0.1/set-up-database.php.

Useful operational commands

# See container state
docker compose ps

# Follow recent logs
docker compose logs --tail=100 -f

# Show published ports
docker ps --format "table {.Names}	{.Ports}	{.Status}"

# Restart the stack
docker compose restart

# Stop and remove containers while preserving named volumes
docker compose down

Update a pre-built Compose installation

git pull --ff-only
docker compose pull
docker compose up -d
docker compose ps

Before upgrading a class or shared lab, record the current Git commit and image tags. Lesson text, page paths, database content, and expected results can change between versions, which is why a writeup should always state its tested version.

Network warning: do not assume a host firewall alone makes a vulnerable Docker lab safe. Use a private machine or isolated virtual machine, confirm the published port bindings, avoid router port forwarding, and shut the stack down after each session.

How to Install OWASP Mutillidae II on Windows

For Windows 10 or Windows 11, Docker Desktop with the WSL 2 backend is usually the cleanest approach. It keeps the application stack reproducible and avoids manually matching Apache, PHP, and MySQL versions.

Recommended Windows method: Docker Desktop

  1. Install Docker Desktop from the official Docker documentation and start it.
  2. Confirm that Docker is running from PowerShell.
  3. Clone the official Compose repository.
  4. Start the containers and initialize the database.
  5. Open the application only from the same Windows machine.
docker version
docker compose version

git clone https://github.com/webpwnized/mutillidae-dockerhub.git
Set-Location mutillidae-dockerhub

docker compose up -d
docker compose ps

Invoke-WebRequest http://127.0.0.1/set-up-database.php -UseBasicParsing

Then open http://127.0.0.1/ or http://127.0.0.1:8080/. If PowerShell reports that git is missing, install Git for Windows or download the repository ZIP from GitHub, extract it, open PowerShell in that directory, and run the Compose commands.

Legacy Windows method: XAMPP source installation

Native XAMPP installation remains possible, but it is more sensitive to PHP extensions, database settings, file permissions, and version differences. The source repository notes that the application code lives under src, so copying the repository root directly into the web directory is a common mistake.

git clone https://github.com/webpwnized/mutillidae.git C:\lab\mutillidae-source
New-Item -ItemType Directory -Force C:\xampp\htdocs\mutillidae
Copy-Item -Recurse -Force C:\lab\mutillidae-source\src\* C:\xampp\htdocs\mutillidae\

Start Apache and MySQL from the XAMPP control panel, then browse to http://127.0.0.1/mutillidae/. Use the application's setup or reset function to initialize the database. When a native installation fails, compare PHP modules, database connectivity, Apache logs, and the current repository documentation before changing application files.

Windows isolation tip: do not create inbound router rules, do not place the lab on a public cloud VM, and do not reuse real credentials in the application's registration or login forms.

How to Install OWASP Mutillidae II on Kali Linux

Kali Linux is a natural place to run training labs, but the same isolation rules apply. A virtual machine using NAT or host-only networking is preferable to a bridged interface on a shared network. Kali's official documentation also warns that the package named docker is not the container engine; the distribution package is named docker.io.

Recommended Kali method: Docker in an isolated VM

sudo apt update
sudo apt install -y docker.io docker-compose git
sudo systemctl enable --now docker

sudo docker version
sudo docker-compose version

git clone https://github.com/webpwnized/mutillidae-dockerhub.git
cd mutillidae-dockerhub
sudo docker-compose up -d
sudo docker-compose ps

curl http://127.0.0.1/set-up-database.php

Package names can change across Kali rolling releases. The current Kali rolling repository provides a docker-compose package. If your system instead uses Docker's Compose plugin, use docker compose in place of docker-compose. Avoid installing the unrelated package named simply docker.

Optional non-root Docker use

sudo usermod -aG docker "$USER"
newgrp docker
docker ps

Membership in the Docker group effectively grants root-level control over the host. Use it only on a personal lab machine where that tradeoff is understood. Continuing to use sudo docker is acceptable for a short-lived training VM.

Legacy Kali LAMP installation

Docker is preferred, but a source installation is useful when the learning goal includes Apache, PHP, and database configuration. The following creates a local copy under Apache's document root. Exact PHP package names can vary across Kali releases.

sudo apt update
sudo apt install -y apache2 mariadb-server php php-mysql php-curl php-xml php-mbstring git
sudo systemctl enable --now apache2 mariadb

git clone https://github.com/webpwnized/mutillidae.git /tmp/mutillidae-source
sudo mkdir -p /var/www/html/mutillidae
sudo cp -a /tmp/mutillidae-source/src/. /var/www/html/mutillidae/
sudo chown -R www-data:www-data /var/www/html/mutillidae

curl -I http://127.0.0.1/mutillidae/

Open http://127.0.0.1/mutillidae/, use the setup function, and consult Apache and MariaDB logs if initialization fails. Do not weaken the whole Kali system merely to make a legacy PHP setting work; use Docker instead when package compatibility becomes the main obstacle.

First Run: URL, Database Setup, Login and Safe Lab Settings

The first successful page load is not the end of setup. A useful lab session starts by confirming the URL, database state, security level, reset controls, and account handling.

1. Confirm the address

Try http://127.0.0.1/ first, then http://127.0.0.1:8080/. Some configurations also use mutillidae.localhost.

2. Initialize the database

Use the warning page's setup link or request /set-up-database.php. Reload after the setup response completes.

3. Use disposable credentials

Create a lab-only account through the Login or Register area. Never reuse a real username, password, email, token, or API key.

4. Record the security level

A walkthrough is incomplete if it does not state whether the application was in insecure, intermediate, or secure mode.

Optional local hostname mapping

The Docker documentation notes that the site may assume the hostname mutillidae.localhost. Modern systems often resolve *.localhost automatically, but a hosts-file entry can make behavior explicit.

# Linux or macOS hosts file entry
127.0.0.1 mutillidae.localhost

# Windows hosts file entry
127.0.0.1 mutillidae.localhost

After saving the entry with administrator privileges, open http://mutillidae.localhost/. Keep the mapping local; do not point a public DNS name at the vulnerable lab.

OWASP Mutillidae II Walkthrough: A Repeatable Method That Teaches More Than an Answer Key

A good walkthrough is not a list of payloads. It is a reusable investigation process that explains what changed, why the result matters, and how the application should be fixed. This method works across injection, cross-site scripting, authentication, authorization, file handling, and web-service lessons.

Step 1: Define the lab boundary

Write down the localhost URL, version, Git commit or Docker tag, security level, account used, and explicit authorization boundary.

Step 2: Capture a normal baseline

Complete the form or request with ordinary data. Record status code, response length, visible message, cookies, and relevant request fields.

Step 3: Change one thing

Use the built-in hint and modify one parameter only. This keeps cause and effect understandable and makes the result reproducible.

Step 4: Compare evidence

Compare the new response with the baseline. Look for changed records, authorization behavior, error detail, reflection, redirects, or data exposure.

Step 5: Repeat in secure mode

Switch to a stronger security level and repeat the same input. Explain which control changed the outcome.

Step 6: Write the remediation

Describe the code, design, validation, authorization, encoding, configuration, logging, or monitoring control that should prevent the issue.

OWASP Mutillidae II walkthrough with request and response security inspection

Beginner-friendly first session

  1. Start the Docker stack and initialize the database.
  2. Open the application and identify the current security level.
  3. Choose one introductory lesson from the OWASP Top 10 menu.
  4. Read the lesson description before touching the input.
  5. Submit a normal value and capture the baseline.
  6. Use the first built-in hint and make one controlled change.
  7. Explain the observed result in plain language.
  8. Switch to secure mode and repeat the same request.
  9. Reset the lab, reproduce the result once more, and save the evidence.
The green success message is not the goal. The goal is to explain the trust boundary, the unsafe assumption, the observable evidence, and the control that removes the risk.

A safe SQL injection learning sequence

Mutillidae II includes injection lessons, but a useful tutorial should keep the activity inside the local training application and focus on the reasoning process. Start with a normal lookup, identify which input reaches a database operation, use the built-in hint, compare the application's response, and then inspect how parameterized queries or prepared statements change the result in secure mode.

For broader context, compare the lab behavior with the OWASP Top 10 vulnerabilities guide. The same discipline applies to modern APIs: input handling matters, but object authorization, business flows, response data, and token behavior must also be tested.

OWASP Mutillidae II Writeup and Solutions Template

Searchers often want “OWASP Mutillidae II solutions,” but a static list of answers ages quickly and can hide the lesson. A better solution page gives readers a structured worksheet that they can reuse, compare, and improve.

Copy-and-paste lab writeup template

Lab title:
Mutillidae version:
Git commit or Docker image tag:
Date tested:
Lab URL:
Security level:
Authorization boundary: Local isolated lab only

Objective:
What behavior is this lesson designed to demonstrate?

Baseline request:
Method:
Path:
Parameters:
Authentication state:
Expected normal result:

Controlled change:
Which single input changed?
Which built-in hint guided the test?

Observed evidence:
Status code:
Response difference:
Data or behavior exposed:
Screenshot or request reference:

Root cause:
Which trust assumption or implementation flaw caused the result?

Secure-mode comparison:
What changed after enabling the stronger control?

Remediation:
Code-level fix:
Design-level fix:
Validation or authorization requirement:
Logging and monitoring signal:

Retest result:
Did the same request fail safely after remediation?

What a high-quality solution should contain

Writeup elementStrong versionWeak version
EnvironmentVersion, commit, URL, security level and isolation statedOnly says “Mutillidae”
BaselineNormal request and expected result recordedJumps directly to a special input
EvidenceRequest and response difference explainedOnly includes a screenshot of success
Root causeUnsafe trust or missing control identifiedNames a vulnerability without explanation
RemediationSpecific code, design and monitoring controlsSays “sanitize input”
RetestSame request repeated in secure modeNo proof that the fix works

Make the page worth returning to

Keep a compact “next session” checklist beside the writeup. Before closing the lab, save the version, lesson, security level, baseline, key evidence, unanswered question, and next test. At the next session, restart from those facts rather than repeating the entire setup.

Next session checklist
[ ] Confirm the same Mutillidae version
[ ] Start the isolated Docker stack
[ ] Verify the database state
[ ] Set the documented security level
[ ] Reproduce the baseline request
[ ] Repeat the last controlled change
[ ] Compare secure-mode behavior
[ ] Add one remediation test
[ ] Stop the lab when finished

OWASP Mutillidae II Troubleshooting Guide

ProblemLikely causePractical check
Browser cannot connectContainers stopped or wrong portRun docker compose ps and inspect published ports
Port 80 is already in useAnother web server or application owns the portTry port 8080, stop the conflicting service, or adjust the Compose mapping
Database missing warningExpected first-run stateUse the setup link or request /set-up-database.php
Setup keeps failingDatabase container unhealthy or stale dataInspect database logs before considering a volume reset
docker compose is unknownCompose plugin is missingInstall Docker Desktop or the current Compose plugin for the operating system
Kali installed the wrong packageThe package named docker is not Docker EngineFollow Kali documentation and install docker.io or Docker's supported Debian packages
Windows clone command failsGit is not installedInstall Git for Windows or use GitHub's Download ZIP option
XAMPP page is blank or errorsPHP extension or version mismatchCheck Apache error logs and prefer the Docker stack for a reproducible setup
Lesson result differs from a writeupDifferent application version, data state or security levelCompare version, commit, reset state and selected level
Lab is reachable from another devicePorts are bound beyond localhost or VM networking is too openStop the stack and correct the network boundary before continuing

Minimal diagnostic bundle

docker compose ps
docker compose logs --tail=200
docker ps --format "table {.Names}	{.Image}	{.Ports}	{.Status}"
curl -I http://127.0.0.1/
curl -I http://127.0.0.1:8080/

Save this output with the operating system, Docker version, Compose version, Git commit, and a description of the last successful step. That information is more useful than a screenshot of a generic error page.

Common OWASP Mutillidae II Tutorial Mistakes

  • Exposing the lab: publishing ports to a public interface, cloud security group, router, or shared network.
  • Using outdated downloads: following an old SourceForge or third-party package without checking the active GitHub project.
  • Copying the wrong directory: placing the repository root in XAMPP instead of the application content under src.
  • Skipping the baseline: trying unusual inputs before understanding normal application behavior.
  • Ignoring the security level: reproducing a result without documenting whether the lab was insecure or secure.
  • Reusing real credentials: entering a personal password, email, token, or secret into an intentionally vulnerable application.
  • Deleting volumes too early: destroying evidence before reading container logs and checking database health.
  • Treating a payload as the lesson: recording what worked without explaining the root cause and remediation.
  • Using old writeups as truth: assuming page names and expected results are identical across versions.
  • Leaving the lab running: forgetting to stop containers after the exercise.

Related API Security Topics to Consider

Mutillidae II is primarily a vulnerable web application, but the investigation habits transfer directly to APIs. The same request can look harmless at the network layer while exposing sensitive data, bypassing object-level authorization, abusing a business flow, or leaking a token in the response. That is why secure development testing and runtime visibility solve different parts of the problem.

OWASP Mutillidae II lessons applied to API runtime visibility and abuse detection

Request and response inspection

Record both sides of the transaction. Sensitive data exposure and authorization failures often become visible only in the response.

Behavior analytics

A single request may be valid, while enumeration, replay, scraping, or an unusual sequence reveals API abuse.

Authorization context

Modern systems must verify which identity may access which object and function, not merely whether a token exists.

Incident-ready evidence

Useful events preserve method, endpoint, identity context, decision, reason, and safe request or response evidence for the SOC.

To extend the lab into a broader program, compare API security testing versus runtime monitoring. Testing can find reproducible weaknesses before release, while runtime monitoring sees real traffic, changing clients, schema drift, abuse sequences, and attacks that depend on production context.

Object and workflow lessons connect naturally to BOLA and IDOR API security and business logic abuse detection. A runtime program also needs API runtime visibility and an API security incident response playbook so findings become prioritized evidence rather than isolated alerts.

API security evaluation checklist

Evaluation questionWhy it mattersUseful evidence
Can the platform see complete API requests and responses?Finds data leakage and context hidden from metadata-only toolsEndpoint, fields, status, response schema and data classifications
Can it detect BOLA or IDOR behavior?Object authorization failures may use syntactically valid requestsIdentity-to-object access changes and enumeration patterns
Can it identify business logic abuse?Abuse may follow valid API syntax while violating intended workflowSequence, frequency, state and outcome anomalies
Can it find PII, PCI, token or secret leakage?Response exposure can create direct breach impactField-level classification with safe redaction
Can it produce SIEM-ready events?SOC teams need context for triage and responseReason, severity, endpoint, identity, action and forensic reference
Can enforcement begin safely?Immediate blocking can interrupt legitimate workflowsMonitoring, tuning, staged policy and rollback controls

Which Installation Path Should You Choose?

Reader goalRecommended pathReason
Start practicing quicklyDockerHub Compose repositoryFastest full multi-container environment
Inspect how the containers are builtDocker build repositoryIncludes Dockerfiles and build workflow
Study PHP source codeMain GitHub repositoryCurrent application source is under src
Run on WindowsDocker DesktopReduces XAMPP and dependency mismatch
Run on Kali LinuxDocker inside an isolated VMReproducible and easy to reset
Learn Apache, PHP and MariaDB administrationLegacy native LAMP or XAMPPEducational, but more version-sensitive
Use a SourceForge downloadAvoid as the defaultActive maintained source has moved to GitHub
Practical recommendation: choose Docker for the first successful run, learn the application workflow, and move to a native source installation only when configuring the underlying web stack is itself part of the lesson.

Official Resources Used for This Guide

Project versions, package names, Docker tags, and operating-system requirements can change. Verify the current official documentation before using these instructions in a classroom, certification lab, company training environment, or published technical standard.

Conclusion

OWASP Mutillidae II is most valuable when it becomes a repeatable learning system rather than a collection of isolated answers. Use the official GitHub and Docker resources, run the application only in a controlled local environment, initialize and reset it deliberately, record the version and security level, capture a normal baseline, change one input at a time, and finish every walkthrough with a secure-mode retest and specific remediation.

For most readers, the best route is clear: start with the official DockerHub Compose repository, keep the stack inside an isolated machine, use the built-in hints before external answer keys, and maintain a structured writeup that explains evidence and fixes. That approach remains useful even after the exact lesson or version changes.

OWASP Mutillidae II FAQ

What is OWASP Mutillidae II?

OWASP Mutillidae II is a free, open-source, deliberately vulnerable PHP web application built for authorized web-security training. It contains dozens of vulnerabilities, built-in hints, secure and insecure modes, and a reset mechanism. Run it only in a local or isolated lab that you own or are explicitly permitted to use.

Where is the official OWASP Mutillidae II GitHub repository?

The main source repository is webpwnized/mutillidae on GitHub. The project also maintains webpwnized/mutillidae-docker for building the stack and webpwnized/mutillidae-dockerhub for launching pre-built Docker images with Compose. Use links from the official OWASP project page rather than unverified mirrors.

How do I run OWASP Mutillidae II with Docker?

The easiest current path is to clone the official mutillidae-dockerhub repository, enter the directory, and run docker compose up -d. Then open http://127.0.0.1/ or http://127.0.0.1:8080/. On first access, use the setup link or request http://127.0.0.1/set-up-database.php to initialize the database.

How do I install OWASP Mutillidae II on Windows?

For the simplest Windows setup, install Docker Desktop, start it, clone the official mutillidae-dockerhub repository in PowerShell, and run docker compose up -d. A legacy source installation is also possible with XAMPP by placing the contents of the repository's src directory under C:\xampp\htdocs\mutillidae, but Docker usually avoids PHP and database version mismatches.

How do I install OWASP Mutillidae II on Kali Linux?

Kali's documentation recommends installing the container engine as docker.io rather than the unrelated docker package. After Docker and Git are available, clone the official mutillidae-dockerhub repository and run docker compose up -d, using sudo when required. Keep the lab inside an isolated virtual machine and do not publish its ports to an untrusted network.

Where can I download OWASP Mutillidae II?

The preferred download is the current webpwnized/mutillidae GitHub repository or its Download ZIP option. For a ready-to-run environment, use the official Docker repositories linked from the OWASP project page. As checked on July 13, 2026, the source version file and current official Docker image tag showed version 2.12.7, but always verify the repository before installing.

Is the OWASP Mutillidae II SourceForge.net download still the best option?

No. Search results may still show older SourceForge downloads, archived packages, or third-party mirrors, but the active source project has moved to GitHub. Use the official OWASP project page to reach the maintained GitHub and Docker resources, and treat old SourceForge packages as legacy material rather than the default installation path.

What URL should I open after starting Mutillidae II?

The official Docker stack exposes the web interface on localhost ports 80, 443, and 8080. Start with http://127.0.0.1/ or http://127.0.0.1:8080/. The project may also expect the local hostname mutillidae.localhost in some configurations, which can be mapped in the computer's hosts file.

Does OWASP Mutillidae II have a default login?

Do not rely on a universal default username and password because database content and versions can differ. Initialize the database, use the application's Login or Register area, and create disposable lab-only credentials that are not reused anywhere else. The login pages are intentionally vulnerable training surfaces, so keep the instance isolated.

Where can I find an OWASP Mutillidae II walkthrough, solutions or writeup?

Use the built-in hints, tutorials, reset controls, security-level selector, and official webpwnized tutorial videos first. A strong writeup records the selected lesson, baseline behavior, one controlled change at a time, evidence from the request and response, the root cause, and the secure remediation. Avoid copying old answer keys without understanding the version and lesson context.

Why does Mutillidae II say the database is missing on first launch?

That first-launch warning is expected in the official Docker workflow. Use the page's rebuild or setup link, or request http://127.0.0.1/set-up-database.php from the same host. After initialization, reload the application. If it still fails, inspect docker compose ps and docker compose logs before deleting any volumes.

Can I put OWASP Mutillidae II online for remote practice?

A deliberately vulnerable application should not be exposed directly to the public internet or an untrusted shared network. Prefer localhost, an isolated virtual machine, a private classroom range, or a controlled environment with explicit authorization. If remote access is required, use a properly isolated lab platform with network controls, authentication, monitoring, and a clear shutdown plan.

Turn lab lessons into stronger application and API protection

Use deliberately vulnerable applications to build testing skills, then connect those findings to runtime visibility, behavior analytics, sensitive-data detection, SIEM workflows, and safe enforcement for real applications and APIs.

© 2026 Ammune Security. Educational use only in systems you own or are explicitly authorized to test.