TryHackMe: Biohazard
This write-up documents a complete walkthrough of the Biohazard CTF challenge. It integrates the detailed steps from the reference HTML write-up (originally from the Bio-hazard TryHackMe page) with my own investigation, notes, and captured artifacts. It explores each phase in sequence reconnaissance, enumeration, exploitation, and **privilege escalation alongside captured flags, passwords, tools, and decryption paths.
🕯️ The Biohazard – CTF Write-up
Created: August 3, 2025 3:27 AM Status: Done
1. Reconnaissance & Initial Access
1.1. Nmap Scan
1
2
nmap -sC -sV -p- ctf.thm
- Ports:
21/tcp- FTP (Login required)80/tcp- HTTP (Web application)
1.2. Web Enumeration
- Navigated to
http://ctf.thmand found a mansion-themed homepage. -
Page source revealed several accessible room paths:
1 2 3 4 5 6 7 8 9 10 11
/diningRoom/ /teaRoom/ /artRoom/ /barRoom/ /diningRoom2F/ /tigerStatusRoom/ /galleryRoom/ /studyRoom/ /armorRoom/ /attic/ - A clue from
Look like a map.txtpointed toward/teaRoom/.
2. Exploring Rooms and Gathering Flags
2.1. Tea Room Clue
The file provided the following encoded text:
1
2
SG93IGFib3V0IHRoZSAvdGVhUm9vbS8=
Decoding via base64:
1
2
3
echo "SG93IGFib3V0IHRoZSAvdGVhUm9vbS8=" | base64 -d
# How about the /teaRoom/
2.2. /teaRoom/ Flags
Visiting http://ctf.thm/teaRoom/ revealed several in-game items/flags:
emblem{fec832623[REDACTED]4fe1821d58727}lock_pick{037b3[REDACTED]916a9abf99129c8e1837}blue_jewel{e1d457e9[REDACTED]3ec7bc475d48aa}music_sheet{362d7[REDACTED]c63daece6a1f676e}gold_emblem{58a8[REDACTED]a4e38d02a4d7ff4843}shield_key{48a7[REDACTED]7eb89f0a062590798cbac}
3. Puzzle in Dining Room
Visiting /diningRoom/emblem_slot.php, a message was presented:
1
2
klfvg ks r wimgnd biz mpuiui ulg fiemok tqod. Xii jvmc tbkg ks tempgf tyi_hvgct_jljinf_kvc
This is a Caesar cipher (ROT13). Decrypting it:
1
2
xysit xf e jvzqat ovm zchvhf hytr svrzbx gd bqd
The message instructs collecting four “crests,” each encoded differently.
4. Crest Collection and Decoding
Crest 1 (Base64)
1
2
S0pXRkVVS0pKQkxIVVdTWUpFM0VTUlk9
Decoded twice:
1
2
KJWFUEKJBLHUWSYJE3ESRY=
Crest 2 (Base32)
1
2
GVFW[REDACTED]TCILE4DKY3DNN4GQQRTM5AVCTKE
Double-decoded → usable key string.
Crest 3 (Binary)
A long binary string was found and converted using:
1
2
echo "<binary>" | perl -lpe '$_=pack"B*",$_'
Resulting Base64 then decoded to obtain a string.
Crest 4 (Base62)
1
2
gSUE[REDACTED]yPpuYz66JDmRTbJubaoArM6CAQsnVwte6zF9J4GGYyun3k5qM9ma4s
Double-decoded to reveal login credentials (FTP).
Combined Result:
1
2
RlRQIHVzZXI6IGh1bnRlciw[REDACTED]M6IHlvdV9jYW50X2hpZGVfZm9yZV9mb3JldmVy
Base64 decoded:
1
2
3
FTP user: hunter
FTP pass: you_ca[REDACTED]_forever
5. FTP Enumeration
Used the credentials:
1
2
3
4
ftp ctf.thm
Name: hunter
Password: you_ca[REDACTED]de_forever
Files Found:
001-key.jpg002-key.jpg003-key.jpghelmet_key.txt.gpgimportant.txt
All were downloaded for local analysis.
6. Steganography & Image Metadata
Analyzed JPGs using exiftool:
002-key.jpg:
- Comment:
5fYmVfZGVzdHJveV9→_be_destroy_
Combined from all images:
1
2
plant42_can_be_d[REDACTED]y_with_vjolt
This is later used as the key for Vigenère cipher.
7. GPG Decryption
Decrypted:
1
2
gpg -d helmet_key.txt.gpg
Result:
1
2
helmet_key{458493193501d[REDACTED]e727f8db4b}
8. Vigenère Cipher Decryption
Used provided script (vigenere_decrypt.py) and content in important.txt.
- Key:
plant42_can_be_destroy_with_vjolt - Resulted in path to:
1
2
/hiddenCloset8997e740cb7f5cece994381b9477ec38/MO_DISK1.txt
Navigated and retrieved MO Disk 1.
9. Access via SSH
Disks (MO_DISK1.txt, etc.) hinted toward:
1
2
3
SSH user: umbrella_guest
Password: T_virus_rules
Logged in:
1
2
ssh umbrella_guest@ctf.thm
~/.jailcell/chris.txt:
Found hint: “albert” — used as password for su.
10. Privilege Escalation
Switched to user:
1
2
3
su weasker
Password: stars_mem[REDACTED]re_my_guinea_pig
Checked permissions:
1
2
3
sudo -l
# (ALL : ALL) ALL
Escalated to root:
1
2
sudo su
11. Final Flag
Accessed root flag at /root/root.txt:
1
2
flag: 3c5794a00dc[REDACTED]6571edf3bf
🎯 Summary of Captured Flags
| Area | Flag/Item |
|---|---|
| Tea Room Items | emblem{fec8326[REDACTED]20bf4fe1821d58727} |
lock_pick{037b35[REDACTED]abf99129c8e1837} |
|
blue_jewel{e1d457e96cac[REDACTED]63ec7bc475d48aa} |
|
music_sheet{362d72de[REDACTED]3daece6a1f676e} |
|
gold_emblem{58a8c41a9d08[REDACTED]02a4d7ff4843} |
|
shield_key{48a7a9227cd7eb[REDACTED]0798cbac} |
|
| GPG Decryption | helmet_key{458493193501d[REDACTED]27f8db4b} |
| FTP Credentials | hunter / you_c[REDACTED]t_hide_forever |
| Vigenère Key | plant42_can_be_d[REDACTED]y_with_vjolt |
| SSH Credentials | umbrella_guest / T_virus_rules |
| Root Password Hint | su weasker (password: albert) |
| Final Root Flag | 3c5794a00[REDACTED]96571edf3bf |
Conclusion
The “Nightmare” CTF was an immersive and well-crafted multi-stage challenge, combining:
- Web enumeration
- Cipher puzzles
- Steganography
- Realistic filesystem interaction
- FTP & SSH access chaining
- Root privilege escalation
