El wargame Bandit, es un juego creado por OverTheWire para principiantes con la finalidad de enseñar lo básico para trabajar en otros wargames.

Es totalmente recomendable participar en este juego, debido que nos permite interiorizarnos con la línea de comandos del OS Linux.

Este juego se encuentra ordenado por niveles y dificultad, permitiendo ir aprendiendo desde lo más básico. Al completar cada nivel, se obtiene un premio conocido como Flag.

El Flag de cada nivel corresponde a la contraseña de acceso al siguiente, por tanto, es recomendable ir en orden para obtenerlas todas.

Este wargame parte en el nivel 0,la que funciona como una introducción al juego.

NOTA: si te encuentras atascado en un reto, y no sabes cómo utilizar un comando, puedes ver su manual a través del comando man (ejemplo: man ssh); también, puedes usar la opción -h o --help (ejemplo: awk -h, awk --help) o buscar en Google.
Además, en cada reto nos indican los comandos que podemos usar para poder resolverlos.

Para ingresar a cada reto, se debe realizar una conexión SSH al hostname bandit.labs.overthewire.org, usando el puerto 2220. Para diferenciar cada reto, va cambiando el número del username, partiendo en bandit0.

Para la conexión se recomienda el uso de la terminal de Linux, o si trabajan en Windows, usar la herramienta PuTTY.

Conexión usando el terminal de Linux

ssh bandit0@bandit.labs.overthewire.org -p 2220
  • En la sección roja de la imagen se define el username
  • Luego del username se escribe un @, para seguir con la sección verde, que corresponde al hostname donde nos conectaremos
  • La sección rosa es para especificar el puerto (es necesaria esta opción, debido que el puerto por defecto de SSH es el 22)
  • Y por último, en la seccion amarilla se indica el password

Como uso Kali Linux para resolver los retos, me gusta usar la herramienta SSHPass, donde se define un archivo con la password al momento de ejecutar SSH, en vez de escribirla cuando me la solicita el prompt:

Instalación de SSHPass en Kali Linux:

apt install sshpass

Uso de SSHPass:

Necesitamos tener un archivo con el texto de la password para ejecutar este comando:

sshpass -p `cat bandit0` ssh bandit0@bandit.labs.overthewire.org -p 2220

Como podemos ver en la imagen, se ejecuta el comando sshpass seguido de la lectura del archivo donde tenemos la password (leído con un cat entre backtick " ` "), continuando con el comando normal de SSH.

Conexión usando PuTTY

Al usar Putty, lo primero que se debe indicar es:

  • Verde: hostname
  • Rosa: puerto
  • Café: protocolo

Luego de ingresar estos parámetros, se da clic en Open, y esto iniciará la conexión SSH. Cuando se inicie la conexión, el servidor nos solicitará ingresar los siguientes datos:

  • Rojo: username
  • Amarillo: password

Soluciones

Solución Bandit 0 > 1

Instrucciones

La password del siguiente reto se encuentra en el archivo readme, situado en el directorio home del usuario con el que nos conectamos.

Comandos recomendados a usar

ls, cd, cat, file, du, find

Solución

Como nos indican que el archivo readme se encuentra en el directorio home de bandit0, nos debemos fijar que en el prompt al conectamos nos aparezca el símbolo de la virgulilla (~). Este símbolo nos indica que estamos en el home del usuario con el cual nos conectamos.

Para revisar los archivos/carpetas que se tienen en este directorio, podemos usar el comando ls, el cual, nos enlista el contenido que esta posee:

Ahora que sabemos que el archivo readme se encuentra realmente en este directorio, usamos el comando cat para poder leer el contenido de este, y obtener la password para el siguiente reto:

Solución Bandit 1 > 2

Instrucciones

La password del siguiente reto se encuentra en el archivo -, situado en el directorio home del usuario con el que nos conectamos.

Comandos recomendados a usar

ls, cd, cat, file, du, find

Solución

Al igual que en el reto anterior, el archivo con la password se encuentra situado en el directorio home.

Si ejecutamos ls al directorio, podemos ver que se encuentra el archivo:

Pero al momento de ejecutar cat, podemos ver que se nos presenta el primer problema:

Cuando hacemos un cat -, vemos que realiza un salto de línea esperando a que ingresemos datos. El símbolo - en Linux corresponde a un STDIN (standard input), el cual, lee la entrada en la consola:

  • El texto rojo es la entrada (ingresado por teclado)
  • El texto en verde es la salida del texto ingresado

Para poder leer los archivos que inician con -, se debe anteponer ./ al nombre de este:

Solución Bandit 2 > 3

Instrucciones

La password del siguiente reto se encuentra en el archivo spaces in this filename situado en el directorio home del usuario con el que nos conectamos.

Comandos recomendados a usar

ls, cd, cat, file, du, find

Solución

Como hemos visto en retos anteriores, usando el comando ls revisamos el contenido del directorio home. Si a este comando le ingresamos la opción -l, podemos ver un formato de listado largo :

Corroboramos que el archivo spaces in this filename existe en el directorio local. Así que, intentaremos leerlo con un cat:

Al hacer el cat se produce un error, debido a que el comando asume que cada palabra del nombre spaces in this filename es un archivo/directorio, y no un archivo único.

Para que bash nos reconozca el nombre de spaces in this filename como un archivo único, debemos escribirlo entre comillas  ("):

Solución Bandit 3 > 4

Instrucciones

La password del siguiente reto se encuentra en un archivo oculto en el directorio inhere.

Comandos recomendados a usar

ls, cd, cat, file, du, find

Solución

Si revisamos el manual de ls usando el comando man ls, podemos ver que este posee la opción -a, la que nos permite ver todos los archivos en un directorio:

Por lo tanto, hacemos un ls al directorio local para ver si se encuentra la carpeta inhere:

Como la carpeta existe, ingresamos a esta usando el comando cd, y vemos todo el contenido de la carpeta:

Los archivos/directorios que inician con un . en Linux se encuentra ocultos.

Para leer los archivos ocultos, se debe mantener el . al momento de usar el cat:

Solución Bandit 4 > 5

Instrucciones

La password del siguiente reto se encuentra en un archivo dentro del directorio inhere, y es el único archivo que puede ser leído por un humano.

Comandos recomendados a usar

ls, cd, cat, file, du, find

Solución

Al igual que en retos anteriores, usamos ls para ver el contenido del directorio actual, y cd para cambiar de directorio:

Revisamos el contenido de la carpeta, y vemos que hay 10 archivos que inician con -:

Según las instrucciones, debemos identificar que archivo lo pueda leer un humano. Para esto, usamos el comando file, el cual, permite determinar el tipo de archivo. El símbolo *, corresponde a una wildcard, lo que nos permite aplicar el comando file a todos los archivos. Como todos los archivos inician con -, usamos el ./:

El resultado del comando nos indica que el archivo -file07 es texto ASCII, por lo tanto podemos leerlo sin problemas con un cat:

Solución Bandit 5 > 6

Instrucciones

La password del siguiente reto se encuentra en un archivo dentro del directorio inhere, y este archivo tiene las siguientes características:

  • Puede ser leído por un humano
  • Pese 1033 bytes
  • Que no sea ejecutable

Comandos recomendados a usar

ls, cd, cat, file, du, find

Solución

Revisamos que el directorio inhere exista, ingresamos a el y volvemos a validar que posee:

Vemos que la carpeta inhere contiene solo carpetas (debido que todos poseen una d en la sección de los permisos), debemos buscar en cada una de ellas un archivo con las indicaciones dadas.

Para esto, revisaremos el manual de la herramienta find, la cual nos permite buscar archivos en un directorio.

Esta posee la opción -executable para buscar archivos ejecutables:

La opción -size permite buscar por tamaño:

El signo ! permite realizar una negación:

Por lo tanto, usamos el comando find ! -executable -size 1033c, donde:

  • ! -executable nos permite buscar archivos no ejecutable
  • size 1033c nos permite buscar archivos de 1033 bytes (usando la opción c)
NOTA: al no indicar directorio en el comando find, buscará en la carpeta local. Esto también se puede lograr usando un ., que define el directorio local.

Validamos que pueda ser leído por un humano:

Y por último, vemos el contenido del archivo:

Solución Bandit 6 > 7

Instrucciones

La password del siguiente reto se encuentra en un archivo dentro del servidor, y esta posee las siguientes características:

  • Pertenece al usuario bandit7
  • Pertenece al grupo bandit6
  • Pesa 33 bytes

Comandos recomendados a usar

ls, cd, cat, file, du, find, grep

Solución

Ya sabemos que con el comando find podemos buscar archivos dentro del sistema. Conocemos la opción -size, que permite buscar por el peso del archivo. Ahora vemos en el manual, las opciones para buscar por el propietario (usuario), con la opción -user, y que la opción -group nos permite buscar por el grupo al que se encuentra asociado:

Y como no sabemos en qué carpeta del sistema se encuentra, lo buscamos desde la raíz de este (/):

El problema que se presenta en la imagen, corresponden a múltiples errores de Permission denied, los cuales, pertenecen a STDERR (standard error). Cuando se ejecuta un proceso y se produce un error, los mensajes que se muestran en consola son standard errors (como en este caso, donde no tenemos permisos para ver algunos directorios).

El STDERR es identificado con el número 2, y sus mensajes pueden ser redirigidos (usando el símbolo >) a /dev/null (archivo especial utilizado para descartar información):

Ahora que encontramos el archivo con esas características, podemos leerlo sin problemas:

Solución Bandit 7 > 8

Instrucciones

La password del siguiente reto se encuentra en el archivo data.txt después de la palabra millionth.

Comandos recomendados a usar

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Solución

Revisamos si el archivo existe en el directorio actual, y lo leemos:

Al ejecutar cat al archivo, vemos que aparecen miles de líneas de texto, por lo tanto, se nos complica un poco la búsqueda. Para que sea más fácil, utilizamos la herramienta grep, que nos permite filtrar por texto.

Como grep nos permite filtrar por texto, buscamos por la palabra que se encuentra antes de la password (millionth):

Solución Bandit 8 > 9

Instrucciones

La password del siguiente reto se encuentra en el archivo data.txt, y es la única línea que no se repite.

Comandos recomendados a usar

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Solución

Validamos que el archivo existe:

Para buscar líneas únicas en un archivo usamos el comando uniq con la opción -u:

Se nos presenta el primer problema, que es el desorden del texto. Para encontrar la solución, ordenamos el contenido del archivo usando la herramienta sort:

Ahora que el texto se encuentra ordenado, podemos redireccionar la salida del comando sort al comando uniq -u a través del símbolo |:

Solución Bandit 9 > 10

Instrucciones

La password del siguiente reto se encuentra en el archivo data.txt, y es la única línea que puede ser leída por un humano, e inicia con múltiples =.

Comandos recomendados a usar

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Solución

Revisamos que el archivo existe:

Intentamos buscarlo usando grep, pero al no ser un archivo de texto ASCII, no puede ser leído por este:

Por lo tanto, usamos el comando strings, quien nos imprime las cadenas de caracteres imprimibles en un archivo. El output de este comando lo redireccionamos a un grep, para buscar por varios =: