Bandit Nivel 12 a 13
Nivel del wargame Bandit (OverTheWire) — juego legal y educativo para practicar terminal Linux. Pagina oficial: https://overthewire.org/wargames/bandit/bandit13.html
Este es el nivel mas largo y elaborado de Bandit hasta ahora. No hay un truco unico: hay que combinar varios comandos y repetir un proceso hasta llegar a la password. Es normal sentirse perdido al principio — al final del nivel entenderas por que.
Objetivo
Conectarte como bandit12 y extraer la password de data.txt, que es un hexdump de un archivo que ha sido comprimido varias veces seguidas (capas sobre capas). Cada vez que descomprimes, aparece otro archivo comprimido de distinto tipo, hasta llegar a un archivo de texto plano con la password.
Que aprendes
Comandos principales
| Comando | Para que sirve |
|---|---|
mktemp -d | Crea un directorio temporal unico en /tmp/ |
cp | Copia un archivo |
xxd | Convierte datos binarios a hexdump y viceversa |
xxd -r | Revierte un hexdump: texto hexadecimal → binario original |
file <archivo> | Detecta el tipo real de un archivo (no se fia de la extension) |
mv | Renombra o mueve un archivo |
gzip -d | Descomprime archivos .gz |
bzip2 -d | Descomprime archivos .bz2 |
tar xf | Extrae archivos .tar (empaquetado, no compresion) |
Conceptos clave
Hexdump: representacion textual de datos binarios. Cada byte del archivo original se escribe como dos digitos hexadecimales (00–FF). xxd hace esta conversion y xxd -r la invierte.
Compresion en capas: un archivo puede comprimirse varias veces con algoritmos distintos. Para recuperar el contenido original hay que descomprimir cada capa en orden inverso.
file vs extension: en Linux, la extension de un archivo (.txt, .gz…) es solo cosmética. El comando file lee los primeros bytes del archivo (la “firma magica” o magic bytes) para saber que tipo de datos contiene realmente. Es la herramienta fiable.
Directorio de trabajo en /tmp/: en los niveles de Bandit no tienes permisos de escritura en tu home ni en /. El directorio /tmp/ existe para archivos temporales y cualquier usuario puede escribir ahi.
Paso a paso
1. Conectarte como bandit12
ssh [email protected] -p 2220Introduce la password de bandit12 (la que obtuviste en el nivel anterior).
2. Ver el archivo de partida
ls
cat data.txt | head -5Lo que veras:
0000000: 1f8b 0808 dfcd eb66 0203 6461 7461 322e .......f..data2.
0000010: 6269 6e00 013d 02c2 fd42 5a68 3931 4159 bin..=...BZh91AY
0000020: 2653 59ca 83b2 c100 0017 7fff dff3 f4a7 &SY.............
0000030: fc9f fefe f2f3 cffe f5ff ffdd bf7e 5bfe .............~[.
0000040: fadf e8ed df7f f9fb bfff 6de5 b3f6 ec7e ..........m....~
Esto es el hexdump: columna izquierda = posicion, columna central = bytes en hexadecimal, columna derecha = representacion ASCII (los puntos son bytes no imprimibles). No es el contenido util; es la codificacion del archivo binario original.
3. Crear un directorio de trabajo en /tmp/
No puedes escribir en tu home. Crea un directorio temporal propio:
TMPDIR=$(mktemp -d)
echo $TMPDIRLo que veras (el nombre exacto sera diferente cada vez):
/tmp/tmp.aB3xKq7mNp
mktemp -d garantiza que el nombre no colisiona con nada existente.
4. Copiar data.txt al directorio de trabajo
cp ~/data.txt $TMPDIR/
cd $TMPDIR
lsLo que veras:
data.txt
5. Revertir el hexdump
Convierte el hexdump de vuelta a los bytes binarios originales:
xxd -r data.txt > dataNo veras nada en pantalla (es binario). Comprueba que el archivo se creo:
ls -lhLo que veras:
total 8.0K
-rw-r--r-- 1 bandit12 bandit12 2.5K Jun 14 10:00 data
-rw-r--r-- 1 bandit12 bandit12 2.5K Jun 14 10:00 data.txt
6. El bucle: identificar → renombrar → descomprimir → repetir
A partir de aqui repites siempre la misma secuencia de tres pasos hasta llegar al texto plano. El numero exacto de capas puede variar ligeramente entre ejecuciones del servidor, pero el proceso es identico.
Paso del bucle: identificar con file
file dataEjemplo de salida posible:
data: gzip compressed data, was "data2.bin", last modified: ...
Segun lo que diga file, actuas distinto:
Caso A: gzip (gzip compressed data)
Renombra el archivo con extension .gz y descomprime:
mv data data.gz
gzip -d data.gz
lsLo que veras:
data2.bin
(El nombre puede variar. Renombralo a data para continuar el bucle limpiamente si prefieres, o usa el nombre que aparezca.)
mv data2.bin data
file dataCaso B: bzip2 (bzip2 compressed data)
Renombra con extension .bz2 y descomprime:
mv data data.bz2
bzip2 -d data.bz2
lsEl archivo resultante aparecera sin extension o con otro nombre. Renombralo a data:
# ajusta el nombre al que aparezca en 'ls'
mv data2 data
file dataCaso C: tar (POSIX tar archive o tar archive)
tar no comprime, empaqueta. Extrae su contenido:
mv data data.tar
tar xf data.tar
lsApareceran uno o mas archivos. Identifica cual es el de datos (normalmente data5.bin, data6.bin, etc.) y renombralo:
mv data5.bin data # ajusta el nombre al que aparezca
file dataEjemplo de secuencia completa realista
A continuacion se muestra una sesion de ejemplo con los tipos que suelen aparecer (los nombres exactos los decide el servidor):
# Iteracion 1
file data
# data: gzip compressed data, was "data2.bin"
mv data data.gz && gzip -d data.gz
mv data2.bin data
# Iteracion 2
file data
# data: bzip2 compressed data, block size = 9k
mv data data.bz2 && bzip2 -d data.bz2
mv data2 data
# Iteracion 3
file data
# data: gzip compressed data, was "data4.bin"
mv data data.gz && gzip -d data.gz
mv data4.bin data
# Iteracion 4
file data
# data: POSIX tar archive (GNU)
mv data data.tar && tar xf data.tar
mv data5.bin data
# Iteracion 5
file data
# data: POSIX tar archive (GNU)
mv data data.tar && tar xf data.tar
mv data6.bin data
# Iteracion 6
file data
# data: bzip2 compressed data, block size = 9k
mv data data.bz2 && bzip2 -d data.bz2
mv data6 data
# Iteracion 7
file data
# data: POSIX tar archive (GNU)
mv data data.tar && tar xf data.tar
mv data8.bin data
# Iteracion 8
file data
# data: gzip compressed data, was "data9.bin"
mv data data.gz && gzip -d data.gz
mv data9.bin data
# Iteracion 9
file data
# data: ASCII text
cat data7. Leer la password
Cuando file data diga ASCII text, el proceso termino:
cat dataLo que veras:
The password is <cadena_de_~32_caracteres>
Esa cadena es la password de bandit13. Copiala.
Por que funciona
xxd -r lee el formato que produce xxd (offset + hex + ascii) y reconstruye el binario original byte a byte. Es el inverso exacto de xxd.
file lee los primeros bytes de cada archivo buscando firmas magicas: patrones de bytes que identifican el formato. Por ejemplo, un archivo gzip siempre empieza por 1f 8b; un archivo bzip2 por 42 5a 68 (que en ASCII es BZh). Esto es independiente del nombre o extension del archivo.
Por que renombrar antes de descomprimir: gzip -d y bzip2 -d exigen que el archivo tenga la extension correcta (.gz, .bz2) para trabajar con el. tar es mas flexible pero renombrar ayuda a no perderse.
Por que /tmp/: el enorno Bandit restringe permisos. /tmp/ es el espacio pensado para archivos temporales de sesion, con permisos de escritura para todos los usuarios.
Errores comunes
gzip: data: unknown suffix -- ignored
Olvidaste renombrar el archivo antes de descomprimir. Anadir la extension correcta es obligatorio para gzip y bzip2.
bzip2: Can't guess original name for data.bz2 -- using data.bz2.out
Esto es solo un aviso; el archivo de salida se llamara data.bz2.out. Renombralo a data y sigue.
tar: Refusing to create empty archive
Estas intentando crear un tar en vez de extraer. Usa tar xf (x = extract, f = file), no tar cf.
Permission denied al escribir en ~/
Estas intentando crear archivos fuera de /tmp/. Vuelve a tu directorio temporal: cd $TMPDIR.
Me pierdo con los nombres de archivo
Usa ls despues de cada paso para ver exactamente que archivos existen. Renombra siempre el resultado a data antes de la siguiente iteracion: asi el bucle es uniforme y no te confundes.
file data sigue diciendo el mismo tipo
Probablemente el archivo no se descomprimio bien (error silencioso). Revisa si hay un archivo .out o .bz2.out que no viste.
Pasar al siguiente nivel
Con la password obtenida en cat data, conéctate como bandit13:
ssh [email protected] -p 2220Cuando pregunte la password, pega la cadena de ~32 caracteres que copiaste.
Conexiones
- 00_README — indice general del wargame
- MOC_Ciberseguridad — mapa de contenido de ciberseguridad
- 12-nivel-11-a-12 — nivel anterior
- 14-nivel-13-a-14 — nivel siguiente
Conceptos relacionados para profundizar
- Firmas magicas de archivos (magic bytes): cada formato binario tiene bytes de identificacion al inicio.
- Algoritmos de compresion: gzip usa DEFLATE; bzip2 usa Burrows-Wheeler + Huffman; tar no comprime, solo empaqueta.
- El directorio
/tmp/y permisos en sistemas multiusuario.