View all services
Talk to QA Advisor
/Blog/Penetration Testing of Web Applications: A Practical Methodology
Compliance Testing7 min read

Penetration Testing of Web Applications: A Practical Methodology

How a web application penetration test runs end to end: scoping by function, the current OWASP Top 10:2025, what your tester needs from you, and how to read the report you get back.

Published September 22, 2026Last updated September 22, 2026
On this page

Most web application penetration tests fail in the scoping call, not the exploitation phase. You agree a flat fee, hand over a URL, and receive a report full of TLS configuration notes while the broken access control that actually matters goes untested.

This guide walks through how a web application penetration test runs end to end: what you scope, which classes of flaw get tested, what the tester needs from you, and how to read the report you get back.

Start from the current OWASP Top 10, not the one you remember

The OWASP Top 10 was updated in 2025. If a proposal or report references the 2021 list, that is a useful signal about how current the tester's methodology is.

The 2025 list reads:

OWASP Top 10:2025
RankCategoryWhat it covers in a web app test
A01Broken Access ControlUsers reaching data or actions outside their permissions
A02Security MisconfigurationDefaults, headers, permissions and exposed management surfaces
A03Software Supply Chain FailuresDependencies, build pipeline and distribution, not just versions
A04Cryptographic FailuresData in transit and at rest, key handling, weak algorithms
A05InjectionSQL, command, template and other interpreter injection
A06Insecure DesignFlaws in the design itself that no implementation fix resolves
A07Authentication FailuresLogin, session handling, recovery flows, credential stuffing
A08Software or Data Integrity FailuresUnverified updates, deserialisation, CI/CD integrity
A09Security Logging and Alerting FailuresAttacks that leave no usable trace and trigger no alert
A10Mishandling of Exceptional ConditionsError paths, failure modes and partial states
Source: owasp.org/Top10/2025

Three changes matter when you scope a test.

Software Supply Chain Failures at A03 is broader than the old "Vulnerable and Outdated Components". It covers your build pipeline, your dependency resolution and your distribution process, not just the version numbers in your lockfile. A test scoped only to the running application will not touch it.

Security Misconfiguration moved up to A02. This is the category that rewards environment access. A tester working purely from the outside will find a fraction of what a tester with a staging environment and configuration visibility will find.

Mishandling of Exceptional Conditions is new at A10. Error paths, failure modes and partial states. These are hard to reach without knowing how the application is meant to behave, which is an argument for giving your tester documentation rather than making them guess.

Decide what kind of test you are buying

The phrase "penetration test" covers three quite different exercises, and the difference is how much you tell the tester.

Black box, grey box and white box
TypeWhat the tester getsBest forTrade-off
Black boxA URL and nothing elseTesting detection and response as an attacker wouldTime spent on reconnaissance is time not spent testing
Grey boxCredentials for each role, some documentationMost first engagements and recurring application testingLess realistic as a simulation of an external attacker
White boxSource code, architecture, full environment accessHighest-assurance review of a critical applicationHighest cost, and requires the most preparation from you

Black box tests are popular because they feel like a realistic attack. They are also the least efficient way to find flaws in your own application, because your tester spends a third of the engagement rediscovering things you already know.

If this is your first test, a grey box engagement usually returns more findings per day spent. Save black box for when you want to test detection and response rather than the application itself.

Scope by function, not by URL

A scope that reads "test https://app.example.com" is not a scope. The tester has to guess which functionality matters, and they will guess wrong in both directions: too little coverage of your business logic, too much time on your marketing pages.

Scope by what the application does:

  1. Authentication and session handling. Login, logout, password reset, multi-factor enrolment, session expiry, and every alternative route in. The alternative routes are where the flaws usually are.
  2. Authorisation boundaries. List every role you have, then every pair of roles that should not be able to see each other's data. This is where A01 findings come from, and it is the single most valuable thing you can hand your tester.
  3. The money path. Checkout, subscription changes, refunds, credit transfers. Anything where a logic flaw converts directly into financial loss.
  4. Data entry points that reach other systems. File upload, imports, webhook receivers, anything that gets parsed downstream.
  5. Administrative functionality. Usually the least tested part of an application and the most valuable to an attacker.
  6. Integrations and third-party components. Your A03 exposure lives here.

Write this list yourself before you speak to a vendor. It changes the conversation from "how many days do you want" to "here is what needs covering, how long does that take you".

What the tester needs from you

An engagement stalls for predictable reasons, and nearly all of them are avoidable.

Credentials for every role, created in advance. Two accounts per role, so the tester can attempt horizontal privilege escalation between two users at the same level. Asking for these on day one costs you a day.

A test environment that mirrors production. If you test production you will be constrained about what you can attempt, which narrows the findings. If you test an environment three releases behind, the findings may not apply.

Rate limiting and WAF rules relaxed for the tester's source addresses. Otherwise you are testing your WAF, not your application. Test the WAF separately if you want to know how it performs.

Documentation. API specifications, an architecture diagram, a list of third-party integrations. Every hour a tester spends reconstructing your architecture is an hour not spent testing it.

A named contact who can answer questions within the day. Testers hit ambiguities constantly: is this behaviour intended, does this account have elevated rights, should this endpoint be reachable. Slow answers turn into assumptions, and assumptions turn into either false positives or missed findings.

How the test runs

A web application penetration test follows the same broad shape regardless of vendor, and knowing it helps you tell a thorough engagement from a scan with a report attached.

How a web application penetration test runs
PhaseWhat happensWhat you should see in the report
ScopingAgree targets, roles, environment, rules of engagementA written scope naming functions, not just domains
ReconnaissanceMap the application, endpoints, roles and inputsAn inventory of what was actually tested
Automated scanningTooling sweeps for known vulnerability classesScanner findings marked as such, and triaged not dumped
Manual testingHuman testing of logic, authorisation and chainsThe majority of findings, with reproduction steps
ExploitationConfirm findings are real and establish impactEvidence, not theory: the request and the response
ReportingWrite up findings, severity and remediationSpecific fixes per finding, rated in your context
RetestVerify remediation actually closed the findingA retest scope agreed before the original engagement began

The proportion that matters is manual to automated. Automated scanning finds known vulnerability classes in known places. It does not find business logic flaws, authorisation gaps between roles, or chained weaknesses where three low-severity issues combine into one critical.

Ask any prospective vendor what share of the engagement is manual. Then ask what their scanner found on the last engagement and what their testers found by hand. The ratio tells you what you are buying.

Authorisation testing deserves its own conversation

Broken Access Control has sat at A01 across multiple revisions of the Top 10, and it is the class of flaw that automated tools handle worst.

The reason is straightforward. A scanner can tell that an endpoint returns data. It cannot tell that the data belongs to a different customer, because it does not know who owns what. Only someone who understands your domain model can make that call.

For this to be tested properly your tester needs:

  • Every role enumerated, including the ones that exist only in configuration
  • Two accounts per role, so same-level access can be tested
  • A statement of which objects belong to which tenant or user
  • Any endpoint that changes behaviour based on a role claim in a token

If a proposal does not mention authorisation testing explicitly, assume it is not being done properly.

From our work

🔬 From our work
We do not publish client vulnerability data, so this is an unquantified observation rather than a measured statistic. On first engagements the highest-severity findings are more often authorisation flaws than injection flaws. Injection is well understood and frameworks defend against it by default. Authorisation is bespoke to every application, no framework enforces it for you, and it is usually implemented one endpoint at a time by different developers over several years.

A second pattern worth naming: findings cluster in the parts of the application built earliest, before the team settled on conventions, and in the parts built most recently, before those conventions were applied consistently.

Neither observation is a substitute for testing your own application. They are offered as a prompt for where to look first when you read your own report.

Reading the report

A report is useful in proportion to how reproducible it is. For each finding you should be able to answer:

Can I reproduce it? The report must contain the exact request, the exact parameters and the observed response. "The application is vulnerable to IDOR" is not a finding, it is a category.

What is the actual impact here? Severity ratings are generic. A high-severity finding on an internal admin tool behind a VPN may matter less to you than a medium on your public checkout. Ask the tester to rate impact in your context, not just against a scoring framework.

What is the fix, specifically? "Implement proper access control" is not remediation guidance. "Check tenant ownership in the handler for GET /api/v2/invoices/{id} before returning the record" is.

Was this chained? Individually low findings that combine into a critical path should be reported as the chain, not as three separate low findings that a triage process will deprioritise.

Insist on a retest after remediation, and agree its scope when you sign the original engagement rather than negotiating it afterwards.

Common scoping mistakes

Testing only the production environment, with restrictions. You get a constrained test and call it a clean bill of health.

Excluding authenticated functionality to save money. Most of your risk is behind the login. An unauthenticated-only test covers the smallest and best-defended part of your attack surface.

Scoping a single application when the risk is in the integration. If your application trusts a partner system, and that trust is misplaced, neither application's individual test will find it.

Treating the report as the deliverable. The deliverable is the remediation. Budget engineering time for fixes in the same planning cycle as the test, or you will hold a report describing flaws you have not fixed, which is worse than not having tested.

Frequency and triggers

Annual testing is the usual baseline for compliance. It is rarely the right frequency for engineering risk.

Test when something material changes: a new authentication mechanism, a new payment flow, a significant architectural change, a move to a new cloud provider, or a new third-party integration handling sensitive data. Continuous or quarterly testing suits teams shipping weekly; an annual test on a codebase that changed entirely during the year tells you about an application that no longer exists.

If you want a view of what a test would cost before you scope one, our penetration testing costs guide sets out the ranges and what drives them, and our penetration testing tools guide covers what testers actually run.

If you would like help scoping a web application penetration test against your own architecture, talk to our security testing team.

Frequently Asked Questions

How long does a web application penetration test take?

The engagement length follows the scope, not the application size. A single application with a handful of roles and one payment flow is a different exercise from a multi-tenant platform with six roles and several integrations. Scope by function rather than by URL, then ask vendors how many days that scope takes them, and compare the answers.

What is the difference between black box, grey box and white box testing?

The difference is how much you tell the tester. Black box provides a URL and nothing else, grey box adds credentials for each role and some documentation, white box adds source code and full environment access. Grey box usually returns the most findings per day on a first engagement, because the tester is not spending a third of the time rediscovering what you already know.

Do we need to test production, or is staging enough?

Staging is usually better, provided it genuinely mirrors production. Testing production forces restrictions on what the tester may attempt, which narrows the findings, and testing an environment several releases behind produces findings that may not apply. Whichever you choose, relax rate limiting and WAF rules for the tester's addresses, or you are testing your WAF instead of your application.

Why does OWASP Top 10:2025 matter when scoping?

It changes what a thorough scope covers. Software Supply Chain Failures at A03 reaches your build pipeline and dependency resolution rather than only running code, and Mishandling of Exceptional Conditions is new at A10. If a proposal or report cites the 2021 list, that tells you something useful about how current the methodology is.

How often should we run a penetration test?

Annual testing is the common compliance baseline and rarely the right engineering frequency. Test when something material changes: a new authentication mechanism, a new payment flow, a significant architectural change, or a new integration handling sensitive data. An annual test on a codebase that changed entirely during the year describes an application that no longer exists.

What should a penetration test report contain?

Every finding needs the exact request and response so you can reproduce it, an impact assessment in your context rather than a generic severity score, and specific remediation naming the endpoint and the check to add. Chained findings should be reported as the chain, since three individually low issues that combine into a critical path will otherwise be deprioritised in triage.

Is automated scanning enough on its own?

No. Scanners find known vulnerability classes in known places, which is useful and cheap. They cannot find business logic flaws or authorisation gaps between roles, because a scanner can tell that an endpoint returned data but not that the data belonged to a different customer. Ask any vendor what share of the engagement is manual.

What do we need to prepare before the test starts?

Two accounts per role created in advance, a test environment that mirrors production, relaxed rate limiting for the tester's source addresses, API specifications and an architecture diagram, and a named contact who can answer questions within the day. Engagements stall on missing credentials and slow answers more often than on technical obstacles.

Free Assessment

Get a free QA audit for your project

Identify quality gaps before they become production bugs.

Get Free Audit

Ship software with confidence

Talk to a QA advisor and find out how QAble can help your team build quality in at every stage.

No sales pitch
Technical walkthrough
No lock-in commitment

Talk to QA Advisor

Direct access to QAble's QA specialists.

Response within 24 hours