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.
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.
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.
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.
| Capability | Why it matters | How to use it well |
|---|---|---|
| Built-in hints | Helps beginners progress without immediately copying an answer key | Read hints in order and record what each hint reveals |
| Security levels | Shows how implementation choices change application behavior | Repeat the same test in insecure and secure modes |
| Reset or setup | Returns the database and lessons to a known state | Reset before reproducing a result for a writeup |
| Web-service labs | Connects classic web vulnerabilities to service and API traffic | Capture both request and response evidence |
| Deliberately unsafe | Provides realistic behavior but creates real exposure | Use 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.
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 downUpdate 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.
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
- Install Docker Desktop from the official Docker documentation and start it.
- Confirm that Docker is running from PowerShell.
- Clone the official Compose repository.
- Start the containers and initialize the database.
- 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.
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.
Beginner-friendly first session
- Start the Docker stack and initialize the database.
- Open the application and identify the current security level.
- Choose one introductory lesson from the OWASP Top 10 menu.
- Read the lesson description before touching the input.
- Submit a normal value and capture the baseline.
- Use the first built-in hint and make one controlled change.
- Explain the observed result in plain language.
- Switch to secure mode and repeat the same request.
- Reset the lab, reproduce the result once more, and save the evidence.
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 element | Strong version | Weak version |
|---|---|---|
| Environment | Version, commit, URL, security level and isolation stated | Only says “Mutillidae” |
| Baseline | Normal request and expected result recorded | Jumps directly to a special input |
| Evidence | Request and response difference explained | Only includes a screenshot of success |
| Root cause | Unsafe trust or missing control identified | Names a vulnerability without explanation |
| Remediation | Specific code, design and monitoring controls | Says “sanitize input” |
| Retest | Same request repeated in secure mode | No 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
| Problem | Likely cause | Practical check |
|---|---|---|
| Browser cannot connect | Containers stopped or wrong port | Run docker compose ps and inspect published ports |
| Port 80 is already in use | Another web server or application owns the port | Try port 8080, stop the conflicting service, or adjust the Compose mapping |
| Database missing warning | Expected first-run state | Use the setup link or request /set-up-database.php |
| Setup keeps failing | Database container unhealthy or stale data | Inspect database logs before considering a volume reset |
docker compose is unknown | Compose plugin is missing | Install Docker Desktop or the current Compose plugin for the operating system |
| Kali installed the wrong package | The package named docker is not Docker Engine | Follow Kali documentation and install docker.io or Docker's supported Debian packages |
| Windows clone command fails | Git is not installed | Install Git for Windows or use GitHub's Download ZIP option |
| XAMPP page is blank or errors | PHP extension or version mismatch | Check Apache error logs and prefer the Docker stack for a reproducible setup |
| Lesson result differs from a writeup | Different application version, data state or security level | Compare version, commit, reset state and selected level |
| Lab is reachable from another device | Ports are bound beyond localhost or VM networking is too open | Stop 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.
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 question | Why it matters | Useful evidence |
|---|---|---|
| Can the platform see complete API requests and responses? | Finds data leakage and context hidden from metadata-only tools | Endpoint, fields, status, response schema and data classifications |
| Can it detect BOLA or IDOR behavior? | Object authorization failures may use syntactically valid requests | Identity-to-object access changes and enumeration patterns |
| Can it identify business logic abuse? | Abuse may follow valid API syntax while violating intended workflow | Sequence, frequency, state and outcome anomalies |
| Can it find PII, PCI, token or secret leakage? | Response exposure can create direct breach impact | Field-level classification with safe redaction |
| Can it produce SIEM-ready events? | SOC teams need context for triage and response | Reason, severity, endpoint, identity, action and forensic reference |
| Can enforcement begin safely? | Immediate blocking can interrupt legitimate workflows | Monitoring, tuning, staged policy and rollback controls |
Which Installation Path Should You Choose?
| Reader goal | Recommended path | Reason |
|---|---|---|
| Start practicing quickly | DockerHub Compose repository | Fastest full multi-container environment |
| Inspect how the containers are built | Docker build repository | Includes Dockerfiles and build workflow |
| Study PHP source code | Main GitHub repository | Current application source is under src |
| Run on Windows | Docker Desktop | Reduces XAMPP and dependency mismatch |
| Run on Kali Linux | Docker inside an isolated VM | Reproducible and easy to reset |
| Learn Apache, PHP and MariaDB administration | Legacy native LAMP or XAMPP | Educational, but more version-sensitive |
| Use a SourceForge download | Avoid as the default | Active maintained source has moved to GitHub |
Official Resources Used for This Guide
- OWASP Mutillidae II project page
- OWASP Mutillidae II main GitHub repository
- Official pre-built Docker Compose repository
- Official Docker build repository
- Official Mutillidae II Docker Hub repository
- Kali Linux Docker installation guidance
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.
