Bandit 16 -–❯ 20


Juegos de Guerra "Bandit" Overthewire

Published on August 25, 2023 by Gmichet

LINUX BANDIT

7 min READ

Parte 4 de los juegos “Bandit” de la página OverTheWire

SkillsEnlace
Escaneo de puertos abiertos con nmapnmap
Comparar dos archivos y mostrar sus diferenciasdiff
Colando un comando a la conexión sshColar comandos en la conexión ssh
Archivos con permiso especial SUIDSUID
Otro permiso SUIDSUID

Indice


Bandit 16 al 17

Las credenciales para el siguiente nivel se pueden recuperar enviando la contraseña del nivel actual a un puerto en localhost en el rango de 31000 a 32000.

Primero averigüe cuál de estos puertos tiene un servidor escuchando en ellos.

Luego, averigüe cuáles de ellos hablan SSL y cuáles no. Solo hay 1 servidor que proporcionará las siguientes credenciales, los demás simplemente le enviarán lo que le envíe.

Resolviendo Nivel 16

A continuación realizamos un escaneo con nmap para identificar que puertos tienen el servicio openssl corriendo:

bandit16@bandit:~$ nmap -sV -p31000-32000 127.0.0.1 -T5 -n 
Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-26 21:36 UTC
Nmap scan report for 127.0.0.1
Host is up (0.00014s latency).
Not shown: 996 closed ports
PORT      STATE SERVICE     VERSION
31046/tcp open  echo
31518/tcp open  ssl/echo
31691/tcp open  echo
31790/tcp open  ssl/unknown
31960/tcp open  echo
  • Ya identificados los puertos procedemos a conectarnos por openssl, si no te funciona un puerto prueba otro que diga ssl:
bandit16@bandit:~$ openssl s_client -connect 127.0.0.1:31790

---
read R BLOCK
JQttfApK4SeyHwDlI9SXGR50qclOAil1
Correct!
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAvmOkuifmMg6HL2YPIOjon6iWfbp7c3jx34YkYWqUH57SUdyJ
imZzeyGC0gtZPGujUSxiJSWI/oTqexh+cAMTSMlOJf7+BrJObArnxd9Y7YT2bRPQ
Ja6Lzb558YW3FZl87ORiO+rW4LCDCNd2lUvLE/GL2GWyuKN0K5iCd5TbtJzEkQTu
DSt2mcNn4rhAL+JFr56o4T6z8WWAW18BR6yGrMq7Q/kALHYW3OekePQAzL0VUYbW
JGTi65CxbCnzc/w4+mqQyvmzpWtMAzJTzAzQxNbkR2MBGySxDLrjg0LWN6sK7wNX
x0YVztz/zbIkPjfkU1jHS+9EbVNj+D1XFOJuaQIDAQABAoIBABagpxpM1aoLWfvD
KHcj10nqcoBc4oE11aFYQwik7xfW+24pRNuDE6SFthOar69jp5RlLwD1NhPx3iBl
J9nOM8OJ0VToum43UOS8YxF8WwhXriYGnc1sskbwpXOUDc9uX4+UESzH22P29ovd
d8WErY0gPxun8pbJLmxkAtWNhpMvfe0050vk9TL5wqbu9AlbssgTcCXkMQnPw9nC
YNN6DDP2lbcBrvgT9YCNL6C+ZKufD52yOQ9qOkwFTEQpjtF4uNtJom+asvlpmS8A
vLY9r60wYSvmZhNqBUrj7lyCtXMIu1kkd4w7F77k+DjHoAXyxcUp1DGL51sOmama
+TOWWgECgYEA8JtPxP0GRJ+IQkX262jM3dEIkza8ky5moIwUqYdsx0NxHgRRhORT
8c8hAuRBb2G82so8vUHk/fur85OEfc9TncnCY2crpoqsghifKLxrLgtT+qDpfZnx
SatLdt8GfQ85yA7hnWWJ2MxF3NaeSDm75Lsm+tBbAiyc9P2jGRNtMSkCgYEAypHd
HCctNi/FwjulhttFx/rHYKhLidZDFYeiE/v45bN4yFm8x7R/b0iE7KaszX+Exdvt
SghaTdcG0Knyw1bpJVyusavPzpaJMjdJ6tcFhVAbAjm7enCIvGCSx+X3l5SiWg0A
R57hJglezIiVjv3aGwHwvlZvtszK6zV6oXFAu0ECgYAbjo46T4hyP5tJi93V5HDi
Ttiek7xRVxUl+iU7rWkGAXFpMLFteQEsRr7PJ/lemmEY5eTDAFMLy9FL2m9oQWCg
R8VdwSk8r9FGLS+9aKcV5PI/WEKlwgXinB3OhYimtiG2Cg5JCqIZFHxD6MjEGOiu
L8ktHMPvodBwNsSBULpG0QKBgBAplTfC1HOnWiMGOU3KPwYWt0O6CdTkmJOmL8Ni
blh9elyZ9FsGxsgtRBXRsqXuz7wtsQAgLHxbdLq/ZJQ7YfzOKU4ZxEnabvXnvWkU
YOdjHdSOoKvDQNWu6ucyLRAWFuISeXw9a/9p7ftpxm0TSgyvmfLF2MIAEwyzRqaM
77pBAoGAMmjmIJdjp+Ez8duyn3ieo36yrttF5NSsJLAbxFpdlc1gvtGCWW+9Cq0b
dxviW8+TFVEBl1O4f7HVm6EpTscdDxU+bCXWkfjuRb7Dy9GOtt9JPsX8MBTakzh3
vBgsyi/sN3RqRBcGU40fOoZyfAMT8s1m/uYv52O6IgeuZ/ujbjY=
-----END RSA PRIVATE KEY-----

closed

  • Como fue correcta la conexión nos arrojó una clave privada que nos servira para conectarnos a bandit17. Primero creamos un directorio temporal en donde creare una archivo que contendrá la clave privada y lo nombrare “id_rsa” que tendrá permisos de lectura y escritura solo para el usuario.
bandit16@bandit:~$ mkdir /tmp/mechitast

bandit16@bandit:~$ cd /tmp/mechitast

bandit16@bandit:/tmp/mechitast$ touch id_rsa

bandit16@bandit:/tmp/mechitast$ nano id_rsa 
# Pegamos la clave en el archivo id_rsa

bandit16@bandit:/tmp/mechitast$ chmod 600 id_rsa 
bandit16@bandit:/tmp/mechitast$ ls -l
total 4
-rw------- 1 bandit16 bandit16 1675 Aug 26 21:53 id_rsa
  • Ahora nos conectamos por localhost a bandit 17 por medio de la clave privada:
bandit16@bandit:/tmp/mechitast$ ssh -i id_rsa bandit17@localhost -p 2220

bandit17@bandit:~$ whoami
bandit17

Bandit 17 al 18

Hay 2 archivos en el directorio de inicio: passwords.old y passwords.new.

La contraseña para el siguiente nivel está en passwords.new y es la única línea que se ha cambiado entre passwords.old y passwords.new

NOTA: si ha resuelto este nivel y ve ‘¡Adiós!’ al intentar iniciar sesión en bandit18, esto está relacionado con el siguiente nivel, bandit19.

Resolviendo Nivel 17

Podemos utilizar el comando diff que se utiliza para comparar dos archivos y mostrar las diferencias entre ellos.

bandit17@bandit:~$ diff passwords.old passwords.new 
42c42
< glZreTEH1V3cGKL6g4conYqZqaEj0mte
---
> hga5tuuCLF6fFzUpnagiMN8ssu9LFrdg # Contraseña Bandit18

Bandit 18 al 19

La contraseña para el siguiente nivel se almacena en un archivo readme en el directorio de inicio. Desafortunadamente, alguien ha modificado .bashrc para cerrar tu sesión cuando inicias sesión con SSH.

En el nivel anterior “bandit17” decia la nota “si ha resuelto este nivel y ve ‘¡Adiós!’ al intentar iniciar sesión en bandit18, esto está relacionado con el siguiente nivel, bandit19.”

Iniciamos y claramente nos expulsa:

ssh bandit18@bandit.labs.overthewire.org -p 2220

Byebye !
Connection to bandit.labs.overthewire.org closed.

Resolviendo Nivel 18

Cuando realizamos el comando ssh es posible colarle un comando ejemplo, podemos pedirle que nos arroje una bash, luego podemos listar el contenido y mostrar el readme que contiene la contraseña para el siguiente nivel:

ssh bandit18@bandit.labs.overthewire.org -p 2220 bash

                         _                     _ _ _   
                        | |__   __ _ _ __   __| (_) |_ 
                        | '_ \ / _` | '_ \ / _` | | __|
                        | |_) | (_| | | | | (_| | | |_ 
                        |_.__/ \__,_|_| |_|\__,_|_|\__|
                                                       

                      This is an OverTheWire game server. 
            More information on http://www.overthewire.org/wargames

bandit18@bandit.labs.overthewire.org's password: 
whoami
bandit18
ls      
readme
cat readme
awhqfNnAbc1naukrpqDYcF95h7HoMTrC

Bandit 19 al 20

Para obtener acceso al siguiente nivel, debe usar el binario setuid en el directorio de inicio. Ejecutarlo sin argumentos para saber cómo usarlo.

La contraseña para este nivel se puede encontrar en el lugar habitual (/etc/bandit_pass), después de haber utilizado el binario setuid.

Iniciamos:

ssh bandit19@bandit.labs.overthewire.org -p 2220

Resolviendo Nivel 19

Muy bien ahora listamos y para saber más le aplicamos un ls -l para conocer los permisos, y vemos que el archivo tiene habilitado el permiso SUID

bandit19@bandit:~$ ls
bandit20-do
bandit19@bandit:~$ ls -l
total 16
-rwsr-x--- 1 bandit20 bandit19 14876 Apr 23 18:04 bandit20-do
  • Cuando un archivo tiene el bit SUID establecido, se ejecuta con los privilegios del propietario del archivo en lugar de los privilegios del usuario que lo ejecuta.
bandit19@bandit:~$ ./bandit20-do whoami
bandit20
bandit19@bandit:~$ 
  • Ahora si a eso le aplicamos este comando bash -p para iniciar una nueva instancia de la shell Bash en modo restringido. Y por último mostramos la contraseña para el siguiente nivel:
bandit19@bandit:~$ ./bandit20-do bash -p
bash-5.1$ whoami
bandit20
bash-5.1$ cat /etc/bandit_pass/bandit20
VxCazJaVykI6W36BkBU0mJTCM8rR95XT

Bandit 20 al 21

Hay un binario setuid en el directorio de inicio que hace lo siguiente:

  • Establece una conexión con localhost en el puerto que especifique como argumento de la línea de comandos.
  • Luego lee una línea de texto de la conexión y la compara con la contraseña del nivel anterior (bandit20).
  • Si la contraseña es correcta, transmitirá la contraseña para el siguiente nivel (bandit21).

Resolviendo Nivel 20

Primero te conectas dos veces a bandit20, y abres dos instancias de la terminal:

Instancias

bandit20@bandit:~$ ./suconnect 
Usage: ./suconnect <portnumber>
This program will connect to the given port on localhost using TCP. If it receives the correct password from the other side, the next password is transmitted back.
  • Nos ponemos en escucha a través del comando nc -nvlp en el puerto “5757” a la vez ejecutamos ./suconnect en el puerto 5757:

Instancias

  • Bueno en una terminal estaremos en escuha nc -nvlp para recibir la contraseña pero antes de recibirla tenemos que enviar la contraseña de este usuario.

En la otra ejecutaremos el archivo ./suconnect en el puerto 5757 en donde va a leer la contraseña y si es correcta nos enviará la contraseña nueva:

Instancias

NvEJF7oVjkddltPSrdKEFOllh9V1IBcq

Gmichet

Autodidacta apasionado por la informática y entusiasta de los CTF. Constantemente aprendiendo.

2024 | WhatATheme - A Theme made with by Gmichet Powered by Jekyll