Misc
Sanity Check
Third part of the flag - Badge to Breach: ICS Cyber Siege!

Second part of the flag - ass1gnrol3s

First part of the flag - re4dtherules

flag prelim{re4dtherules_ass1gnrol3s_Badge to Breach: ICS Cyber Siege!}
Forensic
[0] - Forensic Sanity Check
We were first given a linux server image webserver_image.img that was compromised by a threat actor.
The first flag is located inside the gdrive link that provides the server image. https://drive.google.com/drive/folders/1WVtgX9iRCgv20AhcITdq_s3F9kF64MKw

flag prelim{warming_up_your_forensics_skills_for_real}
[1] - Initial vector
Next task is to identify the CVE used by the attacker to gain initial access to the server and the file that has been dropped by the attacker using the PoC.
Logically, since the attacker most likely gain foothold via the web service, we can take a look at the /var/log/apache2/access.log to identify their activities.
A review of the access.log indicates that the website is most likely running WordPress due to the presence of /wp-admin endpoint.

Moreover, after analyzing the disk image using FTK imager the location of the web service directory /var/www/html/ also verifies that it is indeed running WordPress

Identifying CVE
WordPress is famous for its plugins that everyone can use. However, outdated plugins often have security vulnerabilities.
Taking a look inside /var/www/html/wp-content/plugins/ this website is using 4 different plugins and one of them is forminator.

Looking at the content of forminator.php it is stated that it is running on version 1.24.6, which is vulnerable to CVE-2023-4596.

Understanding the PoC
- File Upload Bypass: Attacker uploads PHP file through vulnerable
postdatafield - Extension Validation Bypass: Malicious files bypass file type restrictions
- Code Execution: Uploaded PHP shell allows remote command execution
To find out if the attacker is using this specific PoC we can analyze all of the previous file that has been uploaded to the website which can be located at /var/www/html/wp-content/uploads/.
Here the threat actor dropped multiple malicious file into the website in /var/www/html/wp-content/uploads/2025/03 and /var/www/html/wp-content/uploads/2025/06 directory.

In /var/www/html/wp-content/uploads/2025/06 is where the threat actor managed to gain foothold by uploading webshell istockphoto-1327339401-612x612-2-300x150.php.
flag prelim{CVE-2023-4596_6abb43dc87e07140ba94beafda03baad}
[5] - Persistent (Unintended)
Apart from plugins, during the enumeration phase we suspected that one of the WordPress themes might be using an outdated version.

Analyzing one of the themes twentytwentyfour there is theme.php file that contains a pastebin url.
Visiting the url gave us the flag.
flag prelim{b4yuf3dr4_m1n1_web5h3ll_p3rs15t3nt}
Web
Baby Web
The Vulnerability - Type Confusion
Code expects query as a string but Express.js body parser converts query[] into an array, causing security bypass.
Vulnerable Code
1 | const query = req.body.query; // Can be string OR array |
Exploit Script
1 | #!/usr/bin/env python3 |
flag prelim{i_was_confused_ab_what_to_make--so_i_made_a_js_type_confusion_baby_challenge_ehhe}
Notesafe: Trust Issues
Looking at the file structure of this challenge it looks it is ASP.NET Core web application, due to the presence of Microsoft.AspNetCore.Authentication.JwtBearer.dll file
1 | C:. |
Another useful information is that the flag is located at root and apart from that, we discovered that there are custom classes being integrated into the web application which is compiled into NoteSafe.dll
To get our hands into the classes, we can decompile it using https://www.decompiler.com/. After we managed to decompile it here is the vulnerable classes available inside it.
1 | NoteSafe.Helpers |
1. FilesController.cs - Directory Traversal in File Listing
1 | // Vulnerable endpoint in FilesController.cs |
Request: GET /api/files/list?folder=../
Response:
1 | { |
2. JsonHelper.cs - Unsafe Deserialization
1 | TypeNameHandling = (TypeNameHandling)3, // TypeNameHandling.All |
Why vulnerable: Allows $type attacks to create any .NET class
3. FileSystemService.cs - Dangerous Getter
1 | public string FileContents |
Why vulnerable: Property getter performs file I/O operations
Request:
1 | POST /api/notes |
Response:
1 | Invalid object type. Debug info: |
Complete Attack Flow:
Register a new account -> Login -> directory traversal → Discover flag filename → JSON deserialization → File read gadget → Extract Flag
Exploit Script
1 | import requests |
flag prelim{buzzw0rd5_4r3_n0t_3ncrypt10n}