OSWE

The Offensive Security Web Expert (OSWE) certification is OffSec's advanced web application security course and exam. I took it about five years ago while transitioning from infrastructure security into application security, and it changed how I think about security work. Not in a "I learned some new tricks" way. In a "this restructured how I read code and find vulnerabilities" way.

Five years and several roles later, I still use the methodology from that course on a weekly basis.

The Skill Gap Nobody Talks About

There's a major divide in appsec between engineers who came from software engineering or CS backgrounds and those who didn't. If you've written production code, navigating a large codebase is intuitive. You understand MVC patterns, middleware, ORMs, dependency injection, because you've built with them. If you came from IT, networking, sysadmin, or infrastructure security, like I did, that foundational knowledge of how web applications are architected just isn't there.

I was coming from a vulnerability management and infrastructure security background when I took the course. I had never done a web application code review. My scripting experience was minimal. I had a clear goal: transition into an application security role at a tech company, and I needed a structured way to build the skills I didn't have. Not just theory, but the ability to actually sit in front of a codebase and find vulnerabilities.

You can know what SQL injection is, know how to exploit it in a lab, and still struggle to find it in a real codebase because you don't know where to look or how to trace data flow through layers of abstraction. OSWE directly addresses this gap. It forces you to learn how web applications are built by making you read real ones.

When I took the course, training resources for white-box web app security testing barely existed. What did exist was surface-level: "here's a 20-line PHP snippet, spot the SQLi." OSWE is the only training I've encountered that teaches source code review at the depth the job actually requires.

Real CVEs, Not Contrived Examples

A common take on OSWE is that the course uses older frameworks and languages, so it's not relevant. This misses the point. The course isn't teaching you to find bugs in specific frameworks. It's teaching you to read an unfamiliar codebase and identify vulnerability patterns based on how web frameworks work.

The course material is built around actual CVEs in real software, and this is what makes it work. Contrived "spot the vuln" exercises isolate the vulnerability in a small, obvious snippet. Real vulnerabilities live in large codebases where the dangerous sink is 15 function calls deep from the user input. OSWE forces you to trace data flow through realistic code: auth middleware, helper functions, ORMs, abstractions. You have to find where things break in the same kind of code you'll see on the job. That's a completely different skill than spotting a missing escape() call in a 10-line example.

Routing, middleware, ORM layers, template engines, serialization, authentication flows. These architectural patterns repeat across every modern framework. Once you understand how to trace user input through a Rails app to a dangerous sink, you can do the same in Django, Spring, Express, or whatever you encounter next. The specific CVEs in the course are vehicles for the methodology, not the point.

Vulnerability Chaining

Individual findings are often low or medium severity in isolation. OSWE emphasizes chaining: auth bypass into file upload into deserialization into RCE. This emulates real-world pentesting, where the critical finding is rarely a single bug. It's a sequence that compounds in severity.

Learning to think in chains rather than individual vulnerabilities changed how I approach engagements. You stop looking for the one critical bug and start looking for how three medium findings connect into something much worse.

The Scripting Requirement

The exam requires a working exploit script, not just a proof of concept screenshot. This forces you to deeply understand the vulnerability, because you can't script an exploit you don't fully comprehend.

Building reliable exploit scripts is a core skill for security engineers that doesn't get enough emphasis in other training. Handling edge cases in exploit code (session management, CSRF tokens, encoding, timing) teaches you the practical side that theoretical knowledge doesn't cover. The difference between "I found a SQL injection" and "here's a script that extracts the admin password in 30 seconds" is the difference between a finding and a proven impact.

This also directly translates to real vulnerability reporting. A good report has the simplest possible steps to reproduce. If you can hand someone a script that demonstrates the full impact in one run, the finding is undeniable and easy to triage. Writing exploit scripts for the exam builds the same muscle that makes your bug reports actionable on the job.

From Course to Interview to Job

When I started interviewing for appsec roles at tech companies, I noticed a consistent pattern in the interview formats. Code review rounds: given a codebase, find the vulnerabilities. Scripting rounds: write a working exploit or security tool. Technical deep dives: explain the mechanics of how a vulnerability works, how to identify it in code, how to exploit it, how to fix it.

These are the standard interview rounds for appsec and pentest roles, and OSWE covers all of them. This isn't a coincidence. The course mirrors what the job actually looks like, and interviews at good companies test for what the job actually looks like.

The daily work maps the same way. Reading source code to understand how an application works before testing it. Identifying auth and authz patterns and where they're inconsistently applied. Tracing user-controlled input to dangerous sinks across layers of abstraction. Writing tooling and automation to validate and exploit findings. The patterns you build from reviewing real CVEs in real codebases are the same patterns you apply every day on the job.

Building Calibration

One of the most valuable skills in pentesting is knowing how long to persist on something before moving on. Too early and you miss the finding that chains into a critical. Too long and you're rabbit-holing while the rest of the engagement slips by. You can't learn this from a book. It's an instinct built through volume.

OSWE builds it through sheer repetition. The course and extra mile exercises repeatedly put you in situations where your first instinct is "this isn't exploitable," and then you push through and find that it is. After enough of those reps, you develop a feel for when something is worth another two hours and when it's time to move on. That calibration has been more useful on the job than any individual technique the course teaches.

What It Won't Teach You

OSWE is entirely reactive: here's a codebase, find the bugs, exploit them. The job isn't only that. A significant part of application security is proactive: threat modeling, design reviews, helping engineers build things securely before vulnerabilities exist. The course doesn't touch this.

It also doesn't prepare you for the human side. Communicating risk to engineering teams, getting fixes prioritized, negotiating severity with stakeholders who don't want to delay a launch. These are skills that matter as much as the technical ones, and you'll only learn them on the job.

And the course material is scoped to single applications. In practice, you're often reviewing microservices architectures where the attack surface spans dozens of services, shared auth layers, and inter-service communication. Tracing data flow across a distributed system is a different challenge than tracing it through one monolith.

But going in with realistic expectations about what it covers and what it doesn't will help you plan the rest of your development.

Tips for the Course and Exam

If you're planning to take OSWE, here's what I'd recommend based on my experience:

Don't over-prepare before starting the course. Unlike OSCP, there isn't a lot of relevant training material or CTF boxes that overlap with the OSWE course content. I spent two months prepping beforehand, and in hindsight two weeks would have been better. I do recommend reviewing some talks on the advanced topics like deserialization and type juggling so your brain doesn't explode when you get to those modules, but beyond that, your time is better spent inside the course itself.

Do all the extra miles. These exercises push you past the point of comfort and into the territory where real learning happens. They're not optional in the way the name implies.

Do all the practice machines. After you've completed the course material and extra miles, the practice machines at the end are your best gauge of exam readiness. They are on par with the format and difficulty of the actual exam machines. Timebox yourself when completing them to simulate real exam conditions. If you can complete them within your time constraints, you're ready.

Language prep if you're starting from scratch. The course covers C#/.NET, Java, PHP, and JavaScript for source code review, and Python for exploit implementation. If you have foundational knowledge in one of those or experience with OOP, you won't need to deep dive into the others. Just brush up on the syntax differences, the logic translates between them. A simple intro course on Codecademy or W3Schools would be sufficient, or build a basic app using MVC. For the exploit development, get comfortable with Python's requests library and session objects.

Who Should Take It

Anyone doing or aspiring to do application security, pentesting, or security engineering at a senior level. OSCP is a prerequisite on paper, but more importantly you should be comfortable reading code in at least one language. It's not a beginner cert. You'll get more out of it if you have some real-world security experience to contextualize the material.

It's worth it even if you don't plan to do full-time pentesting. The code review skills transfer directly to threat modeling, design reviews, and security architecture.

Conclusion

Five years later, the tools and frameworks from the course are even older. It doesn't matter. I still use the same methodology every week: tracing data flow, reading unfamiliar code, chaining findings, building reliable exploits. The specific technologies change, but those fundamentals don't.