← Back to projects

This is the written report from a penetration test I ran against a practice web app I built to be insecure. The vulnerable app itself is not hosted here — only the report and its evidence. Full project on GitHub ↗

Web App Penetration Test — MeridianConnect

Assessment Web application penetration test
Target MeridianConnect — a practice employee portal built to be insecure
Tester C.W.
Date 2026-10-21

This is a condensed summary. The full report, evidence, and remediated code are on GitHub.

Summary

I ran a full penetration test, start to finish, against an employee portal I built to be deliberately insecure — scoping it, breaking in, documenting the findings, fixing them, and re-testing. Testing was done safely against a private copy, so no live systems or real data were involved.

The site had five exploitable issues: one critical, one high, and three medium. The worst let anyone sign in as any employee with no password and read the whole staff database. All five were fixed and re-tested, and confirmed resolved.

Risk at a glance

Severity Count
Critical 1
High 1
Medium 3

Findings

# Finding (plain terms) Severity
1 Log in as anyone with no password, and read the whole database (SQL injection) Critical
2 Any employee can read everyone's payslips by changing a number in the URL (IDOR) Medium
3 A posted message can run code in other people's browsers (stored XSS) Medium
4 Passwords stored as plain readable text, not scrambled High
5 Developer/testing settings left on, leaking error details Medium

Proof

1 — Login bypass (SQL injection). Submitting admin' -- as the username, with no valid password, logs straight in as the administrator (the server redirects to the dashboard):

Burp Repeater: the login payload returns 302 redirecting to /dashboard

2 — Reading other people's pay (IDOR). Logged in as a normal employee, changing the number in /payslip/4 reveals the HR Manager's pay:

Burp Render view: logged in as a normal user, viewing the HR Manager's payslip

3 — Running code in a browser (stored XSS). A note posted to the company board runs as code for everyone who views it:

The posted script runs: a browser pop-up reading 'XSS by 127.0.0.1'

Remediation

Each finding was fixed (parameterized queries, access-control checks, output escaping, password hashing, and hardened configuration) on a separate code branch, then re-tested to confirm the exploit no longer works while normal use of the site still does. All five: resolved.


Want the detail — CVSS scores, step-by-step reproduction, business impact, and the exact fixes? The full report and evidence are on GitHub.