TryHackMe : Silver Platter

I recently completed the Silver Platter room on TryHackMe, and while it’s tagged as “Easy,” it definitely had its moments. What started out as routine enumeration turned into a lesson in logic flaws, persistence, and the value of reading CVEs carefully.

Initial Recon

Running rustscan gave me a few open ports :

rustscan -a 10.10.137.83 -r 1-65535
.----. .-. .-. .----..---.  .----. .---.   .--.  .-. .-.
| {}  }| { } |{ {__ {_   _}{ {__  /  ___} / {} \ |  `| |
| .-. \| {_} |.-._} } | |  .-._} }\     }/  /\  \| |\  |
`-' `-'`-----'`----'  `-'  `----'  `---' `-'  `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: https://discord.gg/GFrQsGy           :
: https://github.com/RustScan/RustScan :
 --------------------------------------
Please contribute more quotes to our GitHub https://github.com/rustscan/rustscan

[~] The config file is expected to be at "/home/kali/.rustscan.toml"
[!] File limit is lower than default batch size. Consider upping with --ulimit. May cause harm to sensitive servers
[!] Your file limit is very small, which negatively impacts RustScan's speed. Use the Docker image, or up the Ulimit with '--ulimit 5000'. 
Open 10.10.137.83:22
Open 10.10.137.83:80
Open 10.10.137.83:8080
[~] Starting Script(s)
[>] Script to be run Some("nmap -vvv -p {{port}} {{ip}}")

[~] Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-07-14 23:22 IST
Initiating Ping Scan at 23:22
Scanning 10.10.137.83 [4 ports]
Completed Ping Scan at 23:22, 0.26s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 23:22
Completed Parallel DNS resolution of 1 host. at 23:22, 1.03s elapsed
DNS resolution of 1 IPs took 1.04s. Mode: Async [#: 1, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 23:22
Scanning 10.10.137.83 [3 ports]
Discovered open port 8080/tcp on 10.10.137.83
Discovered open port 22/tcp on 10.10.137.83
Discovered open port 80/tcp on 10.10.137.83
Completed SYN Stealth Scan at 23:22, 0.28s elapsed (3 total ports)
Nmap scan report for 10.10.137.83
Host is up, received reset ttl 60 (0.21s latency).
Scanned at 2025-07-14 23:22:55 IST for 0s

PORT     STATE SERVICE    REASON
22/tcp   open  ssh        syn-ack ttl 60
80/tcp   open  http       syn-ack ttl 60
8080/tcp open  http-proxy syn-ack ttl 59

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 1.81 seconds
           Raw packets sent: 7 (284B) | Rcvd: 4 (172B)
  • 22 (SSH)
  • 80 (HTTP)
  • 8080 (HTTP Proxy)

A classic start. I dove into port 80 first, hoping to find something useful.


Exploring Port 80: Mostly Static, Some Hints

Using gobuster and dirbuster, I found the usual suspects like /assets/, /images/, and an index.html. Nothing fancy.

dirbuster 
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Starting OWASP DirBuster 1.0-RC1
Starting dir/file list based brute forcing
Dir found: / - 200
Dir found: /images/ - 403
Dir found: /assets/ - 403
Dir found: /assets/js/ - 403
File found: /assets/js/jquery.min.js - 200
File found: /assets/js/browser.min.js - 200
File found: /assets/js/breakpoints.min.js - 200
File found: /assets/js/main.js - 200
File found: /assets/js/util.js - 200
gobuster dir -u http://10.10.137.83 -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -t 60
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.137.83
[+] Method:                  GET
[+] Threads:                 60
[+] Wordlist:                /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/assets               (Status: 301) [Size: 178] [--> http://10.10.137.83/assets/]
/images               (Status: 301) [Size: 178] [--> http://10.10.137.83/images/]
/index.html           (Status: 200) [Size: 14124]
Progress: 4734 / 4735 (99.98%)
===============================================================
Finished
===============================================================

Here’s what we’ve found till now….

FindingInsight
/contactContains clue about a user: scr1ptkiddy
Mention of SilverpeasPotential target application; user enumeration or misconfig could lead to RCE
Form doesn’t submit anywhereLikely static or dummy
POST not allowedConfirms nothing handled server-side at root
No dynamic JS / fetchNo JS-based submission
Gobuster outputOnly /images/ and /assets/ — no auth, login, or dynamic dirs

But then I stumbled on a subtle clue inside the /contact page: a username, scr1ptkiddy.

No login form or dynamic interaction here, everything seemed static. Even POST requests were being rejected. Looked like a dead end


Digging Deeper: Silverpeas

After exhausting directory scans, I focused on port 8080, which turned out to be hosting the Silverpeas application.

gobuster dir -u http://10.10.137.83:8080/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -t 60
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.137.83:8080/
[+] Method:                  GET
[+] Threads:                 60
[+] Wordlist:                /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/console              (Status: 302) [Size: 0] [--> /noredirect.html]
/console/base/config.json (Status: 302) [Size: 0] [--> /noredirect.html]
/console/payments/config.json (Status: 302) [Size: 0] [--> /noredirect.html]
/website              (Status: 302) [Size: 0] [--> http://10.10.137.83:8080/website/]
Progress: 4734 / 4735 (99.98%)
===============================================================
Finished
===============================================================

What we found till now is summarized here →

PathResponseNotes
/console302 → /noredirect.htmlLikely protected
/console/base/config.json302 → /noredirect.htmlSensitive path
/website/403 ForbiddenExists but access restricted
Port 8080Serves app with auth/redirection control
No access via headers or host manipulation✅ Tried all relevant tricks
whatwebNot much info (probably custom or Java-based)

Testing for SilverPeas

URL TestedResultNotes
/silverpeas302 FoundRedirects to /silverpeas/ – good indicator! ✅
/services, /RssService, /website/login, etc.404 Not FoundNot available, might not be deployed or renamed
/website/modules/jsp/preview_jsp.jsp404 Not FoundEndpoint doesn’t exist, might be a different structure

Scanning for any SilverPeas directory….
gobuster revealed the /silverpeas/ directory, which redirected me to a login page.

http://10.10.137.83:8080/silverpeas/http://10.10.137.83:8080/silverpeas/defaultLogin.jsp

Perfect – finally something dynamic!!!

I hit it with hydra and several password lists (rockyou, xato, etc.), but nothing worked. Stuck again.

This is where I cheated a bit. I checked out a write-up, and learned the app was vulnerable to CVE-2024-36042, a logic flaw where removing the password parameter entirely from a POST request allows a user to log in.

Yep, you read that right. No brute-force needed. Just drop the password field.

Logged in as scr1ptkiddy, grabbed the API token, and explored the app further.

From scr1ptkiddy’s token, I pivoted to other users within the app, testing the same login bypass technique. It worked again…..even for users with higher privileges like Manager and Tyler.

tim@silver-platter:/var/log$ grep -iR tyler

Using these creds to login as Tyler and then escalating to root


Silver Platter might be labeled “easy,” but it was a great reminder of how simple logic bugs can have massive security implications. Forget brute-forcing and fuzzing for a second, sometimes, it’s about understanding how a web app handles (or mishandles) its inputs.

Key takeaway: Always read CVEs. Sometimes the smallest clue can save you hours of rabbit holes.

Feel free to follow along or reach out if you want to try some other room together like this room too!

If you’re as passionate about Cyber-Security as I am, feel free to follow me on Twitter – @shrisec for the latest updates and connect with me on LinkedIn – Aditya Narayan to stay in the loop with my posts and insights in the upcoming projects and CTF writeups.
Let’s continue this fascinating journey together!

Leave a Reply

Your email address will not be published. Required fields are marked *