Web Vulnerabilities Methodology
In every Web Pentest, there are several hidden and obvious places that might be vulnerable. This post is meant to be a checklist to confirm that you have searched for vulnerabilities in all the possible places.
Proxies
Tip
Nowadays web applications usually uses some kind of intermediary proxies, those may be (ab)used to exploit vulnerabilities. These vulnerabilities need a vulnerable proxy to be in place, but they usually also need some extra vulnerability in the backend.
- [ ] Abusing hop-by-hop headers
- [ ] Cache Poisoning/Cache Deception
- [ ] HTTP Connection Contamination
- [ ] HTTP Connection Request Smuggling
- [ ] HTTP Request Smuggling
- [ ] HTTP Response Smuggling / Desync
- [ ] H2C Smuggling
- [ ] Server Side Inclusion/Edge Side Inclusion
- [ ] Uncovering Cloudflare
- [ ] XSLT Server Side Injection
- [ ] Proxy / WAF Protections Bypass
User input
Tip
Most of the web applications will allow users to input some data that will be processed later.\ Depending on the structure of the data the server is expecting some vulnerabilities may or may not apply.
Reflected Values
If the introduced data may somehow be reflected in the response, the page might be vulnerable to several issues.
- [ ] Client Side Path Traversal
- [ ] Client Side Template Injection
- [ ] Command Injection
- [ ] CRLF
- [ ] Dangling Markup
- [ ] File Inclusion/Path Traversal
- [ ] Open Redirect
- [ ] Prototype Pollution to XSS
- [ ] Server Side Inclusion/Edge Side Inclusion
- [ ] Server Side Request Forgery
- [ ] Server Side Template Injection
- [ ] Reverse Tab Nabbing
- [ ] XSLT Server Side Injection
- [ ] XSS
- [ ] Abusing Service Workers
- [ ] WASM linear-memory XSS pivots
- [ ] XSSI
- [ ] XS-Search
Some of the mentioned vulnerabilities require special conditions, others just require the content to be reflected. You can find some interesting polygloths to test quickly the vulnerabilities in:
pocs-and-polygloths-cheatsheet/
Modern client-side code execution pivots
When a reflection bug lands in a modern SPA, spend a few extra minutes on the browser-managed primitives and native bridges the page already owns:
- Service workers: inspect the active registration path, effective scope, and any
Service-Worker-Allowedbroadening. A low-impact HTML injection or DOM clobbering bug can become origin-wide persistence if the page registers a worker or feeds attacker-controlled values intoimportScripts(). - WASM / Emscripten modules: fuzz length, offset, and type conversions crossing the JS ↔ WASM boundary. In practice, a memory bug in linear memory may let you overwrite trusted HTML templates or state objects and upgrade a constrained client-side bug into DOM XSS.
- Generated clients: minified bundles frequently disclose GraphQL persisted-query hashes, gRPC-Web method paths,
postMessagehandlers, WebSocket event names, and hidden admin routes even when the UI never exposes them.
For deeper exploitation ideas, check Abusing Service Workers, WebAssembly linear memory corruption to DOM XSS, and Code Review Tooling.
Search functionalities
If the functionality may be used to search some kind of data inside the backend, maybe you can (ab)use it to search arbitrary data.
- [ ] File Inclusion/Path Traversal
- [ ] NoSQL Injection
- [ ] LDAP Injection
- [ ] ReDoS
- [ ] SQL Injection
- [ ] ORM Injection
- [ ] RSQL Injection
- [ ] XPATH Injection
Forms, WebSockets and PostMsgs
When a websocket posts a message or a form allowing users to perform actions vulnerabilities may arise.
- [ ] Cross Site Request Forgery
- [ ] Cross-site WebSocket hijacking (CSWSH)
- [ ] Phone Number Injections
- [ ] PostMessage Vulnerabilities
Cross-site WebSocket hijacking & localhost abuse
WebSocket upgrades automatically forward cookies and do not block ws://127.0.0.1, so any web origin can drive desktop IPC endpoints that skip Origin validation. When you spot a launcher exposing a JSON-RPC-like API through a local agent:
- Observe emitted frames to clone the
type/name/argstuples required by each method. - Bruteforce the listening port directly from the browser (Chromium will handle ~16k failed upgrades) until a loopback socket answers with the protocol banner—Firefox tends to crash quickly under the same load.
- Chain a create → privileged action pair: e.g., invoke a
create*method that returns a GUID and immediately call the corresponding*Launch*method with attacker-controlled payloads.
If you can pass arbitrary JVM flags (such as AdditionalJavaArguments), force an error with -XX:MaxMetaspaceSize=<tiny> and attach -XX:OnOutOfMemoryError="<cmd>" to run OS commands without touching application logic. See WebSocket attacks for a walk-through.
HTTP Headers
Depending on the HTTP headers given by the web server some vulnerabilities might be present.
- [ ] Clickjacking
- [ ] Iframe Traps / Click Isolation
- [ ] Content Security Policy bypass
- [ ] Cookies Hacking
- [ ] CORS - Misconfigurations & Bypass
Bypasses
There are several specific functionalities where some workarounds might be useful to bypass them
- [ ] 2FA/OTP Bypass
- [ ] Bypass Payment Process
- [ ] Captcha Bypass
- [ ] Account Takeover Playbooks
- [ ] Login Bypass
- [ ] Race Condition
- [ ] Rate Limit Bypass
- [ ] Reset Forgotten Password Bypass
- [ ] Registration Vulnerabilities
Structured objects / Specific functionalities
Some functionalities will require the data to be structured in a very specific format (like a language serialized object or XML). Therefore, it's easier to identify if the application might be vulnerable as it needs to be processing that kind of data.\ Some specific functionalities may be also vulnerable if a specific format of the input is used (like Email Header Injections).
- [ ] Deserialization
- [ ] Email Header Injection
- [ ] JWT Vulnerabilities
- [ ] JSON / XML / YAML Hacking
- [ ] XML External Entity
- [ ] GraphQL Attacks
- [ ] gRPC-Web Attacks
- [ ] SOAP/JAX-WS ThreadLocal Auth Bypass
Files
Functionalities that allow uploading files might be vulnerable to several issues.\ Functionalities that generate files including user input might execute unexpected code.\ Users that open files uploaded by users or automatically generated including user input might be compromised.
- [ ] File Upload
- [ ] Formula Injection
- [ ] PDF Injection
- [ ] Server Side XSS
External Identity Management
Passkeys / WebAuthn handoffs
Passkeys are origin-bound, so the usual bug is not "steal the secret" but abuse the workflow around the ceremony:
- Try registration/login confusion: start a WebAuthn ceremony in one account or browser, then complete it from another session and check whether the signed challenge is still bound to the correct user, RP, and browser state.
- Treat QR, device-code, wallet, and cross-device approvals exactly like password-reset tokens: check replay, stale approvals, session swapping, and whether a completed ceremony authenticates a browser different from the one that initiated it.
- If you already have XSS or strong clickjacking on the relying-party origin, test whether you can drive extension/browser UI to approve a legitimate passkey login for the victim without exposing the credential material.
See Account Takeover and Clickjacking for concrete attack patterns.
Other Helpful Vulnerabilities
These vulnerabilities might help to exploit other vulnerabilities.
- [ ] Domain/Subdomain takeover
- [ ] IDOR
- [ ] Mass Assignment (CWE-915)
- [ ] Parameter Pollution
- [ ] Unicode Normalization vulnerability
Web Servers & Middleware
Misconfigurations in the edge stack often unlock more impactful bugs in the application layer.
- [ ] Apache
- [ ] Nginx
- [ ] IIS
- [ ] Tomcat
- [ ] Spring Actuators
- [ ] PUT Method / WebDAV
- [ ] Special HTTP Headers
- [ ] WSGI Deployment
- [ ] Werkzeug Debug Exposure
Application Frameworks & Stacks
Framework-specific primitives frequently expose gadgets, dangerous defaults, or framework-owned endpoints.
Tip
Always download the front-end bundles and *.map files before assuming a route or action is unreachable. Modern builds often leak Next.js Server Actions, GraphQL persisted-query hashes, tRPC router names, gRPC-Web paths, feature flags, and role strings that are perfect for low-privilege replay and authorization testing.
- [ ] Django
- [ ] Flask
- [ ] NodeJS / Express
- [ ] Angular
- [ ] Vue / Nuxt
- [ ] Next.js
- [ ] Laravel
- [ ] Symfony
Quick grep targets inside downloaded bundles:
rg -n 'sourceMappingURL|createServerReference|Next-Action|queryHash|persistedQuery|grpc-web|protobuf|new WebSocket\(|postMessage\(' ./static ./dist ./_next ./assets 2>/dev/null
Useful follow-up reading: Code Review Tooling and Next.js.
CMS, SaaS & Managed Platforms
High-surface products often ship with known exploits, weak plugins, or privileged admin endpoints.
- [ ] WordPress
- [ ] Joomla
- [ ] Drupal
- [ ] Moodle
- [ ] Prestashop
- [ ] Atlassian Jira
- [ ] Grafana
- [ ] Rocket.Chat
- [ ] Zabbix
- [ ] Microsoft SharePoint
- [ ] Sitecore
APIs, Buckets & Integrations
Server-side helpers and third-party integrations can expose file parsing or storage-layer weaknesses.
- [ ] Web API Pentesting
- [ ] Storage Buckets & Firebase
- [ ] Imagemagick Security
- [ ] Artifactory & Package Registries
- [ ] Code Review Tooling
Supply Chain & Identifier Abuse
Attacks that target build pipelines or predictable identifiers can become the initial foothold before exploiting traditional bugs.
- [ ] Dependency Confusion
- [ ] Timing Attacks
- [ ] UUID Insecurities
Web3, Extensions & Tooling
Modern applications extend into browsers, wallets, and automation pipelines—keep these vectors in scope.