TryHackMe - Breach
Daan Perry - 2025-07-24
Industrial Intrusion - Breach
Breach was the first challenge of the Industrial Intrusion CTF organized by TryHackMe on June 27, 2025.
The room was released early as a teaser for the CTF, the CTF focused on a a mix of Red & Blue team exercises for the fictional Virelia Water Control Facility company. At the time of this writing only the Breach challenge is available, other challenges may be rereleased as challenge rooms later.
The CTF scenario
Three months after the infamous malware attack on the Virelia Water Control Facility, the plant resumed operations under "full remediation." But something is off. Operators report flickering sensors, inconsistent valve pressures, and automated alerts that can't be traced to any active process. A deeper dive reveals a chilling truth, the attacker left behind a persistence mechanism: A covert second-stage implant that re-established control through overlooked OT backdoors and a compromised web portal.

You are a hired red team specialist working for the Black Echo company. Your mission: Infiltrate the infected systems before the attacker activates their kill-switch. The catch? The adversary is still there. Watching. Reacting. Fighting back.
The Breach challenge scenario
This engagement aims to find a way to open the gate by bypassing the badge authentication system.

The control infrastructure may hold a weakness: Dig in, explore, and see if you have what it takes to exploit it.

Be sure to check all the open ports, you never know which one might be your way in!
Breach Walkthrough
Once everything has booted up we can visit the ip_address in the browser to see if there is anything happening on port 80. Right away we're greeted with a view of a gate and card reader. Analysing the network tab we can see a few API calls, but there is nothing that jumps out nor is there anything useful in the page's source code. Remember always check for low hanging fruit first.
Closed gate and card reader
NMAP
The challenge description specifically mentioned ports, so let's get the port scans started. I like to start off with this scan. In a CTF setting we know that the host is online so we can use -Pn to speed up scan.
nmap -sS -Pn -p- -T4 ip_address

Apart from the typical ports we'd expect like 22, 80 we can see a few ports that stand out. Lets investigate these ports a little closer with a service and version scan.
nmap -sV -p 80,102,502,1880,8080 ip_address

This will show us that there is another web-app running on port 8080 and a service called vast-control on port 1880. Both of these are promising.
NMAP SYN port scan
Gobuster
Before investigating the other webapp I decided to start a dir scan on the 80 port.
gobuster dir -u ip-adress /w directory-list-2.3-medium.txt

While this is running let's check out the webapp on port 8080.
Investigating the app op port 8080
On port 8080 we find an OpenPLC portal running, we see a login and a release number. The first logical step is to search for the default credentials, openplc:openplc in this case. No luck, I tried a few other obvious combinations but got nothing. Next I decided to check ExpoitDB to see if the release number was a hint for an obvious exploit. No low hanging fruit there either. Time for another dir scan, this time on port 8080.
gobuster dir -u http://ip-adress:8080 /w directory-list-2.3-medium.txt
OpenPLC login page
Pivot to port 1880
On this port we find an interface for an application called Node-RED, some internet searches later we learn that Node-RED is a Low-code programming for event-driven applications useful for everyone From home hobbyists to large scale industrial operations. We also learn that Node-RED can easily be misconfigured. Not uncommon for applications that cater to "No-Code". Let's start another dir scan.
gobuster dir -u http://ip-adress:1880 /w directory-list-2.3-medium.txt
Node Red interface
Dir scan results
The gobuster scans finished while we were investigating all the interfaces. Lets go check their results.
Port 80
Returned a single result for /console. While this initially sounds promising, it does not lead to anything.
Port 8080
Returned quite a few results, however all but the login page returns a 302, temporary redirect, response.
Port 1880
This scan also returned quite a few results, I started testing results from the top to the bottom. Focussing on the 200 results. Many of these simply returned .json data meant to be used by the dashboard.
Settings json on the settings url
Another dead end?
I'll have to admit that at this point I thought I had hit another dead end. I was chasing all kinds of rabbit holes. Attempting to copy node ids into
/nodes/$node_id
, running the dir scan with another wordlist, and searching for potential exploits on Node-RED and OpenPLC.

This challenge was marked as an easy one, that made it unlikely that it would require some advanced exploit. It finally clicked when I looked at the gobuster results again and realized that a 301 redirect is not a 302 redirect. The 301 is a permanent redirect, I started trying checking these results as well. Suddenly I was shown a screen with two toggles that I could control. I turned them both off and..
OT Node-RED Dashboard
We're inShowing the gate has opened
Conclusion
Fun room that should have taken less than an hour but ended up teaching me a lesson in "Keep It Simple, Stupid". It would have only taken me a few second to check any dir returned from Gobuster regardless of the status just to see what the response actually was. Writing down my findings during this challenge did end up helping me later in another OT challenge.

Sadly I was only able to spent a few hours on this CTF, still as a solo team in my first cybersecurity CTF I managed to place 607th out of 6051 teams. Looking forward to redo some of the challenges once they are rereleased.