# GhostLabs — COLD BOOT ATTACK :: Write-up

> ⚠️ SPOILER — Lee esto solo después de intentar resolver el lab.

---

## Objetivo

Recuperar los tres fragmentos de la flag embebidos en volcados de memoria y ensamblarlos manualmente.

---

## Información del lab

| Campo       | Valor                                      |
|-------------|--------------------------------------------|
| Dificultad  | Media (3 pts)                              |
| Servicios   | Web (puerto 8080)                          |
| Acceso      | Sin credenciales (servicio web público)    |
| Vectores    | Enumeración web → análisis forense de memoria |
| Herramientas | nmap, wget, strings, hexdump              |

---

## ¿Qué es un Cold Boot Attack?

Un **Cold Boot Attack** es una técnica de ataque físico que aprovecha que los módulos de RAM retienen su contenido durante unos segundos (o minutos) después de apagar el equipo. Un atacante puede reiniciar el sistema con un SO desde un USB y volcar el contenido de la RAM antes de que se borre, recuperando claves de cifrado, contraseñas o datos sensibles.

Este lab simula esa situación: el sistema sufrió un apagado inesperado y el SO preservó automáticamente tres volcados de memoria. Parte de la flag quedó fragmentada en esos dumps.

---

## Flujo de ataque

```
nmap → descubrir Web (8080)
  ↓
http://<LAB_IP>:8080/ → WARNING de apagado inesperado → referencia a /debug/
  ↓
http://<LAB_IP>:8080/debug/ → lista coredump.1, .2, .3
  ↓
wget coredump.1 → strings → fragmento 1
wget coredump.2 → hexdump -C → fragmento 2
wget coredump.3 → strings → fragmento 3
  ↓
Ensamblar la flag
```

---

## Paso 1 — Reconocimiento

```bash
nmap -sV -p 8080 <LAB_IP>
```

```
PORT     STATE SERVICE VERSION
8080/tcp open  http    SimpleHTTP/0.6 Python/3.9
```

Accedemos al servicio web en el navegador o con curl:

```bash
curl http://<LAB_IP>:8080/
```

La página muestra un monitor de temperatura de CPU con una advertencia:

```
⚠ WARNING: Abnormal shutdown detected on last boot
  Memory integrity check: FAILED
  3 core dumps preserved → /debug/
```

---

## Paso 2 — Descubrimiento de los volcados

Accedemos al directorio de debug:

```bash
curl http://<LAB_IP>:8080/debug/
```

Vemos listados tres ficheros:

```
coredump.1   200 KB   application/octet-stream
coredump.2   200 KB   application/octet-stream
coredump.3   200 KB   application/octet-stream
```

Los descargamos todos:

```bash
wget http://<LAB_IP>:8080/debug/coredump.1
wget http://<LAB_IP>:8080/debug/coredump.2
wget http://<LAB_IP>:8080/debug/coredump.3
```

---

## Paso 3 — Análisis de coredump.1 con strings

`strings` extrae todas las cadenas de texto imprimibles de un fichero binario (mínimo 4 caracteres consecutivos por defecto).

```bash
strings coredump.1
```

Entre el ruido de strings del sistema (rutas de librerías, mensajes del kernel) encontramos:

```
GhostLabs{c0ld_
```

> Este es el primer fragmento de la flag.

---

## Paso 4 — Análisis de coredump.2 con hexdump

```bash
strings coredump.2
```

No aparece ningún fragmento de la flag. El fragmento está almacenado con un byte `\x00` entre cada carácter, por lo que `strings` no lo detecta (necesita caracteres imprimibles consecutivos).

Usamos `hexdump -C` para ver el volcado hexadecimal con la columna ASCII:

```bash
hexdump -C coredump.2 | grep -A3 "62 00 30"
```

O buscamos directamente por el patrón visual en la columna derecha:

```bash
hexdump -C coredump.2 | less
```

En la columna ASCII de la derecha verás algo como:

```
00012f00  62 00 30 00 30 00 74 00  5f 00 6d 00 33 00 6d 00  |b.0.0.t._.m.3.m.|
00012f10  30 00 72 00 79 00 5f 00  00 00 00 00 00 00 00 00  |0.r.y._......... |
```

Los puntos (`.`) son los bytes `\x00`. Leyendo solo los bytes imprimibles de la columna derecha:

```
b00t_m3m0ry_
```

> Este es el segundo fragmento de la flag.

---

## Paso 5 — Análisis de coredump.3 con strings

```bash
strings coredump.3
```

Entre los strings de ruido encontramos:

```
f0r3ns1cs}
```

> Este es el tercer fragmento de la flag.

---

## Paso 6 — Ensamblado de la flag

Concatenamos los tres fragmentos en orden:

| Origen | Fragmento |
|--------|-----------|
| coredump.1 | `GhostLabs{c0ld_` |
| coredump.2 | `b00t_m3m0ry_` |
| coredump.3 | `f0r3ns1cs}` |

```
GhostLabs{c0ld_b00t_m3m0ry_f0r3ns1cs}
```

---

## Referencia rápida de herramientas

### strings

Extrae cadenas de texto imprimibles de ficheros binarios.

```bash
strings <fichero>           # mínimo 4 chars consecutivos (defecto)
strings -n 6 <fichero>      # mínimo 6 chars
strings <fichero> | grep -i ghost   # filtrar por palabra clave
```

### hexdump -C

Muestra el fichero en hexadecimal con la representación ASCII a la derecha. Los bytes no imprimibles aparecen como `.`.

```bash
hexdump -C <fichero>        # volcado completo
hexdump -C <fichero> | less # paginar resultado
hexdump -C <fichero> | grep "patrón"
```

La columna derecha es clave cuando el dato está entremezclado con bytes nulos — `strings` lo ignora pero `hexdump -C` lo muestra visualmente.

---

## Remediación

- Nunca exponer endpoints de diagnóstico (`/debug/`, `/status/`, `/admin/`) sin autenticación
- Los volcados de memoria pueden contener credenciales, claves y datos sensibles — nunca almacenarlos en rutas accesibles desde la web
- Cifrar el disco evita que un Cold Boot Attack real recupere datos útiles tras el volcado de RAM

---

## Recursos

- [Wikipedia — Cold Boot Attack](https://en.wikipedia.org/wiki/Cold_boot_attack)
- `man strings`
- `man hexdump`

---

*GhostLabs — red team operations :: offensive security*
*www.unfantasmaenelsistema.com*
