library / complete index

Writeups

Every lab note, grouped by its topic path. Choose a filter or browse the full collection.

89 writeups · 3 topics

All writeups

89 entries
12.07.2026

IDOR in Downloadable Chat Transcripts

Sequential transcript filenames expose an authorization gap: changing the requested object retrieves another lab user's conversation and synthetic credential.

11.07.2026

Exploiting server-side parameter pollution in a REST URL

POST /forgot-password embeds the supplied username in an internal REST path without canonicalizing it first. Traversal segments and a URL fragment redirect the backend request to the administrator's passwordResetToken field.

11.07.2026

Bypassing URL-Based Access Control with X-Original-URL

The front end blocks visible /admin paths, but the backend honors X-Original-URL when selecting a route. Sending an innocuous request target with the protected path in that header reaches the administrative action.

11.07.2026

Sensitive Data Leakage in an Authorization Redirect

Requesting Carlos's account produces a redirect, but the server includes his API key in the 302 response body before the browser follows that redirect. Authorization must protect the response itself, not rely on navigation behavior.

11.07.2026

Finding and exploiting an unused API endpoint

The product page uses GET /api/products/1/price, yet the same route also accepts an undocumented PATCH request. Setting the price to zero lets an ordinary account buy the jacket without paying its intended cost.

11.07.2026

Password Disclosure Through a User-Controlled Account ID

The account page trusts a user-controlled id parameter and renders the selected user's password into an HTML password field. Browser masking changes only presentation: the underlying value remains available to the client.

11.07.2026

2FA simple bypass

Direct navigation to the account page bypasses the pending second-factor step after valid password authentication.

11.07.2026

IDOR Despite Unpredictable User Identifiers

The account endpoint uses GUID-like identifiers rather than predictable usernames or integers. That makes guessing harder, but the application publishes Carlos's identifier in an author link.

11.07.2026

Privilege Escalation Through Profile Mass Assignment

The profile endpoint binds extra client-supplied JSON properties while updating an email address. Its response exposes roleid, and adding "roleid": 2 to the request promotes the current account to administrator.

10.07.2026

Brute-forcing a stay-logged-in cookie

A stay-logged-in cookie encodes the username alongside an unsalted MD5 password hash. Recomputing that predictable token for password candidates yields a valid cookie for Carlos's account.

10.07.2026

Offline password cracking

A stolen persistent-login cookie reveals a weak password hash that can be cracked offline and reused for authentication.

10.07.2026

Password reset broken logic

The reset submission trusts its username field instead of binding the new password to the account that requested the token.

10.07.2026

Username enumeration via account lock

Account lockout becomes the oracle: repeated failures trigger a warning only for a real username, after which a controlled password test completes the lab.

09.07.2026

Excessive trust in client-side controls

Because POST /cart accepts the product price from the browser, changing price=133700 to price=1 adds the leather jacket for one cent. The server should derive prices from its own catalog rather than client input.

09.07.2026

Flawed enforcement of business rules

The cart remembers only the last coupon. Alternating SIGNUP30 and NEWCUST5 therefore reapplies both discounts until the $1,337 jacket falls below the $100 balance.

09.07.2026

High-level logic vulnerability

A signed quantity in POST /cart permits negative line items that offset the jacket's price. Balancing those entries to a small positive total lets checkout succeed despite insufficient funds.

09.07.2026

Infinite money logic flaw

A reusable discount makes a gift card cost less than the credit received when it is redeemed. Repeating the purchase-and-redeem cycle increases the account balance.

09.07.2026

Insufficient workflow validation

Calling the final checkout endpoint out of sequence skips the payment transition while the server still accepts the purchase.

09.07.2026

Low-level logic flaw

Repeated quantity=99 additions overflow the cart's signed 32-bit total and wrap it below zero. Further adjustments place the total within the account balance, allowing an otherwise unaffordable purchase.

08.07.2026

Authentication Bypass via a Flawed State Machine

The authentication state machine assumes every user completes the role-selection transition after login. Dropping that request leaves the new session in an unsafe default state with access to administrative functionality.

08.07.2026

CSRF where token is duplicated in cookie

The CSRF check compares the form value only with a csrf cookie, without binding either value to the authenticated session. Header injection through search lets an attacker plant a matching pair before the victim submits the email change.

08.07.2026

CSRF where token is not tied to user session

The server validates CSRF tokens without binding them to the session that issued them. A token from the attacker's account therefore remains valid when the victim's browser submits it with the victim's session cookie.

08.07.2026

CSRF where token is tied to non-session cookie

The email-change handler binds the csrf form token to the non-session csrfKey cookie rather than the login session. Response-header injection through the search endpoint can install an attacker-controlled matching token and cookie.

08.07.2026

SameSite Lax bypass via cookie refresh

The /social-login flow reaches /oauth-callback and refreshes the session cookie without an explicit SameSite attribute. Chrome's two-minute Lax-by-default exception then permits a cross-site POST that changes the victim's email.

08.07.2026

SameSite Lax bypass via method override

Although the endpoint rejects a plain GET, its _method=POST override performs the email change during top-level navigation. That method confusion allows the victim's SameSite=Lax session cookie to accompany a cross-site request.

07.07.2026

SameSite Strict bypass via client-side redirect

The confirmation script appends postId to /post/ without blocking path traversal. A crafted ../my-account/change-email URL turns a cross-site visit into a same-site redirect, so the browser's Strict cookie accompanies the request.

07.07.2026

SameSite Strict bypass via sibling domain

An XSS flaw on the support sibling domain runs in the same site as the target and opens its WebSocket endpoint with the victim's Strict cookie. Sending READY exposes Carlos's chat history across the sibling-domain trust boundary.

07.07.2026

Blind SQL injection with conditional responses

The "Welcome back!" message forms a one-bit SQL oracle for predicates injected through TrackingId. Length checks establish a 20-character password, and SUBSTR comparisons recover the administrator value one character at a time.

07.07.2026

CSRF Vulnerability with No Defenses

The email-change endpoint authorizes a state-changing POST using only the browser's session cookie. With no anti-CSRF token or equivalent origin check, an external page can submit the request as the authenticated victim.

07.07.2026

Blind SQL injection with out-of-band data exfiltration

Oracle EXTRACTVALUE and XMLType place the administrator password into a Collaborator subdomain requested by the database. The resulting DNS lookup carries the secret even though the application response contains no query output.

07.07.2026

Blind SQL injection with out-of-band interaction

The proof arrives outside the HTTP response: the in-band response is unchanged, but EXTRACTVALUE(xmltype(... SYSTEM "http://COLLAB/" ...),'/l') FROM dual causes a Collaborator DNS interaction.

07.07.2026

Blind SQL injection with time delays

The page content remains unchanged, but a PostgreSQL payload containing pg_sleep(10) delays the response by ten seconds. That repeatable timing difference proves the TrackingId cookie reaches an executable SQL context.

06.07.2026

Blind SQL Injection with Conditional Errors

This lab contains blind SQL injection in the TrackingId cookie. Successful and unsuccessful queries do not produce useful content differences, but a database exception causes a distinct HTTP error.

06.07.2026

SQL injection vulnerability allowing login bypass

Injecting administrator' or '1'='1' -- changes the username predicate to true and comments out the password comparison. The resulting query authenticates an administrator session without a valid password.

05.07.2026

SQL injection with filter bypass via XML encoding

The stock API evaluates the XML storeId value as SQL, although its filter inspects the value before XML entities are decoded. Encoding a UNION SELECT payload with Hackvertor bypasses the filter and returns the users table credentials.

05.07.2026

Exploiting cross-site scripting to capture passwords

Unsanitized comment HTML can add username and password inputs that the simulated victim's password manager autofills. JavaScript then sends those credentials to Collaborator before the attacker signs in and deletes Carlos.

04.07.2026

Exploiting cross-site scripting to steal cookies

A stored comment executes JavaScript for later viewers and can read document.cookie because the session token lacks HttpOnly. Exfiltrating the administrator cookie to Collaborator enables session hijacking and deletion of Carlos.

04.07.2026

Exploiting XSS to bypass CSRF defenses

Stored script runs in the application's origin, fetches /my-account, and extracts the current CSRF token. It can then submit that token with a forged email change, bypassing a defense that remains inaccessible only to cross-origin pages.

04.07.2026

Reflected DOM XSS

The search API reflects input into JSON that client code passes to eval(responseText). Escaping the JSON string and preserving valid syntax converts the reflected value into JavaScript execution in the browser.

04.07.2026

Reflected XSS in canonical link tag

The raw query string enters the href attribute of a canonical link in the document head. An injected accesskey and onclick handler exploit that attribute context even though angle brackets cannot create another element.

03.07.2026

Reflected XSS with some SVG markup allowed

Although common HTML tags and event handlers are denied, the filter permits SVG animation elements and onbegin. An animateTransform payload uses that surviving event to execute script without a user click.

03.07.2026

Stored DOM XSS

Stored comments pass through replacements that sanitize only the first angle-bracket pair before reaching innerHTML. Adding a harmless pair first leaves a later image element intact, where its error handler executes.

Writeups / PortSwigger

87 entries
12.07.2026

IDOR in Downloadable Chat Transcripts

Sequential transcript filenames expose an authorization gap: changing the requested object retrieves another lab user's conversation and synthetic credential.

11.07.2026

Exploiting server-side parameter pollution in a REST URL

POST /forgot-password embeds the supplied username in an internal REST path without canonicalizing it first. Traversal segments and a URL fragment redirect the backend request to the administrator's passwordResetToken field.

11.07.2026

Bypassing URL-Based Access Control with X-Original-URL

The front end blocks visible /admin paths, but the backend honors X-Original-URL when selecting a route. Sending an innocuous request target with the protected path in that header reaches the administrative action.

11.07.2026

Sensitive Data Leakage in an Authorization Redirect

Requesting Carlos's account produces a redirect, but the server includes his API key in the 302 response body before the browser follows that redirect. Authorization must protect the response itself, not rely on navigation behavior.

11.07.2026

Finding and exploiting an unused API endpoint

The product page uses GET /api/products/1/price, yet the same route also accepts an undocumented PATCH request. Setting the price to zero lets an ordinary account buy the jacket without paying its intended cost.

11.07.2026

Password Disclosure Through a User-Controlled Account ID

The account page trusts a user-controlled id parameter and renders the selected user's password into an HTML password field. Browser masking changes only presentation: the underlying value remains available to the client.

11.07.2026

2FA simple bypass

Direct navigation to the account page bypasses the pending second-factor step after valid password authentication.

11.07.2026

IDOR Despite Unpredictable User Identifiers

The account endpoint uses GUID-like identifiers rather than predictable usernames or integers. That makes guessing harder, but the application publishes Carlos's identifier in an author link.

11.07.2026

Privilege Escalation Through Profile Mass Assignment

The profile endpoint binds extra client-supplied JSON properties while updating an email address. Its response exposes roleid, and adding "roleid": 2 to the request promotes the current account to administrator.

10.07.2026

Brute-forcing a stay-logged-in cookie

A stay-logged-in cookie encodes the username alongside an unsalted MD5 password hash. Recomputing that predictable token for password candidates yields a valid cookie for Carlos's account.

10.07.2026

Offline password cracking

A stolen persistent-login cookie reveals a weak password hash that can be cracked offline and reused for authentication.

10.07.2026

Password reset broken logic

The reset submission trusts its username field instead of binding the new password to the account that requested the token.

10.07.2026

Username enumeration via account lock

Account lockout becomes the oracle: repeated failures trigger a warning only for a real username, after which a controlled password test completes the lab.

09.07.2026

Excessive trust in client-side controls

Because POST /cart accepts the product price from the browser, changing price=133700 to price=1 adds the leather jacket for one cent. The server should derive prices from its own catalog rather than client input.

09.07.2026

Flawed enforcement of business rules

The cart remembers only the last coupon. Alternating SIGNUP30 and NEWCUST5 therefore reapplies both discounts until the $1,337 jacket falls below the $100 balance.

09.07.2026

High-level logic vulnerability

A signed quantity in POST /cart permits negative line items that offset the jacket's price. Balancing those entries to a small positive total lets checkout succeed despite insufficient funds.

09.07.2026

Infinite money logic flaw

A reusable discount makes a gift card cost less than the credit received when it is redeemed. Repeating the purchase-and-redeem cycle increases the account balance.

09.07.2026

Insufficient workflow validation

Calling the final checkout endpoint out of sequence skips the payment transition while the server still accepts the purchase.

09.07.2026

Low-level logic flaw

Repeated quantity=99 additions overflow the cart's signed 32-bit total and wrap it below zero. Further adjustments place the total within the account balance, allowing an otherwise unaffordable purchase.

08.07.2026

Authentication Bypass via a Flawed State Machine

The authentication state machine assumes every user completes the role-selection transition after login. Dropping that request leaves the new session in an unsafe default state with access to administrative functionality.

08.07.2026

CSRF where token is duplicated in cookie

The CSRF check compares the form value only with a csrf cookie, without binding either value to the authenticated session. Header injection through search lets an attacker plant a matching pair before the victim submits the email change.

08.07.2026

CSRF where token is not tied to user session

The server validates CSRF tokens without binding them to the session that issued them. A token from the attacker's account therefore remains valid when the victim's browser submits it with the victim's session cookie.

08.07.2026

CSRF where token is tied to non-session cookie

The email-change handler binds the csrf form token to the non-session csrfKey cookie rather than the login session. Response-header injection through the search endpoint can install an attacker-controlled matching token and cookie.

08.07.2026

SameSite Lax bypass via cookie refresh

The /social-login flow reaches /oauth-callback and refreshes the session cookie without an explicit SameSite attribute. Chrome's two-minute Lax-by-default exception then permits a cross-site POST that changes the victim's email.

08.07.2026

SameSite Lax bypass via method override

Although the endpoint rejects a plain GET, its _method=POST override performs the email change during top-level navigation. That method confusion allows the victim's SameSite=Lax session cookie to accompany a cross-site request.

07.07.2026

SameSite Strict bypass via client-side redirect

The confirmation script appends postId to /post/ without blocking path traversal. A crafted ../my-account/change-email URL turns a cross-site visit into a same-site redirect, so the browser's Strict cookie accompanies the request.

07.07.2026

SameSite Strict bypass via sibling domain

An XSS flaw on the support sibling domain runs in the same site as the target and opens its WebSocket endpoint with the victim's Strict cookie. Sending READY exposes Carlos's chat history across the sibling-domain trust boundary.

07.07.2026

Blind SQL injection with conditional responses

The "Welcome back!" message forms a one-bit SQL oracle for predicates injected through TrackingId. Length checks establish a 20-character password, and SUBSTR comparisons recover the administrator value one character at a time.

07.07.2026

CSRF Vulnerability with No Defenses

The email-change endpoint authorizes a state-changing POST using only the browser's session cookie. With no anti-CSRF token or equivalent origin check, an external page can submit the request as the authenticated victim.

07.07.2026

Blind SQL injection with out-of-band data exfiltration

Oracle EXTRACTVALUE and XMLType place the administrator password into a Collaborator subdomain requested by the database. The resulting DNS lookup carries the secret even though the application response contains no query output.

07.07.2026

Blind SQL injection with out-of-band interaction

The proof arrives outside the HTTP response: the in-band response is unchanged, but EXTRACTVALUE(xmltype(... SYSTEM "http://COLLAB/" ...),'/l') FROM dual causes a Collaborator DNS interaction.

07.07.2026

Blind SQL injection with time delays

The page content remains unchanged, but a PostgreSQL payload containing pg_sleep(10) delays the response by ten seconds. That repeatable timing difference proves the TrackingId cookie reaches an executable SQL context.

06.07.2026

Blind SQL Injection with Conditional Errors

This lab contains blind SQL injection in the TrackingId cookie. Successful and unsuccessful queries do not produce useful content differences, but a database exception causes a distinct HTTP error.

06.07.2026

SQL injection vulnerability allowing login bypass

Injecting administrator' or '1'='1' -- changes the username predicate to true and comments out the password comparison. The resulting query authenticates an administrator session without a valid password.

05.07.2026

SQL injection with filter bypass via XML encoding

The stock API evaluates the XML storeId value as SQL, although its filter inspects the value before XML entities are decoded. Encoding a UNION SELECT payload with Hackvertor bypasses the filter and returns the users table credentials.

05.07.2026

Exploiting cross-site scripting to capture passwords

Unsanitized comment HTML can add username and password inputs that the simulated victim's password manager autofills. JavaScript then sends those credentials to Collaborator before the attacker signs in and deletes Carlos.

04.07.2026

Exploiting cross-site scripting to steal cookies

A stored comment executes JavaScript for later viewers and can read document.cookie because the session token lacks HttpOnly. Exfiltrating the administrator cookie to Collaborator enables session hijacking and deletion of Carlos.

04.07.2026

Exploiting XSS to bypass CSRF defenses

Stored script runs in the application's origin, fetches /my-account, and extracts the current CSRF token. It can then submit that token with a forged email change, bypassing a defense that remains inaccessible only to cross-origin pages.

04.07.2026

Reflected DOM XSS

The search API reflects input into JSON that client code passes to eval(responseText). Escaping the JSON string and preserving valid syntax converts the reflected value into JavaScript execution in the browser.

04.07.2026

Reflected XSS in canonical link tag

The raw query string enters the href attribute of a canonical link in the document head. An injected accesskey and onclick handler exploit that attribute context even though angle brackets cannot create another element.

03.07.2026

Reflected XSS with some SVG markup allowed

Although common HTML tags and event handlers are denied, the filter permits SVG animation elements and onbegin. An animateTransform payload uses that surviving event to execute script without a user click.

03.07.2026

Stored DOM XSS

Stored comments pass through replacements that sanitize only the first angle-bracket pair before reaching innerHTML. Adding a harmless pair first leaves a later image element intact, where its error handler executes.

Writeups / Web

1 entries

Writeups / Active-Directory

1 entries