Web Security Academy
Labs
Hands-on vulnerable apps — pick a topic, open a lab, solve it. XP syncs with the Cyberlium app.
Progress
0/279
How to solve a labShowHide
01
Sign in
Log in with your Cyberlium account so XP is saved (same account on the app and website).
02
Pick a topic & lab
Choose a topic on the left (XSS, SQLi, …), then open a lab. Apprentice is easiest; Expert is hardest.
03
Access the lab
Press ACCESS THE LAB — opens a unique host like {id}.lab.cyberlium.com (PortSwigger-style). Proxy that host with Burp.
04
Complete the objective
The site design matches the topic (shop, blog, account…). Solve inside that app; Academy marks Solved automatically.
All labs
Browse every Cyberlium Academy lab across vulnerability classes.
0/279 solved
Reflected XSS into HTML context
Reflect a payload in a search box and execute script.
Apprentice+75 XPOpen →Stored XSS via comment field
Persist a payload in a blog comment that runs for every viewer.
Apprentice+90 XPOpen →DOM XSS via document.write
Exploit client-side sinks that write untrusted data into the DOM.
Practitioner+120 XPOpen →SQL injection login bypass
Bypass authentication with a classic tautology.
Apprentice+100 XPOpen →SQL injection UNION attack
Use UNION SELECT to pull data from another table.
Practitioner+140 XPOpen →CSRF where token is not validated
Change a victim’s email with a forged request.
Apprentice+100 XPOpen →Password reset poisoned host header
Poison the reset link host so tokens go to you.
Practitioner+130 XPOpen →File path traversal, simple
Read /etc/passwd via ../ sequences.
Apprentice+90 XPOpen →Basic SSRF against the local server
Make the server request an internal admin page.
Apprentice+110 XPOpen →IDOR viewing other users’ data
Change an ID parameter to view another account.
Apprentice+85 XPOpen →CORS vulnerability with basic origin reflection
Steal data via a reflected Access-Control-Allow-Origin.
Apprentice+125 XPOpen →Weak password hashing (MD5)
Crack a weak MD5 digest from a tiny wordlist.
Apprentice+80 XPOpen →Limit overrun race on a one-time coupon
Redeem a single-use coupon twice via parallel requests.
Apprentice+130 XPOpen →Identify a CL.TE request smuggling desync
Name the classic desync when the edge trusts Content-Length.
Practitioner+150 XPOpen →GraphQL IDOR via user(id) query
Query another user’s email through GraphQL.
Apprentice+120 XPOpen →JWT accepted with alg none
Forge a token when signature checks are skipped.
Apprentice+100 XPOpen →Filter leak via injectable WHERE clause
Reveal hidden catalog rows by breaking a product filter query.
Apprentice+80 XPOpen →Fingerprint Oracle via SQL errors
Identify the database engine using Oracle-specific version queries.
Practitioner+120 XPOpen →Fingerprint MySQL / MSSQL version
Pull @@version-style output from a injectable search.
Practitioner+120 XPOpen →Enumerate tables on non-Oracle DBs
List schema metadata then dump a sensitive table.
Practitioner+120 XPOpen →Enumerate objects on Oracle
Query all_tables / dual patterns to map the schema.
Practitioner+120 XPOpen →UNION column count discovery
Probe how many columns the original SELECT returns.
Practitioner+120 XPOpen →Find a string column for UNION
Locate which UNION slot echoes text into the page.
Practitioner+120 XPOpen →Pack multiple values into one column
Concatenate fields inside a single UNION column.
Practitioner+120 XPOpen →Blind SQLi with true/false responses
Infer data from different page content on true vs false.
Practitioner+120 XPOpen →Blind SQLi via conditional errors
Force DB errors only when a guess is correct.
Practitioner+120 XPOpen →Visible error-based extraction
Use verbose SQL errors to leak data in the response body.
Practitioner+120 XPOpen →Time-delay blind SQL injection
Confirm injectability with intentional sleep/delay.
Practitioner+120 XPOpen →Time-based data exfiltration
Binary-search secrets using delay-on-true predicates.
Practitioner+120 XPOpen →Out-of-band SQL interaction
Trigger a DNS/HTTP callback from the database tier.
Practitioner+120 XPOpen →OOB SQL data exfiltration
Exfiltrate a secret over DNS/HTTP from SQL.
Practitioner+120 XPOpen →SQLi filter bypass via XML encoding
Encode a payload so a WAF misses the SQL metacharacters.
Practitioner+120 XPOpen →DOM XSS via innerHTML sink
Abuse location.search reflected into innerHTML.
Apprentice+80 XPOpen →jQuery href sink from location.search
Set an anchor href from query input without sanitizing.
Apprentice+80 XPOpen →jQuery selector XSS via hashchange
Trigger a selector sink when the URL hash changes.
Apprentice+80 XPOpen →Reflected XSS into encoded attributes
Break out of an attribute when angle brackets are encoded.
Apprentice+80 XPOpen →Stored XSS in encoded href attribute
Poison a stored link when quotes are encoded poorly.
Apprentice+80 XPOpen →Reflected XSS inside a JS string
Escape a JavaScript string context with encoded brackets.
Apprentice+80 XPOpen →DOM XSS inside a <select> write
Break out of options rendered via document.write.
Practitioner+120 XPOpen →AngularJS expression injection
Evaluate an expression when braces are still live.
Practitioner+120 XPOpen →Reflected DOM XSS chain
Combine server reflection with a client sink.
Practitioner+120 XPOpen →Stored DOM XSS chain
Store data that later hits a DOM sink for other users.
Practitioner+120 XPOpen →XSS with most tags blocked
Find an allowed event/tag combo past a denylist.
Practitioner+120 XPOpen →XSS when only custom tags survive
Abuse custom elements still permitted by the filter.
Practitioner+120 XPOpen →Reflected XSS with limited SVG
Use SVG markup that the filter still allows.
Practitioner+120 XPOpen →XSS via canonical link tag
Inject into a canonical <link> reflection.
Practitioner+120 XPOpen →JS string with quote/backslash escapes
Bypass incomplete escaping inside a JS string.
Practitioner+120 XPOpen →JS string with mixed HTML+JS escapes
Chain encodings to break out of a quoted string.
Practitioner+120 XPOpen →Stored XSS in onclick with escapes
Land a payload in an onclick handler despite encoding.
Practitioner+120 XPOpen →XSS inside a template literal
Break Unicode-escaped template literal boundaries.
Practitioner+120 XPOpen →Weaponize XSS to steal a session cookie
Exfiltrate document.cookie to prove impact.
Practitioner+120 XPOpen →Weaponize XSS to capture passwords
Overlay or hook a login form via injected script.
Practitioner+120 XPOpen →Use XSS to defeat CSRF defenses
Read a CSRF token from the DOM and forge a request.
Practitioner+120 XPOpen →AngularJS sandbox escape without strings
Escape a legacy Angular sandbox without string literals.
Expert+160 XPOpen →AngularJS sandbox escape under CSP
Combine Angular quirks with a strict CSP.
Expert+160 XPOpen →XSS with event handlers blocked
Find an execution path when on* handlers are stripped.
Expert+160 XPOpen →JavaScript URL XSS with char bans
Craft a JS URL despite blocked characters.
Expert+160 XPOpen →Strict CSP bypass via dangling markup
Smuggle data out when scripts are blocked by CSP.
Practitioner+120 XPOpen →CSP bypass to regain script execution
Find a policy gap that allows XSS under CSP.
Expert+160 XPOpen →CSRF token checked only on POST
Abuse a GET (or method override) path that skips the token.
Practitioner+120 XPOpen →CSRF token optional when missing
Omit the token entirely and still change state.
Practitioner+120 XPOpen →CSRF token not bound to the session
Reuse another user’s valid token in your request.
Practitioner+120 XPOpen →CSRF token mirrored from a cookie
Set a cookie the server trusts as the CSRF secret.
Practitioner+120 XPOpen →Duplicated CSRF token in cookie + body
Forge both copies of a duplicated CSRF value.
Practitioner+120 XPOpen →SameSite=Lax bypass via method override
Trigger a state change across sites despite Lax.
Practitioner+120 XPOpen →SameSite=Strict bypass via client redirect
Bounce through an on-site redirect to attach cookies.
Practitioner+120 XPOpen →SameSite=Strict bypass via sibling domain
Use a related subdomain to deliver the CSRF.
Practitioner+120 XPOpen →SameSite=Lax bypass via cookie refresh
Refresh a cookie in a context that later allows CSRF.
Practitioner+120 XPOpen →Referer check skipped when header absent
Drop the Referer header to bypass validation.
Practitioner+120 XPOpen →Broken Referer allowlist
Craft a Referer that fools a substring check.
Practitioner+120 XPOpen →Basic clickjacking over a CSRF form
Frame a sensitive action under an opaque decoy UI.
Apprentice+80 XPOpen →Clickjacking with URL-prefilled fields
Pre-fill framed inputs from query params.
Apprentice+80 XPOpen →Clickjacking past a frame-buster
Defeat a simple frame-busting script.
Apprentice+80 XPOpen →Clickjacking that triggers DOM XSS
Combine framing with a DOM sink for script execution.
Practitioner+120 XPOpen →Multistep clickjacking wizard
Guide the victim through several framed clicks.
Practitioner+120 XPOpen →DOM XSS via postMessage
Handle an origin-unsafe web message that writes HTML.
Practitioner+120 XPOpen →postMessage into a javascript: URL
Navigate using attacker-controlled message data.
Practitioner+120 XPOpen →postMessage + JSON.parse sink
Parse hostile JSON from a message into dangerous sinks.
Practitioner+120 XPOpen →DOM-based open redirection
Send users to an external URL via client-side logic.
Practitioner+120 XPOpen →DOM-based cookie manipulation
Write attacker data into document.cookie.
Practitioner+120 XPOpen →DOM clobbering enables XSS
Clobber globals so a later sink executes script.
Expert+160 XPOpen →Clobber attributes to bypass HTML filters
Use clobbering to sneak past sanitizer assumptions.
Expert+160 XPOpen →CORS trusts the null origin
Read an API using Origin: null from a sandboxed frame.
Apprentice+80 XPOpen →CORS trusts insecure schemes
Abuse an allowlist that accepts http:// attacker hosts.
Practitioner+120 XPOpen →XXE to read a local file
Declare an external entity that points at a file path.
Apprentice+80 XPOpen →XXE to pivot into SSRF
Make the XML parser fetch an internal HTTP resource.
Apprentice+80 XPOpen →Blind XXE with OOB callback
Detect XXE via an out-of-band DNS/HTTP hit.
Practitioner+120 XPOpen →Blind XXE via parameter entities
Use parameter entities when general entities are blocked.
Practitioner+120 XPOpen →Exfiltrate via a malicious external DTD
Host a DTD that sends file contents OOB.
Practitioner+120 XPOpen →Blind XXE data via error messages
Force parser errors that echo file contents.
Practitioner+120 XPOpen →XInclude file retrieval
Use XInclude when DOCTYPE is blocked.
Practitioner+120 XPOpen →XXE through an image upload
Upload a crafted SVG/XML that the server parses.
Practitioner+120 XPOpen →Repurpose a local DTD for XXE
Abuse a local DTD already on the server.
Expert+160 XPOpen →SSRF to another back-end host
Reach an internal service that is not localhost.
Apprentice+80 XPOpen →Blind SSRF with OOB detection
Prove the server fetches your collaborator URL.
Practitioner+120 XPOpen →SSRF past a blacklist filter
Bypass blocked hostnames with alternate encodings.
Practitioner+120 XPOpen →SSRF via open redirect hop
Bounce through an allowed redirect to an internal URL.
Practitioner+120 XPOpen →Blind SSRF meets Shellshock
Hit a CGI endpoint vulnerable to Shellshock via SSRF.
Expert+160 XPOpen →SSRF past a whitelist check
Satisfy a hostname allowlist while still hitting internal targets.
Expert+160 XPOpen →Confirm TE.CL desync via differentials
Spot TE.CL using mismatched responses.
Practitioner+120 XPOpen →CL.TE smuggling past front-end rules
Hide a request the edge would have blocked.
Practitioner+120 XPOpen →TE.CL smuggling past front-end rules
Deliver a privileged request via TE.CL.
Practitioner+120 XPOpen →Reveal front-end request rewriting
Observe how the proxy rewrites absolute-form requests.
Practitioner+120 XPOpen →Capture other users’ requests
Poison the queue so victim requests land in your lab.
Practitioner+120 XPOpen →Smuggle a reflected XSS payload
Prefix a victim request with a reflected XSS prefix.
Practitioner+120 XPOpen →Response queue poisoning via H2.TE
Desync HTTP/2 front-end with TE back-end.
Practitioner+120 XPOpen →H2.CL request smuggling
Conflict HTTP/2 framing with Content-Length.
Practitioner+120 XPOpen →HTTP/2 smuggling via CRLF injection
Inject CRLF sequences into HTTP/2 headers.
Practitioner+120 XPOpen →HTTP/2 request splitting via CRLF
Split one client request into two backend requests.
Practitioner+120 XPOpen →0.CL request smuggling
Exploit a zero Content-Length desync case.
Expert+160 XPOpen →CL.0 request smuggling
Abuse CL.0 parser disagreement.
Practitioner+120 XPOpen →Basic CL.TE vulnerability
Demonstrate a minimal CL.TE lab solve.
Practitioner+120 XPOpen →Basic TE.CL vulnerability
Demonstrate a minimal TE.CL lab solve.
Practitioner+120 XPOpen →Obfuscate the Transfer-Encoding header
Hide TE from one parser but not the other.
Practitioner+120 XPOpen →Smuggling into web cache poisoning
Store a poisoned response via a desync.
Expert+160 XPOpen →Smuggling into cache deception
Make a cache store a private response as static.
Expert+160 XPOpen →HTTP/2 tunnelling to bypass access control
Reach an internal route via H2 tunnelling.
Expert+160 XPOpen →Cache poison via HTTP/2 tunnelling
Combine H2 tunnelling with cache poisoning.
Expert+160 XPOpen →Client-side desync attack
Desync the browser connection itself.
Expert+160 XPOpen →Server-side pause-based smuggling
Exploit timing pauses between request parts.
Expert+160 XPOpen →Simple OS command injection
Append a second command to a ping/stock checker.
Apprentice+80 XPOpen →Blind command injection with delays
Prove injection using sleep/ping timing.
Practitioner+120 XPOpen →Blind command injection with output redirect
Write command output into a web-readable path.
Practitioner+120 XPOpen →Blind command injection OOB
Trigger a DNS/HTTP callback from the OS.
Practitioner+120 XPOpen →OOB command output exfiltration
Exfiltrate file contents over DNS/HTTP.
Practitioner+120 XPOpen →Basic server-side template injection
Evaluate a math expression in a template field.
Practitioner+120 XPOpen →SSTI in a code context
Break out of a template expression already in code.
Practitioner+120 XPOpen →SSTI using framework docs
Identify the engine and apply a documented payload.
Practitioner+120 XPOpen →SSTI in an unknown engine
Fingerprint then exploit with a known payload.
Practitioner+120 XPOpen →SSTI information leak via objects
Dump template objects supplied by the app.
Practitioner+120 XPOpen →SSTI inside a sandbox
Escape a restricted template sandbox.
Expert+160 XPOpen →Custom SSTI exploit chain
Build an exploit when stock payloads fail.
Expert+160 XPOpen →Traversal with absolute path bypass
Reach /etc/passwd when relative ../ is blocked.
Practitioner+120 XPOpen →Non-recursive ../ stripping bypass
Double-encode or nest sequences past a single strip.
Practitioner+120 XPOpen →Traversal via extra URL-decoding
Bypass filters with nested encoding.
Practitioner+120 XPOpen →Bypass start-of-path validation
Satisfy a required prefix then climb out.
Practitioner+120 XPOpen →Null-byte extension bypass
Truncate a forced extension with %00.
Practitioner+120 XPOpen →Unprotected admin panel
Browse to an admin route with no auth check.
Apprentice+80 XPOpen →Hidden admin URL discovery
Find an obscure admin path that still lacks auth.
Apprentice+80 XPOpen →Role controlled by a request parameter
Flip a role query/body field to admin.
Apprentice+80 XPOpen →Role editable in the user profile
Change your own role through a profile update.
Apprentice+80 XPOpen →User id controlled by parameter
Swap uid to another account’s data.
Apprentice+80 XPOpen →Unpredictable user IDs still IDOR’d
Collect another GUID and request their object.
Apprentice+80 XPOpen →IDOR leak via redirect body
Catch another user’s data in a redirect response.
Apprentice+80 XPOpen →IDOR discloses a password field
Retrieve another account including password hash/plaintext.
Apprentice+80 XPOpen →Insecure direct object reference on messages
Open another user’s message by changing its id.
Apprentice+80 XPOpen →URL-based access control bypass
Reach a restricted path via alternate routing.
Practitioner+120 XPOpen →Method-based access control bypass
Use an unexpected HTTP method to skip a check.
Practitioner+120 XPOpen →Missing ACL on one workflow step
Skip ahead to a privileged step in a multi-page flow.
Practitioner+120 XPOpen →Referer-based access control
Forge a Referer the server treats as authorization.
Practitioner+120 XPOpen →Username enumeration via responses
Tell valid users apart from the error text.
Apprentice+80 XPOpen →Simple 2FA bypass
Skip the OTP step by jumping to a post-auth URL.
Apprentice+80 XPOpen →Broken password-reset logic
Reset another user’s password by tweaking parameters.
Apprentice+80 XPOpen →Subtle username enumeration
Spot tiny timing/content differences.
Practitioner+120 XPOpen →Username enumeration via timing
Measure response times to find valid accounts.
Practitioner+120 XPOpen →Broken IP-based brute-force protection
Bypass a lockout that only keys on IP.
Practitioner+120 XPOpen →Enumeration via account lock messages
Lock responses reveal whether a user exists.
Practitioner+120 XPOpen →Broken 2FA logic
Verify OTP in the wrong account context.
Practitioner+120 XPOpen →Brute-force a stay-logged-in cookie
Offline/online attack a predictable remember-me value.
Practitioner+120 XPOpen →Offline password cracking
Crack a leaked hash from the app.
Practitioner+120 XPOpen →Reset poisoning via middleware
Poison Host/X-Forwarded-Host on reset.
Practitioner+120 XPOpen →Brute-force via password change
Abuse change-password to guess the current password.
Practitioner+120 XPOpen →Multiple credentials per request
Send many password guesses in one payload.
Expert+160 XPOpen →Brute-force a 2FA code
Automate OTP guessing when rate limits are weak.
Expert+160 XPOpen →Manipulate WebSocket messages
Edit a live WS message to escalate privileges.
Apprentice+80 XPOpen →Cross-site WebSocket hijacking
Attach a victim’s cookies to a cross-site WS.
Practitioner+120 XPOpen →Manipulate the WebSocket handshake
Tamper handshake headers to reach a privileged channel.
Practitioner+120 XPOpen →Poison cache with an unkeyed header
Inject a header the cache does not vary on.
Practitioner+120 XPOpen →Poison cache with an unkeyed cookie
Vary responses using a cookie excluded from the key.
Practitioner+120 XPOpen →Poison cache with multiple headers
Combine several unkeyed inputs for a stable poison.
Practitioner+120 XPOpen →Targeted poison via an unknown header
Discover a proprietary header that influences HTML.
Practitioner+120 XPOpen →Unkeyed query string poisoning
Change a query the cache ignores in its key.
Practitioner+120 XPOpen →Unkeyed query parameter poisoning
Find a parameter excluded from the cache key.
Practitioner+120 XPOpen →Parameter cloaking
Hide a keyed param from the cache key parser.
Practitioner+120 XPOpen →Fat GET cache poisoning
Send a body on GET that the origin honors.
Practitioner+120 XPOpen →URL normalization cache poison
Abuse path normalization differences.
Practitioner+120 XPOpen →Poison a strict cache to hit DOM XSS
Get a DOM payload cached despite strict rules.
Expert+160 XPOpen →Combine cache poisoning primitives
Chain unkeyed inputs for a reliable hit.
Expert+160 XPOpen →Cache key injection
Inject delimiters into the cache key itself.
Expert+160 XPOpen →Internal cache poisoning
Poison a cache only visible on an internal tier.
Expert+160 XPOpen →Modify a serialized object
Flip an admin boolean inside a serialized blob.
Apprentice+80 XPOpen →Modify serialized data types
Change types to bypass comparisons.
Practitioner+120 XPOpen →Abuse app features for deserialization
Use a legitimate import/export path to run gadgets.
Practitioner+120 XPOpen →Arbitrary PHP object injection
Instantiate a gadget class via PHP unserialize.
Practitioner+120 XPOpen →Java deserialization via Commons
Trigger a Commons Collections gadget.
Practitioner+120 XPOpen →PHP deserialization with a known chain
Use a documented PHP gadget chain.
Practitioner+120 XPOpen →Ruby deserialization gadget
Exploit a documented Ruby marshal/YAML chain.
Practitioner+120 XPOpen →Custom Java gadget chain
Build a chain when public gadgets are blocked.
Expert+160 XPOpen →Custom PHP gadget chain
Develop an app-specific PHP POP chain.
Expert+160 XPOpen →PHAR deserialization gadget deploy
Trigger unserialize via a phar:// wrapper.
Expert+160 XPOpen →Secrets in error messages
Trigger an error that leaks a sensitive string.
Apprentice+80 XPOpen →Debug page disclosure
Find a debug/status endpoint left enabled.
Apprentice+80 XPOpen →Source disclosure via backup files
Download a backup that contains credentials.
Apprentice+80 XPOpen →Auth bypass via leaked info
Use disclosed data to skip authentication.
Apprentice+80 XPOpen →Leak via version control history
Recover secrets from an exposed .git directory.
Practitioner+120 XPOpen →Excessive trust in client-side controls
Tamper prices or roles that are only checked in the browser.
Apprentice+80 XPOpen →High-level logic flaw
Buy an item using an unintended high-level flow.
Apprentice+80 XPOpen →Inconsistent security controls
Reach a privileged action on one endpoint but not another.
Apprentice+80 XPOpen →Flawed business rule enforcement
Violate a coupon/limit rule the UI claims to enforce.
Apprentice+80 XPOpen →Low-level logic flaw
Abuse integer overflow / negative quantities.
Practitioner+120 XPOpen →Inconsistent exceptional input handling
Send unexpected types that skip validation.
Practitioner+120 XPOpen →Weak isolation on a dual-use endpoint
Reuse an endpoint for a higher privilege action.
Practitioner+120 XPOpen →Insufficient workflow validation
Skip confirmation steps in a purchase flow.
Practitioner+120 XPOpen →Auth bypass via flawed state machine
Jump states to become authenticated.
Practitioner+120 XPOpen →Infinite money logic flaw
Manufacture credit through a refund/buy loop.
Practitioner+120 XPOpen →Auth bypass via encryption oracle
Abuse an encrypt/decrypt feature to forge tokens.
Practitioner+120 XPOpen →Email parsing discrepancy ACL bypass
Use tricky email forms to confuse access checks.
Expert+160 XPOpen →Basic password-reset Host poisoning
Inject an attacker Host into the reset email link.
Apprentice+80 XPOpen →Host header authentication bypass
Access an internal admin by spoofing Host.
Apprentice+80 XPOpen →Cache poison via ambiguous requests
Send conflicting host-like headers.
Practitioner+120 XPOpen →Routing-based SSRF via Host
Make the edge route your request internally.
Practitioner+120 XPOpen →SSRF via flawed Host parsing
Exploit parser differences on absolute URLs.
Practitioner+120 XPOpen →Host validation bypass via connection state
Reuse a connection after Host checks pass.
Practitioner+120 XPOpen →Reset poisoning via dangling markup
Steal a reset token with dangling markup + Host tricks.
Expert+160 XPOpen →OAuth implicit flow auth bypass
Abuse implicit tokens delivered to the browser.
Apprentice+80 XPOpen →SSRF via OpenID dynamic registration
Register a client that makes the IdP fetch your URL.
Practitioner+120 XPOpen →Forced OAuth profile linking
Link an attacker IdP account to a victim.
Practitioner+120 XPOpen →Account hijack via redirect_uri
Steal the code/token with an open redirect_uri.
Practitioner+120 XPOpen →Steal tokens via open redirect
Bounce an OAuth redirect through an open redirect.
Practitioner+120 XPOpen →Steal tokens via a proxy page
Host a page that extracts tokens from redirects.
Expert+160 XPOpen →RCE via web shell upload
Upload a simple server-side script and execute it.
Apprentice+80 XPOpen →Bypass Content-Type upload checks
Send an allowed Content-Type with a dangerous body.
Apprentice+80 XPOpen →Web shell upload via path traversal
Traverse out of the uploads folder when saving.
Practitioner+120 XPOpen →Extension blacklist bypass
Use an alternate extension the blacklist missed.
Practitioner+120 XPOpen →Obfuscated file extension bypass
Trick extension parsing with odd capitalization/encoding.
Practitioner+120 XPOpen →Polyglot web shell upload
Craft a file that is both a valid image and code.
Practitioner+120 XPOpen →Web shell upload race
Hit the file before an async antivirus deletes it.
Expert+160 XPOpen →JWT accepted without verifying signature
Edit claims when the signature is ignored.
Apprentice+80 XPOpen →JWT flawed signature verification
Bypass a buggy verify implementation.
Apprentice+80 XPOpen →JWT weak signing key
Brute a weak HMAC secret and forge admin.
Practitioner+120 XPOpen →JWT via jwk header injection
Embed your own JWK the server trusts.
Practitioner+120 XPOpen →JWT via jku header injection
Point jku at an attacker-controlled JWK set.
Practitioner+120 XPOpen →JWT kid path traversal
Make kid read a predictable file as the HMAC key.
Practitioner+120 XPOpen →JWT algorithm confusion
Verify an RS256 key as HS256 with the public key.
Expert+160 XPOpen →Alg confusion without exposed key
Recover/derive material needed for confusion.
Expert+160 XPOpen →Targeted scanning for quick wins
Use focused checks instead of noisy full scans.
Practitioner+120 XPOpen →Scan non-standard data structures
Find bugs in JSON/GraphQL/custom encodings.
Practitioner+120 XPOpen →Client prototype pollution via APIs
Pollute Object.prototype through a merge API.
Practitioner+120 XPOpen →DOM XSS via prototype pollution
Turn pollution into a DOM XSS sink hit.
Practitioner+120 XPOpen →Alternate prototype pollution vector
Find a second gadget when the first is blocked.
Practitioner+120 XPOpen →Pollution past flawed sanitization
Bypass a filter that blocks __proto__ naively.
Practitioner+120 XPOpen →Pollution in a third-party library
Abuse a vulnerable client library merge.
Practitioner+120 XPOpen →Server-side pollution to privilege escalation
Escalate roles via polluted server objects.
Practitioner+120 XPOpen →Detect server pollution without reflection
Blindly detect pollution gadgets.
Practitioner+120 XPOpen →Bypass server pollution input filters
Encode around blocked prototype keys.
Practitioner+120 XPOpen →RCE via server-side prototype pollution
Reach a dangerous sink after pollution.
Practitioner+120 XPOpen →Exfiltrate data via server pollution
Leak secrets through a pollution gadget.
Expert+160 XPOpen →Access private GraphQL posts
Query posts that should be authorization-gated.
Apprentice+80 XPOpen →Accidental exposure of private fields
Request fields missing from the public schema docs.
Practitioner+120 XPOpen →Find a hidden GraphQL endpoint
Discover an alternate /graphql path.
Practitioner+120 XPOpen →Bypass GraphQL brute-force protections
Alias-batch login attempts in one request.
Practitioner+120 XPOpen →CSRF over GraphQL mutations
Forge a cross-site GraphQL state change.
Practitioner+120 XPOpen →Bypass rate limits via races
Send parallel attempts before counters update.
Practitioner+120 XPOpen →Multi-endpoint race condition
Hit two endpoints that share unsafe state.
Practitioner+120 XPOpen →Single-endpoint race condition
Parallelize one endpoint to corrupt state.
Practitioner+120 XPOpen →Exploit a time-sensitive check
Win a narrow timing window in validation.
Practitioner+120 XPOpen →Partial construction race
Use an object before initialization finishes.
Expert+160 XPOpen →Detect NoSQL injection
Confirm operator injection in a JSON login.
Apprentice+80 XPOpen →NoSQL operator auth bypass
Bypass login with $ne / $gt style operators.
Apprentice+80 XPOpen →Extract data via NoSQL injection
Enumerate fields with operators.
Practitioner+120 XPOpen →Extract unknown fields with operators
Discover hidden document keys.
Practitioner+120 XPOpen →Exploit an API using its docs
Find a privileged operation documented but unprotected.
Apprentice+80 XPOpen →Server-side parameter pollution in query
Inject extra params the backend misparses.
Practitioner+120 XPOpen →Find and exploit an unused API endpoint
Call a legacy endpoint still wired to production.
Practitioner+120 XPOpen →Mass assignment vulnerability
Send privileged fields the binder accepts.
Practitioner+120 XPOpen →SSPP in a REST URL path
Pollute path parameters server-side.
Expert+160 XPOpen →LLM APIs with excessive agency
Convince a tool-using LLM to take a privileged action.
Apprentice+80 XPOpen →Exploit vulnerabilities in LLM APIs
Abuse model/tool endpoints directly.
Practitioner+120 XPOpen →Indirect prompt injection
Plant instructions in retrieved content.
Practitioner+120 XPOpen →Insecure LLM output handling
Turn model output into XSS/SSTI/RCE in the app.
Expert+160 XPOpen →AI agent destructive actions
Trick an agent into deleting or wiping data.
Apprentice+80 XPOpen →AI agent data exfiltration
Coax an agent to send secrets outbound.
Apprentice+80 XPOpen →AI agent triggers a secondary bug
Use the agent as a confused deputy into XSS/SSRF.
Practitioner+120 XPOpen →Bypass AI scanner defenses
Smuggle content past an LLM safety/scanner layer.
Practitioner+120 XPOpen →Path mapping cache deception
Map a private path onto a cacheable static suffix.
Apprentice+80 XPOpen →Path delimiter cache deception
Abuse ; or similar delimiters vs cache rules.
Practitioner+120 XPOpen →Origin normalization deception
Mismatch origin normalization vs cache key.
Practitioner+120 XPOpen →Cache-server normalization deception
Exploit how the cache normalizes paths.
Practitioner+120 XPOpen →Exact-match cache rule deception
Beat exact-match rules with subtle path variants.
Expert+160 XPOpen →
Curriculum lesson labs still appear in Learn. This Academy is Cyberlium's interactive path — original labs, fully hosted here.