The next step after the OSWA, from black box to white box.
Press enter or click to view image in full size
I’ve always admired the way experienced web pentesters can take a handful of obscure web app vulnerabilities and chain them all the way into remote code execution. My day to day work in malware analysis keeps me pretty far from that world. But looking at the research output of remarkable titans like Orange Tsai, James Kettle or Gareth Heyes always made me wonder if there was a way to better understand these more complex web vulnerabilities and move myself even a millimeter closer to where they stand.
This is me, basically:
Press enter or click to view image in full size
That curiosity is what eventually led me to embark on studying the OffSec Advanced Web Attacks and Exploitation (AWAE) and pursuing the OSWE certification.
I had some prior experience building full-fledged web applications using backend frameworks like Django, Flask, and Spring. That experience served me well when I went through the OSWA coursework and I thought I “knew things”. However, OSWE coursework was a different beast altogether. The complexity ramped up significantly, and it constantly made me reassess if I’ve truly understood something that I thought I was familiar with.
Press enter or click to view image in full size
I would not say having that kind of prior dev experience is strictly necessary to get started on the OSWE journey. As an example of this, check out Jael Koh’s informative writeup on his journey through OSWE and eventually OSCE3.
A particular nitpick I had about the materials is that during the analysis of web case studies, there were some rare occasions where we would be finding vulnerability A then immediately going on to finding vulnerability B without always going into details of what typically happens in between.
Press enter or click to view image in full size
Now, in retrospect, there is certain value in this. Having to self-bridge that gap does, to some extent, force you to find and hone your own methodology. That skill pays dividends later. But in the moment, it can be genuinely stress-inducing.
You sit there wondering: “is it normal for someone to struggle this much to get from A to B?”
What I can suggest here is to get practical experience building and deploying small web app projects in the common languages you’ll encounter: PHP, Python, Java, C#. Once you’ve experienced the full workflow of setting up a project with a framework, defining routes, working with MVC patterns, and implementing basic authentication, those jumps from A to B in the course material become way more comprehensible. You begin to identify patterns in how a certain way of implementing a mechanism can potentially lead to something vulnerable, because you’ve seen how these apps are built from the as a developer.
With these minor nits aside, I remain a big fan of what I learned from OffSec here. It felt like a logical next step from OSWA, with much more advanced vulnerability classes on the table. The depth and difficulty were exactly what I was looking for.
Join Medium for free to get updates from this writer.
Throughout the journey, I leaned on free resources to supplement the course material. PortSwigger Academy was great for getting a second perspective on specific vulnerability types, and Programming with Mosh’s youtube videos helped me when I needed more targeted, visual information on particular programming languages or web frameworks.
There’s just tons of other free resources out there, some crafted by those who have walked this OSWE journey before.
When working on the labs, extra miles, and challenge machines, it is absolutely essential to start experimenting with scripting exploits on your own. The exam requires you to submit scripts that essentially compromise a target web application without any manual interaction, so you need to be comfortable writing full exploit scripts.
Rather than watching video walkthroughs or merely copy pasting snippets from the course or from online resources, I would say that actually typing the code out yourself, running into errors and solving them, makes a real difference for retention. When you’re sitting in the exam staring at a barebones script, you would not want to be bashing your head against the wall on syntax issues.
Press enter or click to view image in full size
Also, kick the itch to use LLMs when debugging your scripts. They will not be an available crutch during the exam. Force yourself back to the docs, or Stack Overflow. Get comfortable (again) finding answers by searching for them manually.
And importantly, after you’ve finished crafting your practice scripts, take the time to properly organize them in your folders and document them in detail. You’ll want to be able to reference your own work quickly during the exam, and sifting through a messy pile of poorly named scripts is not going to be a good experience.