Overview: PortSwigger Progress

Live tracker for my pass through the PortSwigger Web Security Academy — current status and links to writeups as they land.

Overview: PortSwigger Progress

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

SymbolMeaning
Pwned
Not started

Overall progress

DifficultyLabsDone%
Apprentice3626%
Practitioner971212%
Expert1900%
Total152149%

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

9. Business Logic — 0 / 12

10. File Upload Vulnerabilities — 0 / 7

11. Race Conditions — 0 / 6

12. NoSQL Injection — 0 / 4

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

LabStatus
Write-up will be posted here once available.
Reflected XSS into HTML context with nothing encoded
Stored XSS into HTML context with nothing encoded
DOM XSS in document.write sink using source location.search
DOM XSS in innerHTML sink using source location.search
DOM XSS in jQuery anchor href attribute sink using location.search source
DOM XSS in jQuery selector sink using a hashchange event
Reflected XSS into attribute with angle brackets HTML-encoded
Stored XSS into anchor href attribute with double quotes HTML-encoded
Reflected XSS into a JavaScript string with angle brackets HTML encoded
DOM XSS in document.write sink using source location.search inside a select element
DOM XSS in AngularJS expression with angle brackets and double quotes HTML-encoded
Reflected DOM XSS
Stored DOM XSS
Reflected XSS into HTML context with most tags and attributes blocked
Reflected XSS into HTML context with all tags blocked except custom ones
Reflected XSS with some SVG markup allowed
Reflected XSS in canonical link tag
Reflected XSS into a JavaScript string with single quote and backslash escaped
Reflected XSS into a JavaScript string with angle brackets and double quotes HTML-encoded and single quotes escaped
Stored XSS into onclick event with angle brackets and double quotes HTML-encoded and single quotes and backslash escaped
Reflected XSS into a template literal with angle brackets, single, double quotes, backslash and backticks Unicode-escaped
Exploiting cross-site scripting to steal cookies
Exploiting cross-site scripting to capture passwords
Exploiting XSS to bypass CSRF defenses
Reflected XSS with AngularJS sandbox escape without strings
Reflected XSS with AngularJS sandbox escape and CSP
Reflected XSS with event handlers and href attributes blocked
Reflected XSS in a JavaScript URL with some characters blocked
Reflected XSS protected by very strict CSP, with dangling markup attack
Reflected XSS protected by CSP, with CSP bypass

16. CSRF — 0 / 12

17. Clickjacking — 0 / 5

18. DOM-based Vulnerabilities — 0 / 7

19. CORS — 0 / 3

20. WebSockets — 0 / 3

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

29. Prototype Pollution — 0 / 10

30. GraphQL API Vulnerabilities — 0 / 5

31. Web LLM Attacks — 0 / 8


Last updated: 2026-04-20. Topic grouping and ordering follow PortSwigger’s all topics page.

This post is licensed under CC BY 4.0 by the author.