Resolución del CTF Conexión Perdida
🧩 Estructura del reto

🧪 PASO 1: Extraer la clave oculta de imagen.jpg
Esta imagen contiene la clave lavida3nroja escondida con steghide.
Ejecuta:
steghide extract -sf imagen.jpg -p invisible
📥 Resultado esperado:
wrote extracted data to "clave.txt"
Verifica:
cat clave.txt
Debería mostrar:

✅ Ya tienes la clave original (clave1).
🔓 PASO 2: Desencriptar dump.txt (User Flag)
Crea el siguiente script: descifrar_user.py
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64
# Leer el contenido cifrado
with open("dump.txt", "r") as f:
data_b64 = f.read()
data = base64.b64decode(data_b64)
iv = data[:16]
ciphertext = data[16:]
# Clave obtenida de la imagen
key = b"lavida3nroja____" # 16 bytes
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)
print("🧑💻 User Flag:", plaintext.decode())
Ejecuta:
python3 descifrar_user.py
📥 Resultado esperado:

🧑💻 User Flag: THL{conexion_interceptada_correctamente}
🔐 PASO 3: Derivar nueva clave y descifrar root_dump.dat
La rootflag está cifrada con AES usando una clave derivada con SHA-256 de "la".
Crea el siguiente script: descifrar_root.py
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from hashlib import sha256
import base64
# Leer root_dump.dat
with open("root_dump.dat", "r") as f:
data_b64 = f.read()
data = base64.b64decode(data_b64)
iv = data[:16]
ciphertext = data[16:]
# Derivar clave desde clave1 ("la")
key = sha256(b"lja").digest()[:16]
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)
print("🛡️ Root Flag:", plaintext.decode())
Ejecuta:
python3 descifrar_root.py
📥 Resultado esperado:

🛡️ Root Flag: THL{control_to}
✅ Resumen
| Flag | Archivo | Clave usada | Cómo obtenerla |
|---|---|---|---|
| Userflag | dump.txt | lavida____ | Extraída desde imagen.jpg con steghide |
| Rootflag | root_dump.dat | SHA256(«lavida3nroja»)[:16] | Derivada desde la clave anterior |
