---
# System prepended metadata

title: Hack The Boo 2025
tags: [CTF Writeup]

---

# Hack The Boo 2025 - Competition

**Note:** I'm not a native English speaker so my English is not good, please feedback to me if my wu have any mistake.

## When The Wire Whispered
> Brynn’s night-threads flared as connections vanished and reappeared in reverse, each route bending back like a reflection misremembered. The capture showed silent gaps between fevered bursts—packets echoing out of sequence, jittering like whispers behind glass. Eira and Cordelia now sift the capture, tracing the pattern’s cadence to learn whether it’s mere corruption… or the Hollow King learning to speak through the wire. Note: Make sure you are using Wireshark v4.6.0+ Note2: Use PyRDP *git* version
> Difficult: Medium

There are the pcap file, PASSWORDS.TXT, USERS.TXT and tls key log file.

### What is the username affected by the spray?

Open the pcap file to analysis(Use tls key to decrypt tls). Overview of this, there are a lot of packet RDP(Remote Desktop Protocol), view the Graph:

![image](https://hackmd.io/_uploads/Skorkm6Alx.png)

After this:
![upload_c59556abfe8e731f258a5a37227d3941](https://hackmd.io/_uploads/BkGglmT0xe.png)

I things maybe attacker was successed bruteforce to remote to victim desktop and try to mark data for victim, check it.
![image](https://hackmd.io/_uploads/BJHOxQTAeg.png)
**negResult: accept-completed**

**Answer: stoneheart_keeper52**

### What is the password for that username

In the image pcap of Q1, we can see it authenticate by CredSSP/NTLM.
How CredSSP/NTLM works:

![image](https://hackmd.io/_uploads/HJLmEQaReg.png)
![image](https://hackmd.io/_uploads/ryH7BQTCxx.png)
It's NTLMv2.
We can crack the password by hashcat mode 5600(NTLMv2) with wordlist PASSWORD.TXT that author give. 
This is format of mode 5600:
``USERNAME::DOMAIN:SERVER_CHALLENGE:NTPROOFSTR:BLOB``

That ``NTPROOFSTR`` is first 16 bytes and ``BLOB`` is the rest of ``NTLMv2 Response``.

This is the hash:
```
stoneheart_keeper52::DESKTOP-6NMJS1R:378e0e0b4a481c08:460120880eecc460649883618863cea1:010100000000000060a10ae3f541dc01e803174c6a90ce7e0000000002001e004400450053004b0054004f0050002d0036004e004d004a0053003100520001001e004400450053004b0054004f0050002d0036004e004d004a0053003100520004001e004400450053004b0054004f0050002d0036004e004d004a0053003100520003001e004400450053004b0054004f0050002d0036004e004d004a0053003100520007000800379915e3f541dc0109004e007400650072006d007300720076002f004400450053004b0054004f0050002d0036004e004d004a0053003100520040004400450053004b0054004f0050002d0036004e004d004a005300310052000000000000000000
```

![image](https://hackmd.io/_uploads/HyeorX6Ceg.png)

**Answer: Mlamp!J1**

### What is the website the victim is currently browsing. (TLD only: google.com)

Now, to know what website the victim is currently browsing, we only view the replay of desktop victim when attacker connect to it. And I will use **PyRDP** for it.

Link to download: https://github.com/GoSecure/pyrdp

![image](https://hackmd.io/_uploads/B1eVvQTAxg.png)

We need a .pyrdp file to use this command.

![image](https://hackmd.io/_uploads/ryuUvX6Cxg.png)

Nice, there are instructions for use in that github.

Now, we extract PDUs Layer 7 and filter 2 IP `192.168.56.1` and `192.168.56.102` to a pcap file.
After that, use pyrdp-convert to convert .pcap to .pyrdp and use pyrdp-player to watch the replay desktop.

![image](https://hackmd.io/_uploads/SkfHOQ6Cle.png)

**Answer: thedfirreport.com**

### What is the username:password combination for website `http://barrowick.htb`

Continue to watch the replay, and we can see attacker open cmd and paste a ps1 code to copy the imformation about browser of victim to clipboard, and **pyRDP** is too strong, that can record the data when copy to clipboard. Easily, I just view that data and have the answer.

![image](https://hackmd.io/_uploads/BJJHtmaRxe.png)
![image](https://hackmd.io/_uploads/ryurtXp0gx.png)

```
CLIPBOARD DATA: 

id                     : 2
hostname               : http://brackenrow.htb
formSubmitURL          : 
usernameField          : 
passwordField          : 
guid                   : {8fa8b071-2544-40da-9801-3b67e037a5aa}
encType                : 1
timeCreated            : 1760985367574
timeLastUsed           : 1760985367574
timePasswordChanged    : 1760985367574
timesUsed              : 1
syncCounter            : 1
everSynced             : False
encryptedUnknownFields : MEMEEPgAAAAAAAAAAAAAAAAAAAEwHQYJYIZIAWUDBAEqBBDU35ezznMbDQ4SEQKSGEJ0BBDJgwBqBZrRfOkwppqr4uvX
username               : tallow_keeper
password               : Wax&Whisper_1313

id                     : 3
hostname               : http://hollowmere.htb
formSubmitURL          : 
usernameField          : 
passwordField          : 
guid                   : {f79ade19-f19a-44c2-b4ef-2df810ee66fc}
encType                : 1
timeCreated            : 1760985367584
timeLastUsed           : 1760985367584
timePasswordChanged    : 1760985367584
timesUsed              : 1
syncCounter            : 1
everSynced             : False
encryptedUnknownFields : MEMEEPgAAAAAAAAAAAAAAAAAAAEwHQYJYIZIAWUDBAEqBBBgwy1nFzgBD22mcvG6yPsIBBAR/Xf9kN0EX5qrJynf376U
username               : bone_riddle
password               : Cipher.of.Marrows!

id                     : 4
hostname               : http://oakhurstwatch.htb
formSubmitURL          : 
usernameField          : 
passwordField          : 
guid                   : {ce21b0df-d1bf-473b-ae3c-121655dce4f6}
encType                : 1
timeCreated            : 1760985367592
timeLastUsed           : 1760985367592
timePasswordChanged    : 1760985367592
timesUsed              : 1
syncCounter            : 1
everSynced             : False
encryptedUnknownFields : MEMEEPgAAAAAAAAAAAAAAAAAAAEwHQYJYIZIAWUDBAEqBBAMTSKG67hjRBPvJo6dI64+BBDCI5HcBudCU9rSKU5bY6q2
username               : night_threader
password               : ThreadSight_03$Moon

id                     : 5
hostname               : http://barrowick.htb
formSubmitURL          : 
usernameField          : 
passwordField          : 
guid                   : {23a64d8d-6327-48fd-9042-b4ef6b0acf5d}
encType                : 1
timeCreated            : 1760985367604
timeLastUsed           : 1760985367604
timePasswordChanged    : 1760985367604
timesUsed              : 1
syncCounter            : 1
everSynced             : False
encryptedUnknownFields : MEMEEPgAAAAAAAAAAAAAAAAAAAEwHQYJYIZIAWUDBAEqBBBwdJwssMn5gPitwx8QISEEBBBu/b1b3BL4X0aDv5BjRPn5
username               : candle_eyed
password               : AshWitness_99@Tomb

id                     : 6
hostname               : http://ashforge.htb
formSubmitURL          : 
usernameField          : 
passwordField          : 
guid                   : {7a21c145-a54a-4741-a01f-e1ea0564e165}
encType                : 1
timeCreated            : 1760985367612
timeLastUsed           : 1760985367612
timePasswordChanged    : 1760985367612
timesUsed              : 1
syncCounter            : 1
everSynced             : False
encryptedUnknownFields : MEMEEPgAAAAAAAAAAAAAAAAAAAEwHQYJYIZIAWUDBAEqBBBg7Q9rquK52OAgr3bwdj2WBBCyFMzYg+RcukfrQqPIGLy+
username               : ash_apprentice
password               : IronLock_Breaker42

id                     : 7
hostname               : http://lornmerelocks.htb
formSubmitURL          : 
usernameField          : 
passwordField          : 
guid                   : {f681bc16-b725-464f-b437-715ce03a2a07}
encType                : 1
timeCreated            : 1760985367618
timeLastUsed           : 1760985367618
timePasswordChanged    : 1760985367618
timesUsed              : 1
syncCounter            : 1
everSynced             : False
encryptedUnknownFields : MEMEEPgAAAAAAAAAAAAAAAAAAAEwHQYJYIZIAWUDBAEqBBBUNikG1gk1NXad5luPHCtoBBA1TiOabIpjb/rxTQUj+kat
username               : knot_weaver
password               : RuleBound_7xThorn

id                     : 8
hostname               : http://emberreach.htb
formSubmitURL          : 
usernameField          : 
passwordField          : 
guid                   : {8b9d44a1-93bb-4ac5-bec5-9f5a67b84444}
encType                : 1
timeCreated            : 1760985367631
timeLastUsed           : 1760985367631
timePasswordChanged    : 1760985367631
timesUsed              : 1
syncCounter            : 1
everSynced             : False
encryptedUnknownFields : MEMEEPgAAAAAAAAAAAAAAAAAAAEwHQYJYIZIAWUDBAEqBBDkXuSMkm25zhXrt2ijIMaqBBD2nnQqm7vRhijrm6C5foba
username               : memory_tinker
password               : Reverse.Time_404!
```

**Answer: candle_eyed:AshWitness_99@Tomb**

## Watchtower Of Mists
> The tower’s lens, once clear for stargazing, was now veiled in thick mist. Merrin, a determined forensic investigator, climbed the spiraling stairs of Egrath’s Hollow. She found her notes strangely rearranged, marked with unknown signs. The telescope had been deliberately turned downward, focused on the burial grounds. The tower had been occupied after a targeted attack. Not a speck of dust lay on the glass, something unseen had been watching. What it witnessed changed everything. Can you help Merrin piece together what happened in the Watchtower of Mists?
> Difficult: Easy

There is a pcap file for this challenge.
Preview of this, I think user was use the API of LangFlow to do somethings.

### What is the LangFlow version in use? (e.g. 1.5.7)

![image](https://hackmd.io/_uploads/BygYc7aRex.png)

**Answer: 1.2.0**

### What is the CVE assigned to this LangFlow vulnerability? (e.g. CVE-2025-12345)

![image](https://hackmd.io/_uploads/By0fimTCgg.png)

**Answer: CVE-2025-3248**

### What is the name of the API endpoint exploited by the attacker to execute commands on the system? (e.g. /api/v1/health)

![image](https://hackmd.io/_uploads/rymN27pAel.png)

We can see they are execute the python code in this endpoint.

**/api/v1/validate/code**

### What is the IP address of the attacker? (format: x.x.x.x)

![image](https://hackmd.io/_uploads/B1fm6maCeg.png)
We can see the ip which send the payload to execute.
**Answer: 188.114.96.12**

### The attacker used a persistence technique, what is the port used by the reverse shell? (e.g. 4444)

Decode the last payload and have this:
![image](https://hackmd.io/_uploads/SJLoxEp0le.png)
Continue:
![image](https://hackmd.io/_uploads/HkV2gETRlx.png)

**Answer: 7852**

### What is the system machine hostname? (e.g. server01)

![image](https://hackmd.io/_uploads/r1gRlVpRgg.png)

Decode the payload first:
![image](https://hackmd.io/_uploads/rylMWNTAxe.png)

It print the environment variable and we can see the system machine hostname in the response.

```
{"imports":{"errors":[]},"function":{"errors":["b'TOKENIZERS_PARALLELISM=false\\nHOSTNAME=aisrv01\\nPYTHON_PIP_VERSION=24.0\\nHOME=/app/data\\nLANGFLOW_DATABASE_URL=postgresql://langflow:LnGFlWPassword2025@postgres:5432/langflow\\nLANGFLOW_HOST=0.0.0.0\\nGPG_KEY=7169605F62C751356D054A26A821E680E5FA6305\\nOPENAI_API_KEY=dummy\\nASTRA_ASSISTANTS_QUIET=true\\nLANGFLOW_PORT=7860\\nLANGFLOW_CONFIG_DIR=app/langflow\\nPYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/dbf0c85f76fb6e1ab42aa672ffca6f0a675d9ee4/public/get-pip.py\\nSERVER_SOFTWARE=gunicorn/23.0.0\\nGRPC_VERBOSITY=ERROR\\nPATH=/app/.venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\\nTIKTOKEN_CACHE_DIR=/app/.venv/lib/python3.12/site-packages/litellm/litellm_core_utils/tokenizers\\nLANG=C.UTF-8\\nPYTHON_VERSION=3.12.3\\nPWD=/app\\nPYTHON_GET_PIP_SHA256=dfe9fd5c28dc98b5ac17979a953ea550cec37ae1b47a5116007395bfacff2ab9\\nUSER_AGENT=langflow\\n'"]}}
```

**Answer: aisrv01**

### What is the Postgres password used by LangFlow? (e.g. Password123)

In that response on Q6, we can see the answer for this question.

**Answer: LnGFlWPassword2025**