🩹Heal

Welcome to another fun-filled journey into the world of insecure enterprise apps. Today’s patient is “Heal” — a misconfigured resume builder So, scrub in — we’re operating without anesthesia.

👋 Hi, I’m Shivam (taauxick)

A curious mind with a keyboard, currently diving deep into the world of ethical hacking and CTFs. I enjoy poking around where I shouldn’t (legally, of course), and turning misconfigurations into opportunities. This writeup walks through my process of breaking into the “Heal” lab — from login to root — with some sarcasm, a bit of bash, and a whole lot of fun.

Check out my portfolio showcasing projects, write-ups, and my journey in cybersecurity:

2. RustScan — Opening the Case

rustscan -a heal.htb -r 1-65535 -- -sV -sT -A

🩻 Output:

  • 22/tcp — SSH

  • 80/tcp — HTTP

Port 80 is always where dreams begin. And where misconfigurations live rent-free.

3. Port 80 — Yet Another Login Page

A Resume-builder-themed web app... with a login form on the main page..

"Security starts with a login box," they said. "We don’t need brute-force protection," they probably also said.

We respectfully ignored it and moved to something juicier.

4. Subdomain Enumeration — DNS: The Gift That Keeps Giving

Fuzzed some subdomains and struck gold:

api.heal.thm

5. Rails + Ruby Version Disclosure — Thanks for the Patch Notes

api.heal.thm was leaking:

  • X-Rails-Version: 7.1.4

  • X-Powered-By: Ruby 3.3.5

That’s not a header. That’s an exploit invitation.

6. Survey Time!

takesurvey.heal.thm had a friendly UI, and a not-so-friendly Export as PDF button.

Clicked it → captured request in Burp Suite → found file path usage.

One thing led to another, and boom...

7. Local File Inclusion (LFI) — Cut Deeper

Tried:

GET /download?filenaem=../../../../../../etc/passwd

✅ Success.

Digging Rails File Structure

Then found a SQLite database file exposed — possibly

If you listen closely, you can hear the Rails server cry.

Got:

  • Username: ralph

  • Hash: stored in bcrypt

Dumped the hash into a .hash file, ran:

hashcat -m 3200 ralph.hash /usr/share/wordlists/rockyou.txt --force

⛏️ Result:

ralph:147258369

They say users are the weakest link. Turns out, so are their passwords.

🧑‍💼 8. Admin Panel Access

Logged in as ralph — now suddenly we’re in the Admin Panel.

Oh, the power. Oh, the exposed forms.

9. LimeSurvey RCE — GitHub Magic

Found this little gem:

Ran the exploit with our creds

💥 Shell as www-data achieved. Patient’s heart rate dropping

10. Looting Files & SSH Login to ron

Started poking around the web directory like a nosey intern.

A plain text password, just lying there. No encryption, no secrets manager, not even a .bak extension to pretend like it was protected.

Only One Patient Left — Ron

There was just one user we hadn’t poked yet. The mysterious, the quiet, the final boss of bad practices...

🧔 ron

So naturally, I did what anyone would do:

ssh ron@heal.thm

🩺 Using the password I found discarded like last week's prescription.

✅ Logged in.

Captured user.txt.

11. Internal Service Hunting with netstat

netstat -tulnp

Too many services to count. But one stood out like a tumor:

So we did what any ethical hacker would do — tunneled it through SSH.

ssh -L 8500:127.0.0.1:8500 ron@heal.thm

Visited: http://localhost:8500 Saw Consul dashboard

12. Consul Exploitation for Root — Straight from ExploitDB

Found the perfect exploit:

🐚 Got root shell.

Mission: successfully violated HIPAA, metaphorically speaking.

13. Final Thoughts — Heal Thyself

This box had more vulnerabilities than a reality TV show contestant.

From LFI to hash leaks, from lazy admin panels to Consul misconfigurations — this was a CTF pentester’s Disneyland.

Last updated