Skip to content

Schrödinger's Scope⚓︎

Difficulty:
Direct link: Schrödinger's Scope

Objective⚓︎

Request

Kevin in the Retro Store ponders pentest paradoxes—can you solve Schrödinger's Scope?

Kevin McFarland

The Neighborhood College Course Registration System has been getting some updates lately and I'm wondering if you might help me improve its security by performing a small web application penetration test of the site.

For any web application test, one of the most important things for the test is the 'scope', that is, what one is permitted to test and what one should not. While hacking is fun and cool, professional integrity means respecting scope boundaries, especially when there are tempting targets outside our permitted scope.

Thankfully, the Neighborhood College has provided a very concise set of 'Instructions' which are accessible via a link provided on the site you will be testing. Do not overlook or dismiss the instructions! Following them is key to successfully completing the test.

Unfortunately, those pesky gnomes have found their way into the site and have been causing some mischief as well. Be wary of their presence and anything they may have to say as you are testing.

Can you help me demonstrate to the Neighborhood College that we know what responsible penetration testing looks like?

An eternal winter might sound poetic, but there's a reason Tolkien's heroes fought against endless darkness. A neighborhood frozen in time isn't preservation—it's stagnation. No spring astronomy observations, no summer shortwave propagation... just ice.

Hints⚓︎

Schrödinger's Scope

Watch out for tiny, pesky gnomes who may be violating your progess. If you find one, figure out how they are getting into things and consider matching and replacing them out of your way.

Solution⚓︎

Kevin asked for a scoped pentest of the Neighborhood College Course Registration System. The instructions emphasized only testing the immediate /register path and reporting findings as they appear.

Scope review and initial recon⚓︎

After opening the link of the Course registration website, I got this engagement instructions.

Screenshot 2026-01-14 112652

The site navigation appears after closing the engagement instructions. I also noticed a gnome message.

Screenshot 2026-01-14 154947

I checked the Status Report which outlined that there was no found vulnerabilities yet. However, I already got 2 out of scope violations on a supposed /gnomeU endpoint. This shows that there is some gnome activities triggering the out of scope violations.

Screenshot 2026-01-14 154959

After clicking on "Enter Registration system" from the home page, I got this login screen with a hint from the gnome to check the sitemap.

Screenshot 2026-01-14 215410

Developer notes disclosure and login⚓︎

I navigated to the sitemap endpoint which is under the register endpoint, so in scope. I found a dev/dev_notes and dev/dev_todos endpoints.

Screenshot 2026-01-14 222914

The dev/dev_notes led to a 403 page.

Screenshot 2026-01-14 222851

I navigated to the dev/dev_todos endpoint under the register endpoint to stay in scope. I found a credential and got my first in-scope finding.

Screenshot 2026-01-14 223156

Burp interception to bypass gnome scope blockers⚓︎

The Gnome out of scope actions led to out of scope messages even on in-scope endpoints which led to termination of contract many times. I found this code showing the /gnomeU as the source of the small image that loads on the bottom-left of every page of the website.

Screenshot 2026-01-17 192939

Since the gnome out of scope actions were holding me back, I created a request interceptions rules in Burp Suite on the \gnomeU endpoint.

Screenshot 2026-01-17 121643

For every action that called the \gnomeU endpoint, I got sent to the proxy part on Burp Suite and had to forward or drop the requests.

Screenshot 2026-01-17 115215

Login and Forward IP vulnerability⚓︎

I used the discovered credentials on the student login page and hit an "Invalid Forwarding IP".

Screenshot 2026-01-17 125500

To circumvent the IP forwarding, I added a rule that add a X-Forwarded-For: 127.0.0.1 header for the request.

Screenshot 2026-01-17 125429

I was then able to login successfully using the teststudent credentials and load the courses page.

Screenshot 2026-01-17 125556

I checked the status report and got my second in-scope finding.

Screenshot 2026-01-17 130254

Commented course search and client-side unlock⚓︎

Reviewing the response HTML showed a commented-out course search link, suggesting hidden functionality.

Screenshot 2026-01-17 130355

The client JavaScript referenced a courseSearch element and a trap flag, hinting that a courseSearch id will unlock the search.

Screenshot 2026-01-17 130824

I used the console to inject a courseSearch element, triggering the unlock path for the search.

Screenshot 2026-01-17 142418

The Status Report updated to include the commented-out course search finding.

Screenshot 2026-01-17 142702

The course search page became accessible after the DOM change.

Screenshot 2026-01-17 184916

Course discovery and SQLi validation⚓︎

I started with a normal course number (101) and got a valid course result.

Screenshot 2026-01-17 191739

After opening the course details I got access to the course description, schedule etc.

Screenshot 2026-01-17 192340

I tried a basic SQL injection payload which did not reveal results. however, this was a sign that not only numbers are collected and a SQLi is possible.

Screenshot 2026-01-17 201941

I found this write-up that gave me more insight on this stage of the objective: https://0xdf.gitlab.io/holidayhack2025/act3/schrodinger.

Using a simpler input of 1 returned more courses, indicating that the query does a search based on what value the course contains.

Screenshot 2026-01-17 211525

A more effective SQL injection payload returned a longer list of courses, confirming the vulnerability.

Screenshot 2026-01-17 211941

I scrolled the results and found a gnome course that appeared to be unauthorized content.

Screenshot 2026-01-17 212047

Reporting the gnome course⚓︎

Opening the gnome course triggered the in-scope vulnerability alert and prompt to report it.

Screenshot 2026-01-17 212116

After reporting the in-scope vulnerability, I got one more in-scope finding.

Screenshot 2026-01-17 212140

I got a hint about a hidden course from the gnome.

Screenshot 2026-01-17 213311

I followed the gnome hint about dev notes and got access to the dev/dev_notes endpoint that initially led to a 403 page. The page shows a work in progress course named holiday_behavior.

Screenshot 2026-01-17 185449

When requesting some of the pages, I noticed that only the last two characters of the registration cookie change for all requests. Also trying to access the course under the register/wip/holiday_behavior or register/holiday_behavior paths did not return the course information.

Screenshot 2026-01-17 221156

This is another course page loaded confirming that only the last 2 characters of the cookie change.

Screenshot 2026-01-17 221306

So I set up a sniper attack to brute force those 2 characters values for the correct registration cookie for the hidden course.

Screenshot 2026-01-17 223951

One payload returned a 200 response, indicating the correct characters for the hidden course registration cookie is 4c.

Screenshot 2026-01-17 233011

I updated the cookie with the correct token in a request to the hidden course path register/wip/holiday_behavior and got my last in-scope finding.

Screenshot 2026-01-17 221752

After clicking on finalize the test, I was sent to the success page.

Screenshot 2026-01-17 221820

A report of the findings was available at the bottom of the page.

Screenshot 2026-01-17 221833

Wrap-up and completion⚓︎

The assessment concluded with six vulnerabilities found in-scope.

Screenshot 2026-01-17 221955

Response⚓︎

Kevin McFarland

Well done - you’ve shown the wisdom to stay within scope, uncover what mattered, and respecting other testing boundaries.

That kind of discipline is what separates a real penetration tester from someone just poking around.