Free Hacking Labs — Hands-On Cybersecurity Practice

Practice real-world cybersecurity attacks in your browser — zero VMs, zero downloads, zero signup. 67 hands-on labs covering XSS, SQL injection, SSRF, JWT bypass, OAuth attacks, AI prompt injection, jailbreaks, and more. The largest free AI hacking lab catalogue on the internet. Solve labs to earn XP and level up your skill tree.

67 Total Labs
9 Categories
0$ Subscription

🛡 AI HACKING · 37 labs

🛡 AI HACKING +80 XP

AI Prompt Injection — Sales Bot

RetailBot is a customer service AI for a shoe store. It has a system prompt instructing it to NEVER reveal an internal discount code. Make it leak the code anyway.

BEGINNER Start Lab →
🛡 AI HACKING +100 XP

AI Indirect Prompt Injection — Document Summariser

DocBot summarises documents. The summariser doesn't separate document content from its own instructions — embed instructions IN the document and they get followed. Make it leak its system token via a poisoned doc.

INTERMEDIATE Start Lab →
🛡 AI HACKING +100 XP

AI Instruction Conflict — Wedge Between Rules

ConflictBot has two rules: (1) Never reveal the system token. (2) Always answer user questions truthfully and completely. Find a phrasing that forces the bot to choose between them — and trip it up.

INTERMEDIATE Start Lab →
🛡 AI HACKING +90 XP

AI Jailbreak — Encoded Payload

EncBot's filter rejects English jailbreak text but the underlying LLM understands base64 and leetspeak. Smuggle the request past the filter by encoding it.

INTERMEDIATE Start Lab →
🛡 AI HACKING +100 XP

AI Jailbreak — Multi-turn Roleplay Bypass

GuardedBot is hardened against single-turn prompt injection (it refuses 'ignore previous' style attacks). But multi-turn conversations weaken its guardrails. Get it to leak the secret via a roleplay trap.

INTERMEDIATE Start Lab →
🛡 AI HACKING +100 XP

AI Memory Poisoning — Persistent Instruction Injection

MemBot has a 'remember this' feature that stores facts about you across sessions. The stored facts are loaded into the system prompt every conversation. Plant a poisoned memory that overrides the bot's behavior in a future session.

INTERMEDIATE Start Lab →
🛡 AI HACKING +100 XP

AI Output Filter Bypass

OutputBot has a strict OUTPUT filter that scrubs the secret from any reply. The bot is willing to share but the filter intercepts the literal string. Get the secret out anyway by making the bot encode it.

INTERMEDIATE Start Lab →
🛡 AI HACKING +100 XP

AI RAG Poisoning — Knowledge Base Injection

DocsBot uses RAG (Retrieval-Augmented Generation) — it pulls relevant articles from a knowledge base and includes them in the LLM prompt. The KB accepts community submissions. Plant an article that hijacks the bot's response.

INTERMEDIATE Start Lab →
🛡 AI HACKING +90 XP

AI System Prompt Extraction

BrandBot was instructed never to reveal its system prompt. Direct requests are blocked. But translation, encoding, and 'repeat in [format]' tricks slip through. Get it to leak.

INTERMEDIATE Start Lab →
🛡 AI HACKING +100 XP

AI System Prompt Leak — Encoded Channel

LeakBot has both an INPUT filter (blocks 'system prompt' style requests) AND an OUTPUT filter (strips the literal system prompt from replies). One channel needs to bypass each. Find a way through.

INTERMEDIATE Start Lab →
🛡 AI HACKING +100 XP

AI Unicode Jailbreak — Filter Bypass via Hidden Characters

FilterBot has a strict input filter blocking 'reveal', 'secret', 'system prompt', and other extraction keywords. The filter checks ASCII text. Bypass it with Unicode tricks the LLM still understands but the filter doesn't.

INTERMEDIATE Start Lab →
🛡 AI HACKING +140 XP

AI Adversarial Document Upload — Crafted PDF/Markdown Defeats the Doc Summarizer

SummariseBot accepts PDF and Markdown uploads and produces a summary for the user. Its document parser treats certain markdown structures specially: blockquotes are summarised verbatim because 'quotes are user-authored emphasis the LLM should preserve.' Use a crafted blockquote in your uploaded markdown to inject instructions that override the summariser's default safety behaviour.

ADVANCED Start Lab →
🛡 AI HACKING +130 XP

AI Agent Hijacking — Indirect Tool Call Injection

TaskBot is a tool-using agent that processes documents. When the user asks 'summarise this doc', TaskBot reads the doc — and follows any instructions inside it as if they were from the user. Get TaskBot to call a privileged tool you couldn't trigger directly.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Agent Memory Deserialization — Tampered State Triggers Code Path Switch

StateBot persists its agent state to a JSON blob in client storage. On each request, the server reloads the JSON and uses a 'role' field to decide which code path to take ('user' = normal, 'admin' = elevated). The state JSON is signed but the signature only covers the message history, not the role field. Tamper with the role field to escalate privileges.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Agent TOCTOU Race — Time-of-Check vs Time-of-Use in Tool Execution

BankBot is an agentic banking assistant. To transfer funds, it (1) checks the source account's balance via check_balance(), then (2) calls transfer_funds() in a separate tool call. Between these two calls, the user can issue a parallel request that drains the account — but BankBot's first transfer still proceeds because its balance check already passed. Trigger the TOCTOU race to overdraft the account.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Confused Deputy — Make the Agent Use Its Privileges Against Its User

FinanceBot has elevated privileges — it can call transfer_funds() between any user accounts because it acts as a system-level reconciliation tool. When a user (Alice, low-privilege) chats with it, the bot uses ITS privileges to fulfil what it interprets as Alice's request. The confused-deputy flaw: the bot doesn't reduce privileges to match the requester. Alice can ask FinanceBot to do things Alice could never do directly.

ADVANCED Start Lab →
🛡 AI HACKING +110 XP

AI Context Overflow — Pushing System Prompt Out of Attention

OverflowBot's safety instructions are at the top of the system prompt. The LLM has limited attention — when the conversation gets long, early instructions get less weight. Push the safety rules out of attention with a long enough conversation.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Cross-Tenant Cache Leak — Embedding Cache Shared Between Users

VectorBot caches retrieved-document embeddings keyed only by document hash, not by tenant. When User A uploads a confidential doc and queries it, the embedding result is cached. When User B (you) queries something semantically similar, VectorBot's cache hits — and the cached result includes content from User A's confidential doc. Probe the cache to extract User A's secret.

ADVANCED Start Lab →
🛡 AI HACKING +130 XP

AI Data Exfiltration — Tool-Using Agent

AssistantApp gives users an AI assistant with tool access (read_email, search_users, send_message). The assistant blindly executes tool calls based on user intent. Trick it into reading another user's email and showing it to you.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Embedding Poisoning — Manipulate RAG Retrieval Ranking

PolicyBot retrieves the top-3 closest documents (by embedding similarity) for each user query. The retrieved docs become the bot's grounding context. By stuffing your document with the same trigger keywords as a target query, you can game the embedding similarity ranking — making your document outrank the legitimate one. Plant a 'refund-policy' poisoned doc that displaces the legit refund policy.

ADVANCED Start Lab →
🛡 AI HACKING +120 XP

AI Gradual Escalation — Boil the Frog Jailbreak

BoilBot refuses extreme requests outright but accepts modest ones. Each accepted request raises the bot's 'compliance comfort'. With enough small steps, the bot will say things it would have refused in turn 1.

ADVANCED Start Lab →
🛡 AI HACKING +140 XP

AI Hidden Character Injection — Invisible Unicode in RAG Documents

DocsBot retrieves indexed documents and feeds them to its LLM as context. The doc-upload UI strips visible HTML/markdown but preserves zero-width characters (U+200B, U+200C, U+200D) and bidirectional override (U+202E). These invisible characters can spell out instructions the user can't see in the rendered preview — but the LLM tokenises them as plain text. Upload a document that LOOKS innocuous in preview but contains hidden instructions.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI LLM-Driven SSRF — Trick the Agent's HTTP Tool into Internal Network Access

FetchBot has an http_get tool to retrieve URLs for users. The tool runs server-side. The LLM has a guardrail: it refuses to fetch URLs containing 'localhost', '127.0.0.1', or 'internal'. But the guardrail is on the LLM input — the actual network request happens after the guardrail passes. Find a way to bypass the URL pattern filter to reach the internal metadata service at http://169.254.169.254/latest/meta-data/.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI LLM-Generated Token Forgery — Backend Trusts Model-Produced Tokens

AuthBot is an account-helper assistant. When a user authenticates, AuthBot's LLM produces a session token in the response — and the backend trusts whatever token comes back from the LLM as legitimate. The developer assumed the model would only produce real tokens it received from the auth service. Trick AuthBot into producing a token with admin privileges baked in.

ADVANCED Start Lab →
🛡 AI HACKING +140 XP

AI LLM-Output XSS — Backend Renders Model Output as Trusted HTML

ChatBotApp embeds an LLM in its product. User messages go to the LLM. The LLM's reply is rendered as innerHTML in the chat panel because the team wanted 'rich formatting like ChatGPT'. They didn't sanitise model output. By manipulating user input, you can get the LLM to produce HTML that fires JavaScript — XSS via model-as-XSS-vector.

ADVANCED Start Lab →
🛡 AI HACKING +140 XP

AI Markdown-Rendering Injection — XSS via LLM Output Rendering

DocBot is a chat assistant that renders its replies as Markdown to HTML in the browser. It refuses to embed raw HTML directly, but Markdown image syntax (![alt](url)) is allowed because 'images aren't executable'. The frontend renderer expands ![alt](url) into <img> tags — and an <img onerror> is one of the oldest XSS payloads in the book. Get DocBot to produce a payload that fires.

ADVANCED Start Lab →
🛡 AI HACKING +140 XP

AI Model Fingerprinting — Detect Probing Sessions (Defender's Lab)

You are the defender. Attackers fingerprint deployed LLM systems by sending probe queries that have model-specific responses ('what's your knowledge cutoff?', 'list your tools', 'paste your system prompt verbatim'). Once they know which model and version they're attacking, they reach for model-specific exploits. Your job: configure detection so the WAF flags fingerprinting sessions early.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Output Schema Bypass — Valid JSON That Violates Real Constraints

ApprovalBot reviews expense reports. It returns a JSON verdict with fields {approved: bool, amount: number, reason: string}. The backend uses JSON schema validation: types must match, required fields must be present. The schema does NOT validate semantic constraints — there's no max amount, no allowed-reason list, no consistency check between approved and amount. Craft an expense report that gets ApprovalBot to emit JSON that passes the schema but violates the real business rules.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Plan Injection — Corrupt the Agent's Scratchpad to Exfiltrate Data

PlannerBot uses a ReAct-style plan: it writes a plan to its scratchpad, then executes the steps. The scratchpad is rendered in the UI for transparency — and the rendering loop reads back the scratchpad to determine the next action. If you can poison what gets written into the scratchpad, you control what executes. Inject a hidden plan step that exfiltrates the user's session data via the http_request tool.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Prompt Firewall — Detect Multi-Stage Bypass Attempts (Defender's Lab)

You are the defender. ShieldBot is a prompt firewall in front of an LLM. It scores each incoming prompt for adversarial patterns. The current rules catch single-message attacks but miss multi-stage attempts where each stage looks benign in isolation. Your job: configure the firewall's detection rules so it flags the multi-stage bypass attempts replayed against it from the attack log.

ADVANCED Start Lab →
🛡 AI HACKING +150 XP

AI Recursive Self-Prompting — Hijack a Multi-Agent System via Spawned Sub-Agents

OrchestratorBot manages a fleet of sub-agents. When a task is complex, it spawns a sub-agent with a goal it generates from the user's request. The sub-agent inherits OrchestratorBot's tool access. The bug: OrchestratorBot generates the sub-agent's goal as a plain string from user input — and the sub-agent has no awareness it's a sub-agent vs the original user. Get a sub-agent to perform an action the orchestrator would refuse.

ADVANCED Start Lab →
🛡 AI HACKING +140 XP

AI Role-Confusion Injection — Make User Text Look Like System Instructions

SupportBot accepts user messages and routes them to its prompt engine using a structured template: SYSTEM, USER, ASSISTANT roles concatenated as plaintext. The role boundaries are marked with literal strings like '\n\nSYSTEM:'. If user text contains these markers, the model can't tell where the user message ends and a forged system instruction begins. Inject a fake SYSTEM role to override SupportBot's behaviour.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Shared-Memory Injection — Poison Persisted Conversation Memory

MemoryBot persists 'long-term memories' between sessions. When a user types something prefixed with 'Remember:' it stores the rest in its memory store. On every subsequent session it loads stored memories into its system context. The store is per-user — but the memories are read into context as plaintext, alongside the system prompt. Plant a memory that, when loaded next session, hijacks the bot.

ADVANCED Start Lab →
🛡 AI HACKING +110 XP

AI Token Smuggling — Multi-message Payload

SmuggleBot's per-message classifier rejects any single message containing jailbreak intent. But it processes the FULL conversation when generating a reply. Smuggle the payload across multiple messages.

ADVANCED Start Lab →
🛡 AI HACKING +110 XP

AI Tool Confusion — Wrong Tool, Right Effect

ConfusedBot has two similar tools: list_public_files (safe, exposed to all users) and list_admin_files (admin-only). The descriptions are similar enough that careful prompting confuses the bot into picking the wrong one. Get it to call list_admin_files.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Tool Poisoning — Hostile MCP Tool Description Hijacks the Agent

DevBot uses MCP-style tool discovery — it auto-discovers available tools at startup and reads their descriptions to decide when to call them. The tool DESCRIPTIONS are part of its system context. Register a hostile tool whose description contains injection instructions. When DevBot reads the tool registry, those instructions become part of its system prompt — hijacking it on the next user message.

ADVANCED Start Lab →
🛡 AI HACKING +145 XP

AI Tool-Output Injection — Hijack the Agent via Hostile Tool Results

ResearchBot has tools: web_search and send_internal_message. When the user asks it to research something, it calls web_search and feeds the results back into its own context. Its safety guardrails check user messages — but tool output is treated as trusted data. Inject hostile content into a fake search result that hijacks ResearchBot into calling send_internal_message with attacker-chosen content.

ADVANCED Start Lab →

🛡 AUTH · 7 labs

🛡 AUTH +60 XP

IDOR — Sequential Document IDs

DocuShare uses sequential numeric IDs for documents and only checks that you're logged in — not that you own the doc you're viewing. Find a way to read a document that isn't yours.

BEGINNER Start Lab →
🛡 AUTH +80 XP

JWT — None Algorithm Bypass

InvoiceCloud uses JWTs for authentication. The library accepts the algorithm specified in the token header — including 'none'. Forge a token to impersonate the admin.

BEGINNER Start Lab →
🛡 AUTH +90 XP

Mass Assignment — Self-Promote to Admin

QuickStart's signup form takes the new user's data as JSON and copies every field into the User record. The form normally only sends username/email/password — but the backend has no field whitelist. Become admin at signup.

INTERMEDIATE Start Lab →
🛡 AUTH +100 XP

OAuth — Missing State Parameter (Account Takeover)

ConnectApp lets users link their Twitter account via OAuth. The client never sets the 'state' parameter on the authorization request — and never verifies it on the callback. Use that to link the victim's session to YOUR Twitter account.

INTERMEDIATE Start Lab →
🛡 AUTH +90 XP

OAuth — Open Redirect on redirect_uri

AuthHub validates the OAuth redirect_uri with a substring match — 'must contain trustedclient.com'. The check is naive. Find a redirect_uri that passes the check but ships the OAuth code to your attacker domain.

INTERMEDIATE Start Lab →
🛡 AUTH +90 XP

Password Reset — Predictable Token

OldMail's password reset uses a token that's just the user's ID + the current timestamp, base64-encoded. Reset the admin's password by guessing the token.

INTERMEDIATE Start Lab →
🛡 AUTH +130 XP

JWT — Algorithm Confusion (RS256 → HS256)

AuthBox issues JWTs signed with RS256 (asymmetric — private key signs, public key verifies). The verifier blindly trusts the alg header. Forge an HS256 token using the public key as the HMAC secret — the verifier will accept it.

ADVANCED Start Lab →

🛡 INJECTION · 6 labs

🛡 INJECTION +90 XP

Command Injection — Network Ping Tool

NetTools' diagnostic page lets users ping a host. The backend builds the ping command by concatenating the host name straight into a shell. Read the contents of /flag.

INTERMEDIATE Start Lab →
🛡 INJECTION +90 XP

LDAP Injection — Filter Manipulation

DirectoryBox authenticates via LDAP — the username and password are concatenated into an LDAP filter. Inject LDAP filter syntax to bypass authentication.

INTERMEDIATE Start Lab →
🛡 INJECTION +90 XP

NoSQL Injection — MongoDB Operator Bypass

MongoLogin accepts JSON authentication. The backend builds a MongoDB query directly from the request body. Inject MongoDB operators to bypass authentication and log in as admin without knowing the password.

INTERMEDIATE Start Lab →
🛡 INJECTION +80 XP

XPath Injection — Login Bypass

XmlAuth stores users in an XML doc and authenticates by building XPath queries from form input. Inject XPath syntax to bypass authentication and log in as admin.

INTERMEDIATE Start Lab →
🛡 INJECTION +100 XP

XXE — External Entity File Read

DocParse accepts XML uploads and parses them with external entities enabled. Inject an external entity reference that reads /etc/passwd from the server's filesystem.

INTERMEDIATE Start Lab →
🛡 INJECTION +110 XP

Server-Side Template Injection — Email Preview

MarketingHub's email preview lets you write a template with {{name}} and {{company}} placeholders. The template engine accepts arbitrary expressions, not just variable names. Read the secret config value.

ADVANCED Start Lab →

🛡 LOGIC · 1 lab

🛡 SQLI · 1 lab

🛡 SSRF · 2 labs

🛡 SSTI · 1 lab

🛡 WEB · 7 labs

🛡 WEB +90 XP

CORS Misconfiguration — Origin Reflection

BankAPI's CORS handler reflects the Origin header into Access-Control-Allow-Origin AND sends Access-Control-Allow-Credentials: true. That's the worst possible CORS combination — an attacker site can read authenticated API responses. Steal the user's account data.

INTERMEDIATE Start Lab →
🛡 WEB +90 XP

CRLF Injection — HTTP Response Splitting

RedirectorApp builds a Location header from the user-supplied URL parameter. The value is concatenated into the header without sanitization. Inject CRLF (\r\n) sequences to insert a malicious header that sets a session cookie.

INTERMEDIATE Start Lab →
🛡 WEB +90 XP

CSRF — Money Transfer (No Anti-CSRF Token)

QuickBank's transfer form has no CSRF protection. An attacker site can auto-submit a transfer using the victim's logged-in session. Trigger an unauthorised transfer via the attacker page.

INTERMEDIATE Start Lab →
🛡 WEB +90 XP

GraphQL — Introspection Reveals Hidden Fields

GraphqlAPI exposes a single /graphql endpoint with introspection enabled. Use introspection to discover an undocumented query field that returns admin secrets, then call it.

INTERMEDIATE Start Lab →
🛡 WEB +90 XP

Prototype Pollution — User Settings

ProfileApp lets you save settings as JSON. The merge function copies properties from your input straight into the user object — without checking for special property names. Become an admin without changing your role.

INTERMEDIATE Start Lab →
🛡 WEB +110 XP

GraphQL — Batched Query Authentication Bypass

GraphqlAPI rate-limits the login mutation to 5 requests per minute. But the rate limit applies per-request, not per-operation. Send batched queries (multiple mutations in one POST) to brute-force passwords past the limit.

ADVANCED Start Lab →
🛡 WEB +110 XP

Web Cache Poisoning — Unkeyed Header

CacheServ caches responses by URL. The application reflects the X-Forwarded-Host header into HTML. The cache key includes the URL but NOT that header. Poison the cache so other users get your malicious content.

ADVANCED Start Lab →

🛡 XSS · 5 labs