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.