Writeup - Wargame Bandit - Parte 1
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
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 -
:
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 él 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 ejecutablesize 1033c
nos permite buscar archivos de 1033 bytes (usando la opciónc
)
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 =
: