Bandit wargame - I

Este verano, a pesar de haber tenido poco tiempo libre, he dedicado tiempo a hacer algunos wargames que me parecian realmente interesantes pero que nunca había tenido tiempo para realizar. El termino wargame es usado de forma generalizada en el mundo hacking para denotar un reto (por lo general en el ámbito de la cibersguridad). Su funcionamiento es bastante parecido a los cracksme's de las comunidades de crackers. Se propone un reto y se debe superar.

Este verano he realizado varios wargames de la página http://overthewire.org/. En este artículo concretamente voy a comentar y solucionar el wargame llamado bandit que posee un nivel de dificultad bajo, pero que es ideal para aquellos que quieren coger experiencia con los sistemas unix y los comandos de shell. Desde mi punto de vista se trata de un wargame bastante sencillo pero con algún que otro nivel que si no se tiene la idea puede resultar un poco más complicado.

Para empezar con este wargame debemos acceder por ssh a la dirección que nos proporcionan ellos por el puerto 2220. Para acceder al priner nivel basta con ejecutar el siguiente comando desde tu terminal, usando bandit0 como contraseña.

angelluis@sunny:~$ ssh bandit0@bandit.labs.overthewire.org -p 2220

A partir de ahora deberemos seguir las instrucciones que aparecen en http://overthewire.org/wargames/bandit/bandit0.html, para progesar en el wargame. Cuando finalicemos un nivel podemos pasar al siguiente nivel con el menu lateral izquierdo que aparece en la página web.

Como se ha señalado anteriormente la mayoría de niveles son realmente sencillos así que únicamente escribiré la solución sin explicar como se ha llegado a ella. Solamente en aquellos que sean más complejos se explicará la solución. Por último y para no hacer las entradas largas y tediosas este wargame se va a dividir en tres entradas distintas en el blog. Dicho esto empezamos con los primeros niveles.
Nivel0 -> Nivel 1

bandit0@bandit:~$ cat readme 
boJ9jbbUNNfktd78OOpsqOltutMc3MY1

Nivel1 -> Nivel 2

bandit1@bandit:~$ cat ./-
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9

Nivel 2 -> Nivel 3

bandit2@bandit:~$ cat spaces\ in\ this\ filename
UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK

Nivel 3 -> Nivel 4

bandit3@bandit:~$ ls -a inhere/
.  ..  .hidden
bandit3@bandit:~$ cat inhere/.hidden 
pIwrPrtPN36QITSp3EQaw936yaFoFgAB

Nivel 4 -> Nivel 5

bandit4@bandit:~$ file inhere/-file0*
inhere/-file00: data
inhere/-file01: data
inhere/-file02: data
inhere/-file03: data
inhere/-file04: data
inhere/-file05: data
inhere/-file06: data
inhere/-file07: ASCII text
inhere/-file08: data
inhere/-file09: data
bandit4@bandit:~$ cat inhere/-file07
koReBOKuIDDepwhWk7jZC0RTdopnAYKh

Nivel 5 -> Nivel 6

bandit5@bandit:~$ find inhere/ -size 1033c
inhere/maybehere07/.file2
bandit5@bandit:~$ cat inhere/maybehere07/.file2 
DXjZPULLxYr17uwoI01bNLQbtFemEgo7

Nivel 6 -> Nivel 7

bandit6@bandit:~$ find / -user bandit7 -group bandit6 -size 33c
find: ‘/tmp’: Permission denied
find: ‘/var/log’: Permission denied
find: ‘/var/tmp’: Permission denied
find: ‘/var/spool/bandit24’: Permission denied
find: ‘/var/spool/rsyslog’: Permission denied
find: ‘/var/spool/cron/crontabs’: Permission denied
find: ‘/var/lib/sudo’: Permission denied
find: ‘/var/lib/apt/lists/partial’: Permission denied
/var/lib/dpkg/info/bandit7.password
find: ‘/var/cache/apt/archives/partial’: Permission denied
find: ‘/var/cache/ldconfig’: Permission denied
find: ‘/home/bandit5/inhere’: Permission denied
find: ‘/home/bandit27-git’: Permission denied
find: ‘/home/bandit30-git’: Permission denied
find: ‘/home/bandit29-git’: Permission denied
find: ‘/home/bandit28-git’: Permission denied
find: ‘/home/bandit31-git’: Permission denied
find: ‘/root’: Permission denied
find: ‘/proc/tty/driver’: Permission denied
find: ‘/proc/14737/task/14737/fd/6’: No such file or directory
find: ‘/proc/14737/task/14737/fdinfo/6’: No such file or directory
find: ‘/proc/14737/fd/5’: No such file or directory
find: ‘/proc/14737/fdinfo/5’: No such file or directory
find: ‘/run/user/11017’: Permission denied
find: ‘/run/user/11014’: Permission denied
find: ‘/run/user/11031’: Permission denied
find: ‘/run/user/11009’: Permission denied
find: ‘/run/user/11032’: Permission denied
find: ‘/run/user/11029’: Permission denied
find: ‘/run/user/11003’: Permission denied
find: ‘/run/user/11008’: Permission denied
find: ‘/run/user/11001’: Permission denied
find: ‘/run/user/11011’: Permission denied
find: ‘/run/user/11007’: Permission denied
find: ‘/run/user/11020’: Permission denied
find: ‘/run/user/11010’: Permission denied
find: ‘/run/user/11016’: Permission denied
find: ‘/run/user/11028’: Permission denied
find: ‘/run/user/11013’: Permission denied
find: ‘/run/user/11025’: Permission denied
find: ‘/run/user/11026’: Permission denied
find: ‘/run/user/11019’: Permission denied
find: ‘/run/user/11012’: Permission denied
find: ‘/run/user/11024’: Permission denied
find: ‘/run/user/11004’: Permission denied
find: ‘/run/user/11005’: Permission denied
find: ‘/run/user/11000’: Permission denied
find: ‘/run/user/0’: Permission denied
find: ‘/run/screen/S-bandit20’: Permission denied
find: ‘/run/log/journal/3e1a10a965094e0f89fe44562a3d88f2’: Permission denied
find: ‘/run/lvm’: Permission denied
find: ‘/run/systemd/ask-password-block’: Permission denied
find: ‘/run/systemd/inaccessible’: Permission denied
find: ‘/run/lock/lvm’: Permission denied
find: ‘/lost+found’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
find: ‘/sys/kernel/debug’: Permission denied
find: ‘/boot/lost+found’: Permission denied
bandit6@bandit:~$ cat /var/lib/dpkg/info/bandit7.password
HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs

Nivel 7 -> Nivel 8

bandit7@bandit:~$ grep "millionth" data.txt
millionth    cvX2JJa4CFALtqS87jk27qwqGhBM9plV

Nivel 8 -> Nivel 9

bandit8@bandit:~$ cat data.txt | sort | uniq -u
UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR

Nivel 9 -> Nivel 10

bandit9@bandit:~$ strings data.txt | grep =
x========== the
XG*=!
=l]r?jm
|4\=
n=~e
========== password
=$!?$
 %YFK=
========== is
=?/xE
=Wz^
DXL=-
,O=s
as?=G%_
Pajx=;a
1#==
========== truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk
uc=7
K=93

Nivel 10 -> Nivel 11

bandit10@bandit:~$ cat data.txt | base64 -d
The password is IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR

Nivel 11 -> Nivel 12

En las instrucciones de este nivel indican que la contraseña para el siguiente nivel está cifrada con un desplazamiento de 13. Es decir donde hay una a debe haber una a+13 = n. Este cifrado es conocido como ROT13 y es una técnica de cifrado por sustitución siendo un caso específico del cifrado cesar (en este ultimo cifrado la posición a usar para realizar la sustitución puede ser distinta de 13, siendo por lo general n <longitud del alfabeto).

Este nivel se puede abordar de varias maneras, una de ellas sería creando un pequeño programa que realice la sustitución caracter a caracter, pero linux nos ofrece un comando que es capaz de "traducir" desde un conjunto de entrada a un conjunto de salida. En esta solución se ha optado por el comando tr donde el conjunto de entrada es el alfabeto desde la a hasta la z en minuscula y desde la A hasta la Z en mayuscula y el conjunto de salida es el alfabeto rotado 13 positición.

bandit11@bandit:~$ cat data.txt 
Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2RHh
bandit11@bandit:~$ tr [a-zA-Z] [n-za-mN-ZA-M] < data.txt
The password is 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu

Datos consumidos por Netflix

Recientemente he tenido curiosidad por saber cuantos datos consume netflix ya que si algún día no estoy en mi casa, y quiero poner mi móvil como router y contratar una tarifa de datos, me gustaría saber cuantos datos voy a consumir, para no llevarme una sorpresa.

Para las pruebas he usado Wireshark sobre ubuntu 18.04 y he dejado reproduciendo el primer capítulo de la segunda temporada de Por trece razones. El hecho por decantarme por este capítulo no es una decisión técnica, simplemente ya ví la primera temporada y netflix me recomienda este capítulo. Ahora bien, el hecho de elegir esta serie en si es por 2 razones:

  • Es una serie con actores reales. Por lo general, los algoritmos de compresión funcionan mejor sobre series animadas (ya que hay menos entropía) que sobre series con actores reales (hay más entropía, más información y más frecuencias) y me interesa estudiar el peor caso que es donde los algoritmos de compresión no funcionan tan bien.
  • Son capítulos de 1 hora. Esto me permite calcular mas o menos el consumo por hora y saber mas o menos cuanto me va a costar reproducir un capitulo con un formato de tiempo bastante estándar.

Lo primero que he hecho es empezar a capturar tráfico por la interfaz inalámbrica y posteriormente empezar a reproducir el video desde la web de netflix. El capítulo se ha mantenido reproduciendo en segundo plano mientras que hacía otras tareas. Cuando el capítulo ha terminado he finalizado la captura y aplicando el siguiente filtro en wireshark puedo ver los paquetes intercambiados con netflix

ip.geoip.asnum contains Netflix

El resultado se muestra en la siguiente captura de pantalla

Captura de Wireshark

Como se puede observar, el tráfico intercambiado con Netflix ronda los 900 MB. Una cantidad de tráfico bastante elevada para usar con una tarifa de datos. He pensado que Netflix debe dar alguna facilidad para reducir esta cantidad de tráfico y efectivamente así es. Desde la web, dentro del menú Cuenta, en la sección Mi Perfil se encuentra la opción Configuración de reproducción. Una vez dentro de esta sección nos da 4 opciones distintas

  • Automático. Uso de datos y calidad de vídeo predeterminados.
  • Bajo. Calidad de vídeo básica. Hasta 0.3 GB por hora
  • Mediano. Calidad de vídeo estándar. Hasta 0.7 GB por hora
  • Alto. Calidad de vídeo óptima. Hasta 3 GB por hora para HD, 7 GB por hora para ULTRA HD

En mi caso estaba seleccionado como automático, así que he seleccionado el perfil bajo y he vuelto a hacer la prueba. En la siguiente captura se resumen los resultados

Captura de Wireshark

Como se puede observar esta vez el tráfico total ha sido de unas 300 MB (que es la aproximación que nos facilita Netflix para el perfil bajo). Sigue siendo una cantidad de tráfico bastante elevada para las tarifas de datos que hay actualmente en España pero es bastante más asequible que la opción predeterminada, además la calidad visual del video no se ve notablemente afectada.