← Back

HACKDLE — ALL CHALLENGES

76 puzzles

Each puzzle has five progressive hints — the first is intentionally vague, the last nearly gives it away. Spoilers ahead.

Web35 challenges

Account Takeover via Password Reset

WebAuth BypassMedium
clue 1

You request a password reset for a target account.

clue 2

The reset token appears in a `Referer` header sent to a third-party resource on the page.

clue 3

Using the leaked token lets you set a new password without knowing the original.

clue 4

The token is also short enough to brute-force directly.

clue 5

Reset flow flaws include predictable tokens, non-expiring links, host header poisoning, and Referer leakage. A perennial top bug bounty class.

Clickjacking

WebMisconfigurationLow
clue 1

You're asked to click a button on a page that looks mostly blank.

clue 2

Clicking the button performs an action on a completely different site.

clue 3

An invisible element positioned over the button captured the click.

clue 4

A transparent iframe loaded the target site beneath the visible decoy.

clue 5

A transparent iframe overlays an attacker's UI over a legitimate page. Clicks are delivered to the iframe. Prevented by `X-Frame-Options: DENY` or `frame-ancestors 'none'` in CSP.

Command Injection

WebInjectionLow
clue 1

The app has a ping tool that tests connectivity to a hostname you provide.

clue 2

The server runs the command and returns the output.

clue 3

Adding a semicolon after the hostname causes a second command to run.

clue 4

Appending `; id` returns the server's current user identity in the response.

clue 5

User input is passed unsanitized to a shell function. Characters like `;`, `|`, `&&`, and `$()` chain additional commands.

CORS Misconfiguration

WebMisconfigurationLow
clue 1

An authenticated API returns data to requests from a different origin.

clue 2

The response includes your session data and user details.

clue 3

The server reflects any value from the `Origin` request header back as the allowed origin.

clue 4

An attacker's page silently reads authenticated responses using the victim's session.

clue 5

Reflecting arbitrary `Origin` values with `Access-Control-Allow-Credentials: true` lets any site read authenticated API responses.

CSRF

WebAuth BypassLow
clue 1

You're logged into a banking app.

clue 2

Visiting a different site triggers a transfer on your account.

clue 3

The request came from the attacker's page but carried your session cookie.

clue 4

The server accepted it because it relies entirely on cookies for authentication.

clue 5

Forged requests from an attacker's page execute actions on a site where the victim is authenticated. SameSite cookies and per-request tokens are the defenses.

DNS Rebinding

WebMiscLogicHigh
clue 1

You control a domain and its authoritative DNS resolver.

clue 2

A victim visits your page and the JavaScript runs in their browser.

clue 3

You update the domain's DNS to resolve to `127.0.0.1` with a very short TTL.

clue 4

A second fetch from the same origin now hits `localhost` on the victim's machine.

clue 5

Attacker-controlled DNS re-resolves to an internal address after the initial visit. The Same-Origin Policy is satisfied because the hostname never changes. Targets local dev servers and routers.

DOM XSS

WebLogicMedium
clue 1

The page changes its content based on what's in the URL fragment.

clue 2

No network request is made when the content updates.

clue 3

JavaScript reads from `location.hash` and writes the value into the page.

clue 4

A payload in the fragment executes without ever reaching the server.

clue 5

Client-side JavaScript reads a URL source and writes it to a dangerous sink like `innerHTML` or `eval`. The payload never touches the server. Taint tracking tools map source-to-sink flow.

GraphQL Injection

WebInjectionMedium
clue 1

The app exposes a `/graphql` endpoint.

clue 2

An introspection query returns the full schema including all types and fields.

clue 3

Fields that appear access-controlled are returned without authentication.

clue 4

A deeply nested query causes exponential backend work with no rate limiting.

clue 5

Introspection reveals the entire API schema. Field-level authorization is often absent. Depth and complexity limits prevent query abuse. Clairvoyance maps schemas when introspection is disabled.

Host Header Injection

WebLogicLow
clue 1

You request a password reset for a target account.

clue 2

The reset email arrives with a link pointing to a domain you control.

clue 3

The app used the HTTP `Host` header to construct the reset link URL.

clue 4

Changing the `Host` header causes reset tokens to be delivered to an attacker-controlled server.

clue 5

The `Host` header constructs URLs server-side without validation. An attacker-controlled value redirects reset tokens. `X-Forwarded-Host` is an alternative vector.

HTTP Request Smuggling

WebLogicHigh
clue 1

The application sits behind a reverse proxy.

clue 2

A crafted request causes another user to receive your content.

clue 3

The frontend and backend interpret HTTP message boundaries differently.

clue 4

Conflicting `Content-Length` and `Transfer-Encoding` headers cause leftover bytes to be read as a new request.

clue 5

Differing HTTP parsing between a proxy and backend desynchronizes request streams. CL.TE and TE.CL are the main variants. Discovered by James Kettle at DEF CON 27.

IDOR

WebAuth BypassLow
clue 1

Your profile page URL contains your numeric user ID.

clue 2

Changing the ID to another value returns a different user's profile.

clue 3

No error is returned, and private data is included in the response.

clue 4

The server never checks whether the authenticated user owns the requested resource.

clue 5

Object references in URLs or API parameters are not validated against the authenticated user. Incrementing an ID returns any user's data.

Insecure Deserialization

WebInjectionHigh
clue 1

A cookie contains a base64-encoded serialized object.

clue 2

Modifying the object causes unexpected server-side behavior when processed.

clue 3

The server reconstructs a full object from the client-supplied data.

clue 4

The deserialization process triggers a code execution gadget as a side effect.

clue 5

Untrusted serialized data is deserialized server-side. ysoserial generates Java gadget chains. PHP exploits `__wakeup` and `__destruct`. Python's `pickle.loads()` executes arbitrary code.

Integer Overflow

PwnWebMemory CorruptionMedium
clue 1

The program accepts a size value before allocating a buffer.

clue 2

Supplying a very large size results in an unexpectedly small allocation.

clue 3

Fixed-width integer arithmetic wraps silently past its maximum value.

clue 4

A bounds check passes on the wrapped value, and the subsequent write overflows the undersized buffer.

clue 5

`INT_MAX + 1` wraps to `INT_MIN` in C. A tiny allocation is overflowed with the full intended write, corrupting adjacent memory.

JWT Attack

WebAuth BypassMedium
clue 1

Authentication returns a token after login.

clue 2

Modifying a claim in the token and resubmitting it is still accepted.

clue 3

The token is three dot-separated base64 segments.

clue 4

Changing the `alg` field to `none` removes the signature requirement entirely.

clue 5

JWT signature verification has a flaw: `alg: none` bypass, RS256-to-HS256 confusion, or a weak HMAC secret cracked offline. Tool: jwt_tool.

LDAP Injection

WebInjectionMedium
clue 1

There's a user-search form connected to Active Directory.

clue 2

Submitting `*` as the username returns all directory entries.

clue 3

The input is embedded in an LDAP filter string without sanitization.

clue 4

A closing parenthesis breaks out of the filter and injects an always-true condition.

clue 5

User input is concatenated into an LDAP filter. Special characters modify the filter logic, enabling authentication bypass and full directory enumeration.

Local File Inclusion

WebMisconfigurationLow
clue 1

A `?page=` parameter controls which content loads.

clue 2

Modifying the parameter causes different server-side files to be included.

clue 3

The parameter can reference files from the server's own filesystem.

clue 4

Injecting a PHP payload into the server log and then including the log file achieves code execution.

clue 5

A PHP `include()` call uses user-controlled input as the file path. Any readable file can be returned. Log poisoning turns this into remote code execution.

Mass Assignment

WebLogicLow
clue 1

User registration happens via a JSON API endpoint.

clue 2

Adding an extra field to the request body is accepted without error.

clue 3

The extra field sets a privileged attribute like `isAdmin` on the new account.

clue 4

The framework bound the entire request body to the model without an allowlist.

clue 5

Frameworks that auto-map request parameters to model attributes allow setting privileged fields. Prevented by explicit allowlists in strong parameter filtering.

NoSQL Injection

WebInjectionLow
clue 1

There's a login form backed by MongoDB.

clue 2

Submitting a specially formatted value bypasses the password check.

clue 3

The database understands query operators embedded in the input.

clue 4

Passing `{"$gt": ""}` as the password field matches every document in the collection.

clue 5

User input is passed directly to a NoSQL query, allowing operator injection. MongoDB's `$gt`, `$where`, and `$regex` are common vectors. NoSQLMap automates exploitation.

OAuth Misconfiguration

WebAuth BypassMedium
clue 1

The site implements 'Login with Google'.

clue 2

The authorization code is delivered to an unexpected destination.

clue 3

A `redirect_uri` parameter specifies where to send the credential after authorization.

clue 4

Changing `redirect_uri` to an attacker-controlled host sends the code there instead.

clue 5

An unvalidated `redirect_uri` lets an attacker receive the authorization code. Open redirectors on the registered domain are a common bypass.

Open Redirect

WebMisconfigurationLow
clue 1

A logout link on a trusted site redirects you somewhere unexpected.

clue 2

The destination is controlled by a `?next=` query parameter.

clue 3

Changing the parameter redirects the browser to an external domain.

clue 4

The trusted domain appears briefly in the URL bar before landing on an attacker-controlled page.

clue 5

An unvalidated redirect parameter constructs the destination URL. Commonly chained with phishing and OAuth token theft.

Path Traversal

WebMisconfigurationLow
clue 1

The app lets you download files via a `?file=` parameter.

clue 2

Changing the filename returns a different file.

clue 3

Adding `../` sequences navigates outside the intended directory.

clue 4

Requesting `../../../../etc/passwd` returns the system password file.

clue 5

User-controlled input constructs a file path without validation. Dot-dot sequences escape the intended directory. URL encoding bypasses naive filters.

Prototype Pollution

WebInjectionHigh
clue 1

You're fuzzing a JSON API that performs a deep merge operation.

clue 2

A deeply nested key causes unexpected properties to appear on unrelated objects.

clue 3

Setting `__proto__[isAdmin]` to `true` grants admin access across the application.

clue 4

A recursive merge function copies the prototype chain key into `Object.prototype`.

clue 5

User-controlled keys pollute `Object.prototype`, affecting every object in the runtime. Common in lodash deep merge. Can escalate to RCE in Node.js.

Race Condition

PwnWebLogicHigh
clue 1

A transfer endpoint lets you send funds between accounts.

clue 2

Sending many concurrent requests causes the balance to go negative.

clue 3

The balance check and the deduction are not performed atomically.

clue 4

Multiple requests pass the check simultaneously before any deduction is recorded.

clue 5

Time-of-check to time-of-use gap in concurrent request handling. Turbo Intruder removes network jitter. The single-packet attack synchronizes HTTP/2 requests.

Reflected XSS

WebInjectionLow
clue 1

You receive a link to a page with a search field.

clue 2

Your search term appears verbatim in the page that loads.

clue 3

The term is echoed into the HTML response without escaping.

clue 4

A `<script>` tag in the query parameter executes when the link is visited.

clue 5

User input is reflected into the HTML response without sanitization. The payload executes in any browser that visits the crafted URL. Burp Scanner detects these automatically.

Remote File Inclusion

WebMisconfigurationMedium
clue 1

A `?page=` parameter controls which content loads.

clue 2

The parameter accepts an external URL, not just a local filename.

clue 3

The server fetches and executes whatever is hosted at the address you supply.

clue 4

Hosting a web shell on your own server and referencing it in the parameter gives remote code execution.

clue 5

PHP fetches and executes remote files when `allow_url_include` is enabled. The attacker hosts a shell on external infrastructure.

SAML Bypass

WebAuth BypassHigh
clue 1

A site uses SAML-based SSO for authentication.

clue 2

Modifying the identity claim in the assertion is still accepted as validly signed.

clue 3

The signature covers only part of the XML document.

clue 4

Moving the signed element in the XML causes the parser to read the unsigned value as the identity.

clue 5

XML Signature Wrapping repositions the signed element so the signature validates but the parsed identity is attacker-controlled. Tool: SAMLRaider.

SQL Injection

WebInjectionLow
clue 1

There's a search form on the page.

clue 2

Submitting a single quote causes a database error.

clue 3

The error message references the query engine and shows the malformed syntax.

clue 4

Appending `' OR '1'='1'--` returns every record in the table.

clue 5

Input is concatenated directly into a SQL query. The database executes it, exposing any data the account can reach. `sqlmap` automates full enumeration.

SSRF

WebMisconfigurationMedium
clue 1

The app has a PDF export feature.

clue 2

The URL field in the export request is user-controlled.

clue 3

Supplying an internal address returns a response from inside the network.

clue 4

Requesting `http://169.254.169.254/latest/meta-data/` returns live cloud credentials.

clue 5

The server fetches attacker-controlled URLs, exposing internal services and cloud metadata. IMDSv2 and strict egress filtering are the mitigations.

SSTI

WebInjectionMedium
clue 1

A greeting page reflects your name back into the response.

clue 2

Submitting `{{7*7}}` returns `49` instead of the literal text.

clue 3

The server is evaluating your input as a template expression.

clue 4

Traversing `__class__.__mro__` through the template context reaches `os.popen()`.

clue 5

User input is rendered inside a server-side template rather than passed as a variable. The template engine executes it. RCE is typically achievable in Jinja2, Twig, and Freemarker.

Stored XSS

WebInjectionLow
clue 1

There's a comment section where other users' posts appear.

clue 2

Text you submit shows up on the page rendered by other visitors' browsers.

clue 3

An HTML tag you submit renders as markup, not as escaped text.

clue 4

A `<script>` tag in the comment field executes in every visitor's browser.

clue 5

Unescaped user input is stored and rendered as HTML. Every subsequent visitor executes the injected script. BeEF maintains persistent control over hooked browsers.

Subdomain Takeover

WebMisconfigurationMedium
clue 1

A company subdomain returns a 'repository not found' error from GitHub Pages.

clue 2

The DNS record still points to GitHub Pages, but the repository no longer exists.

clue 3

The platform allows anyone to create a repository matching that name.

clue 4

Creating the repository gives you full control over what the subdomain serves.

clue 5

A dangling CNAME to a deprovisioned external service can be claimed by anyone. The attacker registers the resource and now controls the subdomain. Tool: subjack.

Web Cache Poisoning

WebLogicHigh
clue 1

A CDN sits in front of the application.

clue 2

A crafted request causes all subsequent visitors to receive a malicious response.

clue 3

Your input influenced the response but was not part of the cache key.

clue 4

An unkeyed header like `X-Forwarded-Host` is reflected into the cached response.

clue 5

Cache keys omit headers that still affect the response. Poisoning a cached entry delivers the payload to every subsequent visitor. Param Miner finds unkeyed inputs.

WebSocket Hijacking

WebAuth BypassMedium
clue 1

A chat app uses WebSocket for real-time messaging.

clue 2

A page on a different origin can open a connection to the WebSocket endpoint.

clue 3

The handshake request includes the victim's session cookies automatically.

clue 4

The server authenticates the connection using cookies without validating the request origin.

clue 5

WebSocket handshakes include cookies but are not covered by the Same-Origin Policy. Without origin validation, any site can connect as the authenticated user and read messages.

XXE Injection

WebInjectionMedium
clue 1

The app accepts an XML file upload and returns processed output.

clue 2

The response includes content you didn't put in the file.

clue 3

The parser followed a reference declared in the file's document type definition.

clue 4

A custom entity pointing to `file:///etc/passwd` returns the file contents in the response.

clue 5

The XML parser processes external entity declarations and includes their contents in the output. Disabling DTD processing eliminates the attack surface.

Zip Slip

WebMiscLogicMedium
clue 1

The app accepts a zip archive and extracts it server-side.

clue 2

After extraction, a file appears outside the intended destination directory.

clue 3

An archive entry's filename contains `../` sequences.

clue 4

The extraction library writes the file to the path without validating the destination.

clue 5

Archive entries with path traversal in their names are extracted to arbitrary filesystem locations. Writing to web roots or cron directories achieves code execution.

Pwn17 challenges

Buffer Overflow

PwnMemory CorruptionMedium
clue 1

You're given a compiled binary that accepts input at a prompt.

clue 2

Supplying a long string causes the program to crash at an unexpected address.

clue 3

The crash address shifts predictably as you increase the input length.

clue 4

A cyclic pattern from pwntools identifies the exact offset where the return address is overwritten.

clue 5

Input exceeds a fixed-size stack buffer and overwrites the saved return address, redirecting execution. Mitigated by stack canaries, ASLR, and NX.

Double Free

PwnMemory CorruptionHigh
clue 1

The program calls `free()` on the same pointer in two different code paths.

clue 2

The second call corrupts the allocator's internal free list.

clue 3

Future allocations can be directed to attacker-controlled addresses.

clue 4

The glibc tcache key check must be bypassed to avoid an immediate crash on the second free.

clue 5

Freeing the same pointer twice corrupts tcache freelists. Bypassing the key check enables arbitrary allocation. House of Botcake is a modern technique. Detected by Valgrind.

Format String Attack

PwnMiscMemory CorruptionMedium
clue 1

The program prints your input back to the terminal.

clue 2

Entering `%x%x%x` causes it to print unexpected values from the stack.

clue 3

The input is passed directly as the format string argument to `printf`.

clue 4

`%n` writes the count of bytes printed to an arbitrary address on the stack.

clue 5

User input used as a printf format string leaks stack values via `%x` and writes to arbitrary addresses via `%n`. Pwntools' `fmtstr_payload()` automates exploitation.

Heap Overflow

PwnMemory CorruptionHigh
clue 1

The binary allocates a buffer on the heap and accepts user input into it.

clue 2

Crafted input causes a crash in dynamically allocated memory, not on the stack.

clue 3

Writing past the buffer's end corrupts an adjacent heap chunk's metadata.

clue 4

Corrupting the free list allows future allocations to be directed to attacker-controlled addresses.

clue 5

A heap-allocated buffer is written past its end. Corrupting allocator metadata enables arbitrary writes. Techniques include unsafe unlink and House of Force.

Heap Spray

PwnMemory CorruptionMedium
clue 1

An exploit for a heap corruption bug succeeds only intermittently.

clue 2

The target address is unpredictable due to heap randomization.

clue 3

Filling memory with many copies of the payload before triggering the bug improves reliability.

clue 4

The probability that a corrupted pointer lands on controlled data grows with the number of allocations.

clue 5

The heap is flooded with payloads before the vulnerability fires. A wild pointer reliably hits controlled memory. Classic in browser and PDF reader exploitation.

Meltdown

PwnInfo DisclosureHigh
clue 1

User-space code reads kernel memory without triggering a fault.

clue 2

Out-of-order execution performs the read before the access control check completes.

clue 3

The result is never committed, but it alters the cache in a measurable way.

clue 4

Cache timing recovers the kernel memory value that was transiently accessed.

clue 5

Out-of-order execution reads privileged memory before permission checks complete. The cache side-channel leaks the value. Fixed by KPTI. Primarily affects Intel CPUs.

Off-by-One Error

PwnMemory CorruptionHigh
clue 1

A loop in the binary writes exactly one byte past the end of a buffer.

clue 2

That byte overlaps with the low byte of an adjacent saved pointer.

clue 3

Controlling the value of that one byte redirects the pointer into attacker-controlled memory.

clue 4

Despite only a single byte of overwrite, heap layout manipulation enables full control flow hijacking.

clue 5

A fencepost error overwrites a single adjacent byte. The low byte of a frame pointer or chunk size field is often enough for full exploitation.

Privilege Escalation

PwnMiscAuth BypassMedium
clue 1

You have a low-privileged shell on a Linux system.

clue 2

A SUID binary runs commands with elevated permissions.

clue 3

The binary's behavior can be influenced by environment variables or a writable config.

clue 4

Exploiting the misconfiguration spawns a shell as root.

clue 5

Misconfigurations like SUID PATH hijacking, writable cron jobs, or weak sudo rules allow a low-privilege user to gain root. Tools: LinPEAS, WinPEAS.

ret2libc

PwnMemory CorruptionHigh
clue 1

A binary with NX enabled has a stack overflow.

clue 2

Injecting shellcode is blocked, but you can still overwrite the return address.

clue 3

A function that spawns a shell already exists in the linked C library.

clue 4

With ASLR enabled, a memory leak first reveals the library's base address.

clue 5

The return address is overwritten with the address of `system()` in libc, `/bin/sh` as the argument. In 64-bit, a gadget sets `rdi` first. Libc-database matches leaked offsets.

ROP (Return-Oriented Programming)

PwnMemory CorruptionHigh
clue 1

A binary with a non-executable stack has a stack overflow.

clue 2

Injecting shellcode is blocked, but you can still overwrite the return address.

clue 3

Short instruction sequences ending in `ret` already exist throughout the binary.

clue 4

Chaining those sequences via a crafted stack achieves arbitrary behavior without any injected code.

clue 5

Existing code snippets ending in `ret` are chained to build a full exploit. ROPgadget finds them. ret2plt leaks libc base; one_gadget finds a shell. Bypasses NX/DEP.

Rowhammer

PwnMemory CorruptionHigh
clue 1

An unprivileged process flips bits in memory it cannot directly access.

clue 2

The process never reads or writes the affected address.

clue 3

Rapidly accessing adjacent DRAM rows causes electrical interference in neighboring cells.

clue 4

The bit flips cross hardware isolation boundaries between processes.

clue 5

Rapid DRAM row access causes bit flips in adjacent rows with no software vulnerability required. Google Project Zero demonstrated privilege escalation in 2015. Mitigated by Target Row Refresh in newer DRAM.

Shellcode Injection

PwnMemory CorruptionHigh
clue 1

The binary accepts input and writes it into a buffer you can later trigger execution of.

clue 2

The memory region your input lands in is marked executable.

clue 3

No other exploit primitive is needed -- direct code injection is possible.

clue 4

Raw machine instructions in your input are executed by the processor.

clue 5

User-supplied bytes land in executable memory. Classic shellcode spawns `/bin/sh`. Null bytes and bad characters must be avoided. `msfvenom` generates payloads for various architectures.

Spectre

PwnMiscInfo DisclosureHigh
clue 1

A process reads memory belonging to another process without triggering a fault.

clue 2

The CPU speculatively executes a branch before the permission check completes.

clue 3

The speculative result is discarded, but it leaves a measurable trace in the cache.

clue 4

Timing the cache reveals the value that was accessed during speculation.

clue 5

Speculative execution leaves cache side-channel residue. Variants: bounds check bypass (v1), branch target injection (v2). Mitigated by retpoline and microcode updates.

Stack Overflow

PwnMemory CorruptionMedium
clue 1

The program crashes when given deeply nested or recursive input.

clue 2

Each recursive call consumes stack space without releasing it.

clue 3

The call stack is exhausted before the recursion can unwind.

clue 4

The crash is reliably reproducible at a fixed recursion depth.

clue 5

Unbounded recursion or oversized local arrays exhaust the fixed-size call stack. `ulimit -s` controls its size. Visualized with pwndbg's `stack` command.

TOCTOU

PwnMiscLogicHigh
clue 1

A privileged program checks a file's permissions before operating on it.

clue 2

A symbolic link is swapped in for the verified file before the operation executes.

clue 3

The program acts on the symlink's target instead of the originally checked file.

clue 4

The privileged process writes to a sensitive system path the attacker couldn't access directly.

clue 5

`access()` then `open()` on a user-controlled path leaves a window for symlink substitution. Mitigated by `O_NOFOLLOW`. Monitoring tool: `inotifywait`.

Type Confusion

PwnMemory CorruptionHigh
clue 1

A JIT-compiled runtime crashes on specially crafted input.

clue 2

An object is accessed using the wrong type interpretation.

clue 3

A field the attacker controls determines which type the engine assumes.

clue 4

The confusion grants an arbitrary read/write primitive into the engine's memory.

clue 5

A pointer to one type is treated as another, bypassing safety checks. Common in browser JIT CVEs in V8, SpiderMonkey, and JavaScriptCore. Often leads to full renderer RCE.

Use After Free

PwnMemory CorruptionHigh
clue 1

The program crashes only after a specific sequence of allocate, free, and access operations.

clue 2

A freed memory region is accessed again through a pointer that was never cleared.

clue 3

The freed region has been reallocated by a different object before the stale pointer dereferences it.

clue 4

Heap grooming places attacker-controlled content into the reallocated region.

clue 5

A dangling pointer reads or writes freed-then-reallocated heap memory. Critical in browser exploitation. Mitigated by MiraclePtr and memory-safe languages.

Crypto10 challenges

Bit-Flipping Attack

CryptoCryptoHigh
clue 1

You can submit modified ciphertext for decryption.

clue 2

Flipping a bit in one ciphertext block causes a predictable change in the next plaintext block.

clue 3

The encryption mode chains blocks so ciphertext modifications propagate into adjacent plaintext.

clue 4

Flipping the correct bit in the IV changes the first byte of plaintext block 1 to any target value.

clue 5

CBC ciphertext bit flips cause XOR-predictable changes in the next plaintext block. The IV controls block 1. Fixed by authenticated encryption like AES-GCM.

CBC IV Reuse

CryptoCryptoHigh
clue 1

An encryption oracle always uses the same IV.

clue 2

Two messages with an identical first block produce identical first ciphertext blocks.

clue 3

The relationship exposes whether two plaintext blocks are equal.

clue 4

`C1[0] XOR C2[0] = P1[0] XOR P2[0]` leaks plaintext relationships between messages.

clue 5

A fixed IV in AES-CBC creates a deterministic ciphertext for any given plaintext block. Identical IV plus identical plaintext block zero always produces identical ciphertext.

ECB Mode Attack

CryptoCryptoMedium
clue 1

You can encrypt chosen plaintext under a fixed key.

clue 2

Two encryptions of identical input produce identical ciphertext blocks.

clue 3

The ciphertext reveals structural patterns that mirror the plaintext.

clue 4

By aligning input at block boundaries, you recover unknown plaintext one byte at a time.

clue 5

ECB encrypts each 16-byte block independently with no chaining or randomness. Identical plaintext blocks produce identical ciphertext, enabling chosen-plaintext byte recovery.

Hash Collision Attack

CryptoCryptoHigh
clue 1

A file integrity check uses MD5 to verify an uploaded document.

clue 2

Two different files produce the same hash value.

clue 3

The hash function's collision resistance has been practically broken.

clue 4

Submitting the crafted second file passes the integrity check.

clue 5

`fastcoll` and `hashclash` produce MD5 collisions in seconds. SHAttered demonstrated the first SHA-1 collision in 2017. SHA-256 has no known practical collisions.

Length Extension Attack

CryptoCryptoHigh
clue 1

An API authenticates requests with `MD5(secret || message)`.

clue 2

Knowing the hash output and the length of the secret is enough to extend the message.

clue 3

The hash output exposes the internal state, letting you resume hashing from it.

clue 4

You can append arbitrary data and produce a valid MAC without knowing the secret.

clue 5

`H(secret || message)` is vulnerable to extension. Tool: `hashpump`. Fixed by HMAC or using SHA-3/BLAKE2, which don't use the Merkle-Damgard construction.

Nonce Reuse Attack

CryptoCryptoMedium
clue 1

Two messages were encrypted with the same key and nonce.

clue 2

XORing the two ciphertexts cancels the shared keystream.

clue 3

The result is the XOR of the two plaintexts.

clue 4

Known plaintext in one message allows recovering plaintext from the other.

clue 5

Reusing a nonce in AES-CTR or ChaCha20: `C1 XOR C2 = P1 XOR P2`. GCM nonce reuse also recovers the authentication key H.

Padding Oracle Attack

CryptoCryptoHigh
clue 1

The server decrypts a ciphertext you submit and returns different errors based on the result.

clue 2

One error indicates invalid padding; another indicates an authentication failure.

clue 3

Flipping bytes in the ciphertext and observing which error appears lets you recover plaintext one byte at a time.

clue 4

Each byte is isolated by manipulating ciphertext and checking padding validity.

clue 5

Distinct errors for 'bad padding' vs 'bad MAC' leak the padding check result. `padbuster` automates CBC+PKCS7 decryption. Fixed by using AES-GCM.

RSA Low Exponent Attack

CryptoCryptoHigh
clue 1

The same message was encrypted with `e=3` and sent to three different recipients.

clue 2

Collecting all three ciphertexts lets you apply the Chinese Remainder Theorem.

clue 3

The combined result gives `m^3` without wrapping around any modulus.

clue 4

Taking the integer cube root of the result recovers the original plaintext.

clue 5

Hastad's broadcast attack recovers plaintext from three low-exponent ciphertexts via CRT and integer root extraction. Always use OAEP padding.

Timing Attack

CryptoCryptoHigh
clue 1

An endpoint compares a token you supply against a stored secret.

clue 2

Responses arrive slightly faster when more characters of your guess are wrong.

clue 3

The comparison exits early at the first mismatch, leaking information through latency.

clue 4

Statistical analysis over many requests reveals the correct value one byte at a time.

clue 5

Non-constant-time string comparison leaks secrets through response latency. Fixed by `hmac.compare_digest()`. Also exploited against RSA operations in TLS implementations.

Weak RSA Primes

CryptoCryptoHigh
clue 1

You're given two RSA public key moduli.

clue 2

Taking their GCD returns a value greater than 1.

clue 3

The two moduli share a prime factor.

clue 4

Dividing each modulus by the shared factor immediately yields both private keys.

clue 5

Shared prime factors allow instant factorization of both keys. Also: Fermat factorization for close primes, Wiener's attack for small private exponents. Tools: RsaCtfTool, factordb.

Reversing3 challenges

Anti-Debugging Bypass

ReversingLogicHigh
clue 1

A binary behaves differently when launched under a debugger.

clue 2

The program detects the analysis environment and alters its execution path.

clue 3

Multiple detection methods are layered: API calls, timing checks, and exception handling.

clue 4

Each check must be located and patched or hooked before reaching the protected logic.

clue 5

`IsDebuggerPresent`, ptrace detection, and timing deltas are common methods. ScyllaHide bypasses most in x64dbg. Hardware breakpoints evade ptrace-based detection.

Code Deobfuscation

ReversingMiscInfo DisclosureHigh
clue 1

The binary's logic is intentionally difficult to follow.

clue 2

Meaningful operations are hidden behind renaming, encoding, and indirection.

clue 3

Static analysis reveals structure but not meaning.

clue 4

Dynamic tracing cuts through the obfuscation by showing the actual execution path.

clue 5

de4dot for .NET, Ghidra/IDA for binaries, jsnice for JavaScript. Dynamic tracing often bypasses static obfuscation entirely.

License Check Bypass

ReversingAuth BypassMedium
clue 1

A program requires a serial key to unlock its features.

clue 2

The validation logic is embedded in the binary itself.

clue 3

The check reduces to a single comparison instruction.

clue 4

Patching the conditional jump causes the check to always pass.

clue 5

Find the `cmp` instruction in the disassembly. Patch the conditional jump, or reverse the algorithm to generate valid keys.

Forensics3 challenges

Cold Boot Attack

MiscForensicsInfo DisclosureHigh
clue 1

A laptop with full-disk encryption is seized while powered off.

clue 2

DRAM retains data for seconds to minutes after power is removed.

clue 3

Cooling the chips with compressed air significantly extends the retention window.

clue 4

Transferring the chips to a controlled system allows reading the retained key material.

clue 5

DRAM remanence enables key recovery after power loss. Princeton researchers demonstrated extraction of BitLocker, FileVault, and dm-crypt keys in 2008. Mitigated by key scrubbing on suspend.

Memory Forensics

ForensicsInfo DisclosureHigh
clue 1

You're given a RAM dump from a compromised system.

clue 2

The dump contains running processes, decrypted secrets, and active network connections.

clue 3

The analysis framework must match the kernel version of the captured system.

clue 4

Plugins expose process lists, open sockets, and password hashes from the dump.

clue 5

Volatility analyzes RAM dumps. Key plugins: `pslist`, `hashdump`, `netscan`, `malfind`. Profile must match the exact kernel version of the captured system.

Steganography

ForensicsInfo DisclosureMedium
clue 1

You're given an image file that looks completely normal.

clue 2

The file size is slightly larger than expected for its dimensions.

clue 3

The low-order bits of the pixel values encode hidden data.

clue 4

Extracting and reassembling those bits reveals the hidden content.

clue 5

zsteg for PNG LSB, steghide for passphrases, stegsolve for bit-plane analysis, binwalk for appended data. Audio spectrograms can also reveal hidden content.

Misc8 challenges

ARP Spoofing

MiscMisconfigurationLow
clue 1

You're on the same LAN as the target.

clue 2

Sending unsolicited ARP replies updates the victim's ARP cache.

clue 3

The victim's traffic is now directed to your MAC address.

clue 4

You sit between the victim and the gateway, reading and modifying all traffic.

clue 5

Gratuitous ARP replies overwrite IP-to-MAC mappings. Tools: arpspoof, Bettercap. Prevented by Dynamic ARP Inspection on managed switches.

BGP Hijacking

MiscMisconfigurationHigh
clue 1

You control an autonomous system connected to the internet.

clue 2

You announce a more-specific prefix for an address block you don't own.

clue 3

Neighboring ASes prefer the more-specific route and update their tables.

clue 4

Traffic destined for the victim's address block routes through your AS.

clue 5

BGP has no built-in authentication. A rogue AS announces more-specific prefixes to attract victim traffic. RPKI provides route origin validation.

Man-in-the-Middle

MiscAuth BypassMedium
clue 1

You're on the same network as the target.

clue 2

You intercept and relay traffic between the client and server without either noticing.

clue 3

Even encrypted connections can be read when certificate validation is skipped.

clue 4

Your certificate is accepted because the client has a weak or compromised trust anchor.

clue 5

Network positioning via ARP spoofing or a rogue AP. mitmproxy and Bettercap intercept and modify traffic. Defeated by HSTS and certificate pinning.

Phishing

MiscAuth BypassLow
clue 1

A target receives an email that appears to come from their bank.

clue 2

The link leads to a page that looks identical to the real login form.

clue 3

The credentials entered are captured by the attacker.

clue 4

The attacker now has valid credentials for the legitimate site.

clue 5

A spoofed email delivers victims to a cloned login page. GoPhish automates campaigns; evilginx2 handles adversary-in-the-middle MFA bypass. SPF, DKIM, and DMARC reduce deliverability.

Spear Phishing

MiscAuth BypassMedium
clue 1

A specific employee receives a message referencing their current project by name.

clue 2

The message appears to come from a known colleague.

clue 3

OSINT gathered from LinkedIn and public sources supplied the targeting details.

clue 4

The personalization makes the message convincing enough to bypass skepticism.

clue 5

Targeted OSINT via LinkedIn and theHarvester informs a tailored message. Far more effective than generic campaigns. Commonly used for business email compromise or malware delivery.

SSL Stripping

MiscAuth BypassMedium
clue 1

You're in a MITM position between a client and an HTTPS server.

clue 2

The client connects to you over plaintext HTTP.

clue 3

You maintain an encrypted connection to the server and relay content transparently.

clue 4

The client has no indication that the connection should have been encrypted.

clue 5

MITM silently downgrades HTTPS to HTTP. The server sees a secure connection; the victim sees plaintext. Defeated by HSTS preloading. Demonstrated by Moxie Marlinspike at Black Hat 2009.

TCP SYN Flood

MiscLogicLow
clue 1

The target server becomes unreachable during the exercise.

clue 2

The server allocated state for each incoming SYN but no handshakes completed.

clue 3

The source addresses in the packets are forged, so no replies reach anyone.

clue 4

The half-open connection table fills up, blocking all legitimate connections.

clue 5

SYN packets without ACKs exhaust the connection state table. Mitigated by SYN cookies, which encode state into the sequence number. hping3 generates the flood.

Wi-Fi Deauthentication Attack

MiscMisconfigurationLow
clue 1

You're within radio range of the target Wi-Fi network.

clue 2

Sending a spoofed deauthentication frame disconnects all clients.

clue 3

The frame is accepted without verification because 802.11 management frames are unauthenticated.

clue 4

Clients reconnect automatically, exposing the WPA handshake for offline cracking.

clue 5

Spoofed 802.11 deauth frames from the AP's MAC force clients to reassociate. Capturing the handshake enables offline password cracking. Fixed by 802.11w management frame protection. Tool: aireplay-ng.