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
postdata
field - 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}