Overview: PortSwigger Progress
Live tracker for my pass through the PortSwigger Web Security Academy — current status and links to writeups as they land.
Live tracker for my pass through the PortSwigger Web Security Academy. Topic ordering follows PortSwigger’s own all topics recommendation, and the reasoning behind that choice is in Episode #2.
This page updates as I go. Each topic gets a single write-up, linked in the row directly beneath its table once it’s ready.
Legend
| Symbol | Meaning |
|---|---|
| ✅ | Pwned |
| ⬜ | Not started |
Overall progress
| Difficulty | Labs | Done | % |
|---|---|---|---|
| Apprentice | 36 | 2 | 6% |
| Practitioner | 97 | 12 | 12% |
| Expert | 19 | 0 | 0% |
| Total | 152 | 14 | 9% |
All topics
If you’re new to web security it’s hard to know where to begin, so I’ve grouped every topic into three tracks — server-side, client-side, and advanced — and work through them in that order, completing the labs as I go. The grouping and ordering follow PortSwigger’s own all topics page. For more guided support, their learning paths are a good companion.
Server-side topics
For complete beginners, the server-side topics are the place to start. These vulnerabilities are typically easier to learn because you only need to understand what’s happening on the server — and they build the core knowledge and skills that everything else relies on.
1. SQL Injection — 14 / 18
2. XXE Injection — 0 / 9
3. SSRF — 0 / 7
4. OS Command Injection — 0 / 5
5. Path Traversal — 0 / 6
6. Access Control — 0 / 13
7. Authentication — 0 / 14
8. Information Disclosure — 0 / 5
| Lab | Status |
|---|---|
| Write-up will be posted here once available. | |
| Information disclosure in error messages | ⬜ |
| Information disclosure on debug page | ⬜ |
| Source code disclosure via backup files | ⬜ |
| Authentication bypass via information disclosure | ⬜ |
| Information disclosure in version control history | ⬜ |
9. Business Logic — 0 / 12
10. File Upload Vulnerabilities — 0 / 7
11. Race Conditions — 0 / 6
| Lab | Status |
|---|---|
| Write-up will be posted here once available. | |
| Limit overrun race conditions | ⬜ |
| Bypassing rate limits via race conditions | ⬜ |
| Multi-endpoint race conditions | ⬜ |
| Single-endpoint race conditions | ⬜ |
| Exploiting time-sensitive vulnerabilities | ⬜ |
| Partial construction race conditions | ⬜ |
12. NoSQL Injection — 0 / 4
| Lab | Status |
|---|---|
| Write-up will be posted here once available. | |
| Detecting NoSQL injection | ⬜ |
| Exploiting NoSQL operator injection to bypass authentication | ⬜ |
| Exploiting NoSQL injection to extract data | ⬜ |
| Exploiting NoSQL operator injection to extract unknown fields | ⬜ |
13. API Testing — 0 / 5
14. Web Cache Deception — 0 / 5
Client-side topics
Client-side vulnerabilities add an extra layer of complexity. These build on the server-side skills above and get into identifying and exploiting some gnarly client-side vectors.
15. Cross-Site Scripting (XSS) — 0 / 30
16. CSRF — 0 / 12
17. Clickjacking — 0 / 5
| Lab | Status |
|---|---|
| Write-up will be posted here once available. | |
| Basic clickjacking with CSRF token protection | ⬜ |
| Clickjacking with form input data prefilled from a URL parameter | ⬜ |
| Clickjacking with a frame buster script | ⬜ |
| Exploiting clickjacking vulnerability to trigger DOM-based XSS | ⬜ |
| Multistep clickjacking | ⬜ |
18. DOM-based Vulnerabilities — 0 / 7
19. CORS — 0 / 3
| Lab | Status |
|---|---|
| Write-up will be posted here once available. | |
| CORS vulnerability with basic origin reflection | ⬜ |
| CORS vulnerability with trusted null origin | ⬜ |
| CORS vulnerability with trusted insecure protocols | ⬜ |
20. WebSockets — 0 / 3
| Lab | Status |
|---|---|
| Write-up will be posted here once available. | |
| Manipulating WebSocket messages to exploit vulnerabilities | ⬜ |
| Cross-site WebSocket hijacking | ⬜ |
| Manipulating the WebSocket handshake to exploit vulnerabilities | ⬜ |
Advanced topics
These topics aren’t necessarily harder to master, but they generally require deeper understanding and a wider breadth of knowledge. Best tackled once the basics are solid — some are based on pioneering techniques from PortSwigger’s research team.
21. HTTP Request Smuggling — 0 / 22
22. Server-Side Template Injection — 0 / 7
23. Web Cache Poisoning — 0 / 13
24. Insecure Deserialization — 0 / 10
25. HTTP Host Header Attacks — 0 / 7
26. OAuth Authentication — 0 / 6
27. JWT Attacks — 0 / 8
28. Essential Skills — 0 / 2
| Lab | Status |
|---|---|
| Write-up will be posted here once available. | |
| Discovering vulnerabilities quickly with targeted scanning | ⬜ |
| Scanning non-standard data structures | ⬜ |
29. Prototype Pollution — 0 / 10
30. GraphQL API Vulnerabilities — 0 / 5
| Lab | Status |
|---|---|
| Write-up will be posted here once available. | |
| Accessing private GraphQL posts | ⬜ |
| Accidental exposure of private GraphQL fields | ⬜ |
| Finding a hidden GraphQL endpoint | ⬜ |
| Bypassing GraphQL brute force protections | ⬜ |
| Performing CSRF exploits over GraphQL | ⬜ |
31. Web LLM Attacks — 0 / 8
Last updated: 2026-04-20. Topic grouping and ordering follow PortSwigger’s all topics page.