Origin Oorsprong Mindset Karakter Growth Groei Currently Nu Skills Skills Projects Projecten Vision Visie Contact Contact
Sem Vanderlinden
Available for internships Beschikbaar voor stages
Year 2 · Thomas More Geel · Cybersecurity

Sem
Vanderlinden

Cybersecurity Student · Future Red Team / Penetration Tester

Cybersecurity Student · Toekomstig Red Team / Penetration Tester

 

scroll
6
Real Projects
Echte Projecten
25+
Technologies
Technologieën
3
Languages Spoken
Gesproken Talen
1
Clear Target
Helder Doel
Origin Story
Oorsprong

How it all started

Hoe het allemaal begon

The first time I truly understood what a hacker was, I wasn't reading a book. I was watching someone on YouTube methodically disassemble a login system — layer by layer, explaining exactly where it broke and why. I remember thinking: that's not destruction. That's the deepest possible understanding of something.

From there it snowballed. I followed hackers online, watched every film I could find about it, and started testing things myself. Minecraft was my first playground — finding server exploits, experimenting with what was possible, learning how systems behaved when you pushed them past their limits. I didn't know it at the time, but I was already doing the thing I'd end up studying for years.

In secondary school I chose Electronics & ICT — not by accident, but because I wanted a technical foundation, not just theory. By the time Thomas More offered a Cybersecurity programme, the decision had already been made long before I ever visited an open day. I knew exactly where I was going.

De eerste keer dat ik echt begreep wat een hacker was, las ik geen boek. Ik keek naar iemand op YouTube die methodisch een loginsysteem uitelkaar haalde — laag voor laag, precies uitlegde waar het brak en waarom. Ik dacht: dat is geen vernietiging. Dat is de diepste manier om iets te begrijpen.

Daarna ging het snel. Ik volgde hackers online, keek elke film die ik kon vinden, en begon dingen zelf te testen. Minecraft was mijn eerste speeltuin — server-exploits ontdekken, experimenteren met wat mogelijk was, leren hoe systemen zich gedragen als je ze tot hun limiet duwt.

Op school koos ik voor Elektronica & ICT — niet toevallig, maar omdat ik een technisch fundament wilde. Toen Thomas More een Cybersecurity-programma aanbood, was de beslissing al lang voor de open dag gemaakt. Ik wist precies waar ik naartoe ging.

Curious by defaultNieuwsgierig van nature Analytical thinkerAnalytisch denker SpontaneousSpontaan
Mindset
Mindset

The honest version

De eerlijke versie

I'm not going to pretend I'm the most disciplined student in the room. I'm not the one who attends every lecture, keeps perfect notes, and starts assignments two weeks early. That person exists — I've met them — and I'm not them. That's fine. We're different machines.

What I am is someone who comes alive under impossible conditions. There's a version of me that had three days before an exam, a stack of material I'd barely seen, and a choice: give up or go all in. I stayed up until 4am two nights running. I built a map of everything I didn't understand and filled every gap, one by one. I passed. Not barely — I passed. Not because I'm particularly gifted, but because when there's no option left except fight, something in me shifts gear.

The real challenge — the one I'm still working on — is bringing that same intensity to the quiet moments. The weeks without a deadline. The periods where no one is watching. That's the work I'm doing on myself right now. Not making excuses for it. Not hiding it. Just being honest about where I'm growing.

Ik ga niet doen alsof ik de meest gedisciplineerde student in de kamer ben. Ik ben niet degene die elke les bijwoont, perfecte notities bijhoudt en taken twee weken vroeg begint. Dat type bestaat — ik heb het ontmoet — en ik ben het niet. Dat is oké. We zijn verschillende machines.

Wat ik wél ben, is iemand die tot leven komt onder onmogelijke omstandigheden. Er is een versie van mij die drie dagen voor een examen stond, een berg stof die ik nauwelijks had gezien, en een keuze: opgeven of alles geven. Ik bleef op tot 4 uur's nachts, twee nachten op rij. Ik maakte een kaart van alles wat ik niet begreep en vulde elk gat in. Ik slaagde. Niet ternauwernood — ik slaagde. Niet omdat ik bijzonder getalenteerd ben, maar omdat als er geen andere optie is, iets in mij een andere versnelling inschakelt.

De echte uitdaging — die ik nog steeds aanpak — is die intensiteit ook brengen in de rustige momenten. De weken zonder deadline. De perioden waar niemand meekijkt. Dat is het werk dat ik nu op mezelf doe.

"Pressure doesn't break me. "Druk breekt me niet. It shows exactly how far I'm willing to go." Het laat zien hoe ver ik bereid ben te gaan."

Thrives under pressure

Gedijt onder druk

Doesn't just survive high-stakes situations — performs best in them. Deadline pressure is a feature, not a bug.

Overleeft niet alleen hoge-druk situaties — presteert er het beste in. Deadline-druk is een feature, geen bug.

🔍

Systems thinker

Systeemdenker

Naturally breaks everything into components. Can't look at a system without asking: where does this break?

Breekt alles van nature op in componenten. Kan een systeem niet bekijken zonder te vragen: waar breekt dit?

🎯

Radically honest

Radicaal eerlijk

Knows his weaknesses as clearly as his strengths. Not performing growth — actually doing it.

Kent zijn zwaktes even helder als zijn sterkte. Niet groeien als show — het echt doen.

🔥

Intensity over routine

Intensiteit boven routine

When fully on, the output is undeniable. Working on making that consistency, not just the peaks.

Wanneer volledig aan staat, is de output onmiskenbaar. Werkt aan de consistentie, niet alleen de pieken.

Growth
Groei

What the hard years taught me

Wat de moeilijke jaren me leerden

The hardest stretch of the past few years didn't happen in a classroom. It happened in life. There were weeks I couldn't find a reason to open my laptop. Periods where everything I was supposed to be building felt pointless — where showing up felt impossible and not showing up felt even worse.

I fell behind. I skipped classes. I made decisions that cost me. And then — slowly, messily, without a single clean turning point — I came back. Not because it suddenly got easier. Because I decided that no matter what was going on around me, I could still control what I built in spite of it.

Those periods also forced me to grow in ways school never would have. I've become more honest with myself, more willing to sit in discomfort, more capable of communicating what I actually think — especially with people I trust. The next step is doing that in every room, not just the comfortable ones. That's the part I'm actively working on.

De zwaarste periode van de afgelopen jaren speelde zich niet af in een klaslokaal. Het speelde zich af in het leven. Er waren weken dat ik geen reden kon vinden om mijn laptop te openen. Perioden waar alles wat ik moest bouwen zinloos voelde — waar opdagen onmogelijk voelde en niet opdagen nog erger.

Ik raakte achterop. Sloeg lessen over. Nam beslissingen die me iets kostten. En toen — langzaam, rommelig, zonder een enkel clean kantelpunt — came ik terug. Niet omdat het plotseling makkelijker werd. Omdat ik besloot dat wat er ook om me heen speelde, ik kon nog steeds controleren wat ik desondanks bouwde.

Die perioden dwongen me ook te groeien op manieren die school nooit zou hebben gedaan. Ik ben eerlijker geworden met mezelf, meer bereid om in ongemak te zitten, meer in staat te communiceren wat ik echt denk. De volgende stap is dat in elke kamer doen, niet alleen de comfortabele. Dáár werk ik actief aan.

"No matter how dark it gets — keep building. That's the only answer I've ever found that actually works."
"Hoe donker het ook wordt — blijf bouwen. Dat is het enige antwoord dat ik ooit gevonden heb dat echt werkt."

📈

Where I am now

Waar ik nu sta

Stronger communicator. More self-aware. Actively pushing into unfamiliar group situations instead of avoiding them. Still imperfect — but moving forward on purpose.

Sterkere communicator. Meer zelfbewust. Actief in onbekende groepssituaties stappen in plaats van ze te vermijden. Nog steeds imperfect — maar bewust vooruit.

Live Status
Live Status

Currently

Op dit moment

Not a past-tense resume. A present-tense snapshot of where things stand right now.

Geen cv in de verleden tijd. Een snapshot in de tegenwoordige tijd van waar dingen nu staan.

🎓
Active
Studying @ Thomas MoreStuderend @ Thomas More Applied Computer Science — Cybersecurity, Geel Toegepaste Informatica — Cybersecurity, Geel
🔨
Building
Concreto — Hosting Platform (SKIL2 Sem 2)Concreto — Hostingplatform (SKIL2 Sem 2) Backend features and webhooks pipeline. Website live, CI/CD pipeline running, Argo CD deployment in progress. Backend features en webhooks-pipeline. Website live, CI/CD-pipeline actief, Argo CD deployment in opbouw.
🔍
Exploring
Offensive Security & CTFsOffensieve Security & CTF's Getting into penetration testing methodology, CTF challenges, and Linux hardening. Verdiepen in pentesting methodologie, CTF-uitdagingen en Linux hardening.
💬
Growing
Showing up in uncomfortable roomsAanwezig zijn in oncomfortabele situaties Actively working on collaboration in unfamiliar group settings. The hardest and most important thing right now. Actief werken aan samenwerking in onbekende groepssituaties. Het moeilijkste en belangrijkste nu.
🏴
Hacking
TryHackMe & HackTheBoxTryHackMe & HackTheBox Working through offensive security labs, CTF challenges, and real attack scenarios — hands-on practice to close the gap between theory and execution. Bezig met offensieve security labs, CTF-uitdagingen en echte aanvalsscenario's — praktijkervaring om de kloof tussen theorie en uitvoering te dichten.
TryHackMe badge — Semce live · updates automatically live · werkt automatisch bij
Arsenal
Arsenaal

What I can do

Wat ik kan

⚙️

Technical

Technisch

Languages
Talen
Python JavaScript HTML/CSS Java C++
Web & Backend
Web & Backend
Frontend Dev Real-time Apps WebSockets REST APIs .NET / C# MySQL OOP
Systems & DevOps
Systemen & DevOps
Linux Docker Proxmox VE GitHub Actions Argo CD Git/GitHub Self-hosting Home Assistant Windows Server Active Directory
IoT & Hardware
ESP32 Arduino PCB Design EasyEDA Sensor Integration 3D Printing
Security
Security
Networking Basics App Security Auth & Access Control Wireshark / Nmap Kali Linux Burp Suite OWASP Top 10 CVSS Web App Pentesting API Security
🧠

Soft Skills

Soft Skills

Problem SolvingProbleemoplossenBreaks complex challenges into structured, actionable steps.Complexe uitdagingen opdelen in gestructureerde, uitvoerbare stappen.
Analytical ThinkingAnalytisch DenkenNaturally maps patterns, edge cases, and system behaviour.Brengt van nature patronen, randgevallen en systeemgedrag in kaart.
AdaptabilityAanpassingsvermogenPicks up new tools fast. Thrives in changing environments.Pikt nieuwe tools snel op. Gedijt in veranderende omgevingen.
IndependenceZelfstandigheidTakes full ownership of project components from start to finish.Neemt volledige eigenaarschap van projectonderdelen van begin tot eind.
Communication (developing)Communicatie (in ontwikkeling)Growing rapidly. Increasingly clear and direct, especially in technical contexts.Snel groeiend. Steeds duidelijker en directer, vooral in technische contexten.
🌍

Languages

Talen

🇧🇪
DutchNativeMoedertaal
🇬🇧
EnglishFluentVloeiend
🇫🇷
FrenchBasicBasis
Projects
Projecten

The Work

Het Werk

Six real projects. Not demos — things that actually run, with real constraints, real teammates, and real lessons earned the hard way.

Zes echte projecten. Geen demo's — dingen die echt draaien, met echte beperkingen, echte teamgenoten en echte lessen op de harde manier geleerd.

Traze — real-time parcel tracking web app
01 / SKIL2 — Semester 1
Real-Time Parcel Tracking
Real-Time Pakkettracking
CompletedAfgerond
What we built
Wat we bouwden

A live parcel tracking platform with hardware and software built from scratch. We built a physical GPS tracker using an ESP32 that read coordinates and pushed them to our database via an API key — and built the full web platform on top: ~1 second live updates over WebSockets, JWT authentication with role-based access, and a real-time dashboard showing parcel movement on a map. The hardware feeds the software. Both sides had to work together.

Een live pakkettracking platform met hardware en software volledig zelf gebouwd. We bouwden een fysieke GPS-tracker met een ESP32 die coördinaten uitleest en via een API-sleutel naar onze database stuurt — en daar bovenop het volledige webplatform: ~1 seconde live updates via WebSockets, JWT-authenticatie met rolgebaseerde toegang, en een real-time dashboard dat pakketbeweging op een kaart toont. De hardware voedt de software. Beide kanten moesten samenwerken.

What I learned
Wat ik leerde

How real-time architecture actually behaves under pressure — WebSocket lifecycle management, graceful reconnections, and keeping client/server state in sync when events arrive out of order. I implemented JWT auth flows properly for the first time: separate access and refresh tokens, silent refresh without breaking the session, role-based route protection. The biggest shift was moving from "does this work?" to "is this reliable when real users push it?" — they're completely different questions.

Hoe real-time architectuur zich echt gedraagt onder druk — WebSocket lifecycle management, graceful reconnecties, en client/server state synchroon houden als events buiten volgorde aankomen. Ik implementeerde JWT auth-flows correct voor het eerst: aparte access- en refresh-tokens, silent refresh zonder sessie te breken, rolgebaseerde routebeveiliging. De grootste shift was van "werkt dit?" naar "is dit betrouwbaar als echte gebruikers het pushen?"

Hardest part
Moeilijkste deel

Keeping the tracking map accurate when GPS packets arrived out of sequence. The server was fast, but network jitter meant the client sometimes received position updates in the wrong order — making the marker jump backwards on the map. Fixed it by attaching timestamps server-side and sorting on the client before rendering. A small bug that taught me a lot about distributed timing.

De trackingkaart accuraat houden wanneer GPS-pakketten buiten volgorde aankwamen. Het netwerk veroorzaakte jitter waardoor de client soms positie-updates in de verkeerde volgorde ontving — de marker sprong terug op de kaart. Opgelost door server-side timestamps toe te voegen en op de client te sorteren voor rendering.

ESP32JavaScriptHTML/CSSWebSocketsREST APIsJWTMySQL
View live project →Bekijk live project →
CONCRETO
GitHub Actions
+
Argo CD
02 / SKIL2 — Semester 2
Concreto — Hosting Platform
Concreto — Hostingplatform
In Progress — Active BuildIn Ontwikkeling
What we're building
Wat we bouwen

A real server environment for a client — not a sandbox, not a mock. The first version of the website is live, the CI pipeline builds it into a container image on every push, VMs are running with NFS-backed shared storage, and the firewall is configured to keep the environment controlled. Argo CD is being wired in to make deployments automatic and traceable. My role: backend feature development and the webhooks pipeline that triggers builds when code gets pushed.

Een echte serveromgeving voor een klant — geen sandbox, geen mock. De eerste versie van de website is live, de CI-pipeline bouwt die bij elke push naar een containerimage, VM's draaien met NFS-gedeelde opslag en de firewall houdt de omgeving onder controle. Argo CD wordt gekoppeld voor automatische en traceerbare deployments. Mijn rol: backend features en de webhooks-pipeline die builds triggert bij elke code-push.

What I'm learning
Wat ik leer

This is the first project where my code has to be deployable by someone else, on a server I don't fully control, in a pipeline I didn't build alone. That changes how you write. Features need to be clean enough for the team to extend. Webhooks need to be reliable enough that a silent HTTP failure doesn't break a deployment. I'm learning how a frontend, a CI pipeline, container images, firewall rules, and shared storage all have to work together before a single page loads — and the client meeting that went well confirmed we're building the right thing.

Dit is het eerste project waarbij mijn code door iemand anders deployed moet worden, op een server die ik niet volledig beheer, in een pipeline die ik niet alleen bouwde. Dat verandert hoe je schrijft. Features moeten uitbreidbaar zijn voor het team. Webhooks moeten betrouwbaar genoeg zijn dat een stille HTTP-fout geen deployment breekt. Ik leer hoe frontend, CI-pipeline, containerimages, firewallregels en gedeelde opslag allemaal moeten samenwerken voor één pagina laadt.

Hardest part
Moeilijkste deel

Understanding where my work ends and the infrastructure begins. When something breaks — is it the webhook payload, the container build, or a firewall rule blocking the port? In a team project with multiple moving pieces, debugging means tracing a problem through layers you didn't all write yourself. It's a different skill from solo debugging, and I'm actively building it.

Begrijpen waar mijn werk eindigt en de infrastructuur begint. Als iets breekt — is het de webhook payload, de containerbuild of een firewallregel die de poort blokkeert? In een teamproject met meerdere bewegende delen betekent debuggen een probleem traceren door lagen die je niet allemaal zelf hebt geschreven. Dat is een andere vaardigheid dan solo debuggen, en ik bouw die actief op.

JavaScriptHTML/CSSGitHub ActionsDockerArgo CDNFSFirewallWebhooks
Visit concretohosting.com →Bekijk concretohosting.com →
Cybertruck — custom ESP32 pick-up truck, bottom chassis view
03 / Final-Year Project — Sint Jozef Geel
Cybertruck — ESP32 RC Vehicle & Controller
Cybertruck — ESP32 RC Voertuig & Controller
CompletedAfgerond
What I built
Wat ik bouwde

Two devices, both built from scratch: a pick-up truck running on a 7.4V LiPo with a 390 brushed motor, two servo motors, a laser transmitter and LED strip — and a custom handheld controller with dual joysticks, rotary encoder, four buttons and a TFT display. Both had their own custom PCB designed in EasyEDA and soldered by hand. They communicate wirelessly via NRF24L01 RF modules over SPI. The vehicle could drive, shoot a laser at a target, and carry Duplo blocks for a team challenge involving a crane.

Twee apparaten, beide van nul gebouwd: een pick-up truck op een 7.4V LiPo met een 390 brushed motor, twee servomotoren, een lasertransmitter en LED-strip — en een zelfgemaakte handcontroller met dubbele joysticks, rotary encoder, vier knoppen en een TFT-display. Beide hadden een eigen PCB ontworpen in EasyEDA en handmatig gesoldeerd. Ze communiceren draadloos via NRF24L01 RF-modules over SPI. Het wagentje kon rijden, op een doel schieten met een laser en Duplo-blokjes vervoeren voor een teamuitdaging.

What I learned
Wat ik leerde

PCB design end-to-end: schematic in EasyEDA, layout, ordering, soldering. SPI communication and how RF protocols actually behave in the real world. ESC and servo control via PWM. Power budgeting — the 2700mAh LiPo gives about 20 minutes of runtime at nominal draw. And the most important lesson: a bug in firmware isn't wrong output — it's a motor that doesn't stop, or a PCB that explodes.

PCB-design van begin tot eind: schema in EasyEDA, layout, bestellen, solderen. SPI-communicatie en hoe RF-protocollen zich in de echte wereld gedragen. ESC en servo-aansturing via PWM. Vermogensbudget berekenen — de 2700mAh LiPo geeft ongeveer 20 minuten bij nominaal verbruik. En de belangrijkste les: een bug in firmware is geen verkeerde output — het is een motor die niet stopt, of een PCB die ontploft.

Hardest part
Moeilijkste deel

Three real problems, three real fixes. First: the NRF24L01 modules refused to communicate reliably when paired with a Raspberry Pi — random connections that disappeared overnight. Switched both sides to ESP32 and it worked perfectly. Second: ordered the ESC and LiPo separately and only realised on delivery that the connectors didn't match. Sent the wrong ESC back, bought the right one cheaper. Third — and best: a wiring mistake on the PCB pulled 7.4V directly to ground through the switch with no resistor. The PCB literally exploded. Redesigned, reordered, resoldered. It worked.

Drie echte problemen, drie echte oplossingen. Eerst: de NRF24L01-modules wilden niet betrouwbaar communiceren met een Raspberry Pi — willekeurige verbindingen die 's nachts verdwenen. Beide kanten naar ESP32 geswitcht en het werkte perfect. Dan: ESC en LiPo apart besteld, bij levering pas gezien dat de stekkers niet pasten. Foute ESC teruggestuurd, juiste goedkoper gekocht. Derde — en beste: een bedradingsfout op de PCB trok 7.4V rechtstreeks naar de grond via de schakelaar zonder weerstand. De PCB ontplofte letterlijk. Herontworpen, herbesteld, hersoldeerd. Het werkte.

ESP32C++PCB DesignNRF24L01SPIESC / PWMEasyEDA3D Printing
Watch build demo →Bekijk demo →
Home Assistant
+
Proxmox VE
04 / Personal Project
Home Server & Smart Home System
Thuisserver & Smart Home Systeem
Active / OngoingActief / Doorlopend
The setup
De setup

An old PC running Proxmox VE with two VMs: one hosting Minecraft servers for me and my friends to play on, and one running Home Assistant for smart home control. On the Home Assistant side I've connected my bedroom lights and built a custom ESP32 LED strip controller for configurable room lighting. More IoT integrations are on the list — just haven't gotten to them yet. Built and maintained entirely on my own time, because some projects you do for yourself.

Een oude pc met Proxmox VE en twee VM's: één voor Minecraft-servers voor mij en vrienden, één voor Home Assistant. In Home Assistant heb ik mijn slaapkamerlichten gekoppeld en een eigen ESP32 LED-strip controller gebouwd voor instelbare sfeerverlichting. Meer IoT-integraties staan op de lijst — moet er nog aan toe komen. Volledig in mijn eigen tijd gebouwd.

What I learned
Wat ik leerde

How virtualisation actually works once you're responsible for it yourself — spinning up VMs, allocating resources, keeping services running when you want to play. Proxmox makes you think in terms of machines as isolated, manageable units rather than "the computer". Home Assistant taught me how automation config works in practice: YAML-based device control, triggers, and why getting hardware to talk to software is never as simple as it looks on paper.

Hoe virtualisatie echt werkt als je er zelf verantwoordelijk voor bent — VM's opzetten, resources verdelen, services draaiende houden. Proxmox dwingt je te denken in geïsoleerde, beheersbare eenheden. Home Assistant leerde me hoe automatiseringsconfiguratie in de praktijk werkt: YAML-gebaseerde apparaatbesturing, triggers, en waarom hardware en software koppelen nooit zo simpel is als het eruitziet.

Hardest part
Moeilijkste deel

Getting the Minecraft server to run reliably inside a VM on Proxmox — it took some digging to understand how to allocate the right CPU and memory so the server didn't lag. A separate issue: friends in the Netherlands couldn't connect because of a DNS misconfiguration on their end. Took a bit of back-and-forth to diagnose remotely, but once we understood what was wrong it was a quick fix. Small problems, but the kind you only run into when something real is running for real users.

De Minecraft-server betrouwbaar laten draaien in een VM op Proxmox — het vroeg wat uitzoekwerk om de juiste CPU- en geheugenallocatie te vinden zodat de server niet lagde. Een apart probleem: vrienden in Nederland konden niet verbinden door een DNS-misconfiguratie aan hun kant. Wat heen-en-weer om het op afstand te diagnosticeren, maar eenmaal begrepen wat er mis was, snel opgelost. Kleine problemen — maar het soort dat je alleen tegenkomt als iets echt draait voor echte gebruikers.

Proxmox VEHome AssistantLinuxESP32Minecraft ServerSelf-hostingIoT
1× Critical
·
2× Medium
·
OWASP TOP 10
Methodology
05 / Application Security — Thomas More
ShopMore — Web App Pentest
ShopMore — Web App Pentest
CompletedAfgerondCVSS 9.1 Critical
What I did
Wat ik deed

Performed a structured black-box penetration test on the ShopMore web application as part of the Application Security course. Tested authentication, the admin interface, contact form, and product filtering against the OWASP Top 10. Produced a professional report with CVSS scores, reproduction steps, screenshots, and remediation recommendations for every finding.

Uitgevoerd een gestructureerde black-box penetratietest op de ShopMore webapplicatie als onderdeel van het vak Application Security. Getest op authenticatie, admininterface, contactformulier en productfiltering tegen de OWASP Top 10. Professioneel rapport opgesteld met CVSS-scores, reproductiestappen, screenshots en hersteladvies.

Findings
Bevindingen

SM-01 Critical (CVSS 9.1) — Broken Access Control: the /admin interface had zero authentication. Navigate to it, get full control — create, edit, delete any user. SM-02 Medium (CVSS 6.1) — Reflected XSS: user input echoed back to the contact form without encoding. <script>alert(1)</script> executed in the browser. SM-03 Medium (CVSS 5.3) — Information Disclosure: unhandled exceptions exposed full stack traces and internal framework details. SQL injection, stored XSS, directory traversal, and command injection were all tested — not present.

SM-01 Critical (CVSS 9.1) — Broken Access Control: de /admin-interface had nul authenticatie. Navigeer ernaar, volledige controle — gebruikers aanmaken, bewerken, verwijderen. SM-02 Medium (CVSS 6.1) — Reflected XSS: userinput werd zonder encoding teruggestuurd naar het contactformulier. <script>alert(1)</script> werd uitgevoerd in de browser. SM-03 Medium (CVSS 5.3) — Information Disclosure: onafgehandelde uitzonderingen legden volledige stack traces bloot. SQL-injectie, stored XSS, directory traversal en command injection allemaal getest — niet aanwezig.

What I learned
Wat ik leerde

How to approach a web application systematically — OWASP as a real testing framework, not a checklist to memorise. What CVSS scores actually mean in practice: a 9.1 means any unauthenticated person on the network can take full control. And the most important lesson: a pentest is only as useful as the report it produces. Knowing how to document findings so a developer can actually fix them — precise impact, clear steps, actionable recommendations — is half the job.

Hoe je een webapplicatie systematisch benadert — OWASP als echt testframework, niet een lijst om te onthouden. Wat CVSS-scores in de praktijk betekenen: een 9.1 betekent dat elke niet-geauthenticeerde persoon op het netwerk volledige controle kan krijgen. En de belangrijkste les: een pentest is alleen nuttig als het rapport dat erbij hoort ook nuttig is. Bevindingen documenteren zodat een developer ze kan oplossen — precieze impact, duidelijke stappen, uitvoerbaar advies — is de helft van het werk.

Hardest part
Moeilijkste deel

The critical finding was almost embarrassingly simple — just navigate to /admin. The harder work was writing the report professionally: quantifying the risk accurately with CVSS, explaining the attack chain clearly enough for a non-technical reader, and making sure every recommendation was specific enough to act on. Finding the vulnerability is one skill. Communicating it properly is another.

De kritieke bevinding was bijna gênant simpel — gewoon naar /admin navigeren. Het moeilijkere werk was het rapport professioneel schrijven: het risico nauwkeurig kwantificeren met CVSS, de aanvalsketen duidelijk genoeg uitleggen voor een niet-technische lezer, en zorgen dat elk hersteladvies concreet genoeg was. De kwetsbaarheid vinden is één vaardigheid. Die correct communiceren is een andere.

Kali LinuxBurp SuiteOWASP Top 10CVSSXSSAccess ControlWeb App Security
Nokia / USSD
API / DB
Middleman App
06 / International Week — Thomas More × Howest
MASSWAVE — Farmer to Market Platform
MASSWAVE — Boer tot Markt Platform
CompletedAfgerondInternational Week
What we built
Wat we bouwden

MASSWAVE is a communication platform built to solve a real problem: smallholder farmers in Tanzania can't easily reach crop buyers without physically travelling to market. The solution uses what they already have — a basic Nokia feature phone. Farmers navigate a USSD menu (no internet, no app, just the GSM network) to register available crops, quantities, prices, and location. That data hits a REST API as JSON, gets stored in a database, and is pushed as a notification to middlemen (aggregators) on their smartphone app. The middleman confirms the offer, picks a route, and the farmer gets a confirmation back on their Nokia. The whole loop — no internet required on the farmer's end.

MASSWAVE is een communicatieplatform gebouwd voor een echt probleem: kleinschalige boeren in Tanzania kunnen niet makkelijk cropkopers bereiken zonder fysiek naar de markt te gaan. De oplossing gebruikt wat ze al hebben — een Nokia-featurephone. Boeren navigeren een USSD-menu (geen internet, geen app, enkel het GSM-netwerk) om beschikbare gewassen, hoeveelheden, prijzen en locatie te registreren. Die data komt als JSON bij een REST API terecht, wordt opgeslagen in een database en als notificatie naar tussenpersonen (aggregators) verstuurd via hun smartphone-app. De tussenpersoon bevestigt het aanbod, kiest een route, en de boer krijgt bevestiging terug op zijn Nokia. De volledige loop — geen internet nodig aan de kant van de boer.

What I learned
Wat ik leerde

That the most interesting engineering constraints come from the user, not the tech. USSD is a 160-character, menu-only, stateless protocol — there's no fancy UI, no validation popups, no retry buttons. Designing a flow that's actually usable within those limits forces you to think about the experience in a completely different way. Also got exposed to how REST APIs serve very different clients at once: a bare-bones USSD gateway on one end, a full smartphone app on the other — same backend, totally different interaction models.

Dat de interessantste engineeringbeperkingen van de gebruiker komen, niet van de technologie. USSD is een 160-karakter, menu-only, stateless protocol — geen fancy UI, geen validatiepopups, geen retry-knoppen. Een flow ontwerpen die echt bruikbaar is binnen die limieten dwingt je om de ervaring op een compleet andere manier te benaderen. Ik leerde ook hoe REST API's tegelijk zeer verschillende clients bedienen: een kaalbere USSD-gateway aan de ene kant, een volledig smartphone-app aan de andere — dezelfde backend, totaal verschillende interactiemodellen.

Hardest part
Moeilijkste deel

Building under international-week time pressure with a mixed team from different programs at Thomas More — developers, network engineers, and cybersecurity students all working on the same codebase. Everyone had a different way of thinking about the problem and a different part of the stack to own. Coordinating without stepping on each other's work, keeping the API contract stable while both sides were still changing, and shipping something demo-ready in five days. The security issues we found along the way couldn't be patched before the demo — so the presentation included both what the system does and what would need fixing before it went to production.

Bouwen onder internationale-week tijdsdruk met een gemengd team van verschillende richtingen binnen Thomas More — developers, netwerkingenieurs en cybersecurity-studenten die allemaal op dezelfde codebase werkten. Iedereen dacht anders over het probleem en had een ander deel van de stack in handen. Coördineren zonder elkaars werk te verstoren, het API-contract stabiel houden terwijl beide kanten nog veranderden, en iets demo-klaar opleveren in vijf dagen. De securityproblemen die we onderweg vonden konden niet worden gepatcht voor de demo — dus de presentatie omvatte zowel wat het systeem doet als wat gefixed zou moeten worden voor productie.

REST APIs.NET / C#API SecurityOWASP Top 10JSONLinuxTeamwork
Where I'm goingWaar ik naartoe ga

I want to break systems
so no one else can.

Ik wil systemen breken
zodat niemand anders dat kan.

Most people in security want to defend. I want to attack — because the best defenders are the ones who've already been on the other side. I want to sit in front of a system built by someone smart, find the thing they missed, and hand it back to them documented, explained, and fixed. That's what Red Team work is. That's what I'm building toward.

De meeste mensen in security willen verdedigen. Ik wil aanvallen — want de beste verdedigers zijn degenen die al aan de andere kant zijn geweest. Ik wil voor een systeem zitten dat door iemand slims is gebouwd, het ding vinden dat ze misten, en het teruggeven gedocumenteerd, uitgelegd en opgelost. Dat is Red Team werk. Dat is waar ik naartoe bouw.

🔴

Red Team

Red Team

Simulate real attacks before the real attackers show up. Find the gaps first.

Echte aanvallen simuleren voor de echte aanvallers komen. De gaten als eerste vinden.

🔓

Penetration Testing

Penetration Testing

Systematic, documented probing of systems. Understand every layer before calling it secure.

Systematisch, gedocumenteerd onderzoeken van systemen. Elke laag begrijpen voor het veilig te noemen.

🛡️

Secure by Design

Veilig door Ontwerp

The end goal: help build environments that can withstand what I know how to throw at them.

Het einddoel: helpen omgevingen bouwen die kunnen weerstaan wat ik weet hoe te gooien.

Let's talk
Laten we praten

It started with a YouTube video — a hacker, a broken login, and the realisation that truly understanding something means knowing exactly where it breaks. That curiosity is still here. If you want someone who thinks that way, let's write the next chapter.

Het begon met een YouTube-video — een hacker, een kapot loginsysteem, en het besef dat iets echt begrijpen betekent weten precies waar het breekt. Die nieuwsgierigheid is er nog steeds. Als je iemand wil die zo denkt, laten we het volgende hoofdstuk schrijven.

© 2026 Sem Vanderlinden  ·  Cybersecurity Student  ·  Thomas More  ·  Belgium