Skip to content
All modules
CoreModule 10 of 2790 minutes

Web recon and attack surface

Find the endpoint the challenge is really about: unlinked paths, JavaScript-only routes, exposed .git, and the parameters nobody documented.

Assumes4. Reconnaissance and OSINT

By the end you can

  • Map an application's routes from its own JavaScript before running any wordlist
  • Choose a content-discovery wordlist from the stack rather than by size
  • Recover a source tree from an exposed .git directory, including deleted and dangling objects
  • Read response headers and error pages for the framework, and use that to narrow every later probe
  • State the authorisation boundary you are testing inside, in one sentence, before you send a request

1. Read

2. Use the tools

In the order they come up while solving. Read what each one does, or go straight to the workspace tab that runs it.

3. Try one now

Generated in your browser and checked in your browser. No account, nothing to download, and a fresh one whenever you want another.

4. Practise on the real thing

Real picoCTF challenges that use these techniques, easiest first. 46 match in total - see the full index.

Common mistakes

The wrong turns this topic reliably produces. Written as the mistake rather than the rule, because the rule is easy to agree with and easy to walk straight past.

  • Brute-forcing paths before reading the client. The bundle usually names the routes, and a route named in the source is worth a thousand wordlist entries.
  • Reading 404 as 'not there'. Custom error pages return 200, and soft-404 detection has to be calibrated against a path you know is absent.
  • Dumping .git and reading only the checked-out tree. The interesting commit is normally the one that removed the secret.
  • Running a wordlist built for another stack. A Java application has no .php endpoints, so a scan that finds nothing has answered a question about a different server rather than about this one.
  • Reading only the routes the bundle actually calls. Route tables, feature flags and API base paths sit in the same JavaScript, and the endpoint a challenge is built around is usually the one the client never requests.

Checkpoint

From a target application, produce a list of routes with the evidence for each - source reference, header, or wordlist hit - and mark which of them are reachable without authentication.

Teaching note

This is the first module with real-world legal weight. Cover authorisation explicitly before the tools: the same techniques against a system nobody gave you permission to test are a criminal offence, not a lesson. Say it before the first scanner runs, not after.

Go deeper

The lessons above are written to get you through a challenge. These go after the subject instead. Each one opens our notes on that chapter - what it argues, what to take from it and where it stops - so this is somewhere to read now rather than a book to buy first. Nothing here is affiliate-linked or sold by us.

Every book the curriculum cites has a page in the library.