Home Developer Vulnyx
Post
Cancel

Developer Vulnyx

El dia de hoy vamos a estar resolviendo la maquina Developer de la plataforma de vulnyx

Enumeracion

Empezemos Detectando que puertos estan abiertos en la maquina victima para esto voy a estar unsando la herramienta nmap

❯ nmap  192.168.1.12
Nmap scan report for 192.168.1.12
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Solo Tenemos 2 puertos en el puerto 22 corre ssh y en el 80 un servicio http.

Enumeremos el servidor Web.

Viendo un poco la pagina web me llamo algo la atencion en la session de contacto, atraves de un parametro llama el archivo.

El tema de usar parametros para mostar archivos es mala idea si no saben como sanitizarlo de forma correcta, en este caso se llama al archivo atraves del parametro ?page=, Veamos si se acontese un LFI.

Y no funciona esto puede ser que se este implementando algun tipo de sanitizacion, Si el servidor nos esta quitando el ../ Podemos intentar bypassear esto usando ....// Te muestro un pequeño ejemplo de esto.

Esto es algo parecido a lo que se esta aplicando en el servidor.

Esto no es muy seguro ya que podemos usar ....// para bypassearlo.

Pobramos esto en la Web y funciona Tenemos LFI

Voy a crear un script simple en python para ir viendo los archivos que me interesan.

#!/usr/bin/python3

import requests
import sys

# Variables
url_lfi = 'http://192.168.1.12/pagecontact.php?page=....//....//....//....//....//....//....//....//....//....//....//....//....//..../'

def getFile():
    file = sys.argv[1]
    main_url = url_lfi + file
    r = requests.get(main_url)
    print(r.text)

if __name__ == '__main__':
    getFile()

Ejecutamos el script y como argumento le pasamos el archivo que deseamos leer.

Veamos que puertos esta abiertos en la maquina victima para esto vemos la ruta /proc/net/tcp

Estos numeros estan en hexadecimal por lo que simplemente los tenemos que pasar a decimal.

Vemos el puerto 873 que es el puerto de el servicio rsync sin embargo este puerto esta cerrado.

Veamos si este puerto esta abierto por ipv6 para sacar la dirreccion ipv6 de la maquina podemos ver el archivo /proc/net/if_inet6

Tenemos la siguiente dirreccion.

❯ echo "280000e2258004370a0027fffe35a6c4"

Esta direccion hay que hacerle un tratamiento, las dirrecciones ipv6 esta confomardas por 128 bits y se componen de 8 campos los cuales estan conformados por 16 bits cada uno, cada campo se une con dos puntos, Para que lo entiendas un poco mejor cada 4 numeros agregamos dos puntos la dirreccion ipv6 nos quedaria de la siguiente forma.

❯ echo "2800:00e2:2580:0437:0a00:27ff:fe35:a6c4"

Veamos que puertos esta abiertos por ipv6.

❯ nmap -6 2800:00e2:2580:0437:0a00:27ff:fe35:a6c4
Nmap scan report for developer (2800:e2:2580:437:a00:27ff:fe35:a6c4)
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
873/tcp open  rsync

Shell dev

Vemos que el puerto del rsync esta abierto por ipv6, aprovechando el LFI que tenemos en la maquina victima enumeremos los archivos de configuracion.

El archivo de configuracion de rsync es /etc/rsyncd.conf

Vemos que la ruta donde se depositan los archivos que subamos a rsync es /var/www/html/rsync_uploads

Esta ruta existe en la pagina web por lo que todo lo que subamos a rsync lo podemos llegar a ver en la web.

Vemos la ruta del archivo secrets file este archivo contiene credenciales para el servicio rsync para que los usuarios puedan acceder remotamente.

Para que no nos de problemas el rsync voy agregar en el archivo /etc/hosts para que la direccion ipv6 apunte a un dominio.

❯ echo "2800:00e2:2580:0437:0a00:27ff:fe35:a6c4 developer" | sudo tee -a /etc/hosts

Listemos que Modulos hay en rsync, un Modulo es carpeta compartida.

No nos reporta nada, puede ser que los modulos existentes esten ocultos, pero anteriormente en el archivo /etc/rsyncd.conf habia un comentario.

Intentemos usar este nombre, y funciona ahora nos pide contraseña.

Usemos las credenciales que obtuvimos anteriormente del archivo /etc/rsyncd.secrets

Como la web interpreta codigo php voy a subir un archivo el cual se encargue de enviarme una Revershell, para esto voy a utilizar Chankro, primero creo un script en bash.

Genero el archivo php.

Subo el archivo.

Ahora enviemos una peticion a el archivo que subimos para que se ejecute.

Shell mike

Si revisamos los privilegios que tenemos a nivel de sudoers Podemos ejecutar el comando awk Como el usuario mike.

Si nos vamos a gtfobins vemos que atraves del comando awk podemos lanzarnos una shell.

Ejecutamos el comando y obtenemos una shell como el usuario mike

Shell james

Si nuevamente Revisamos los privilegios que tenemos a nivel de sudoers Podemos ver que tenemos la capacidad de ejecutar el comando base64 como el usuario james

Teniendo este privilegio podemos leer cualquier archivo como el usuario james, Leamos el historico de comandos de este usuario leyendo el archivo /home/james/.bash_history.

Conectemos por ssh como el usuario james.

Shell root

Como no tengo permisos ni nada interesante voy a utilizar pspy para monitorizar los comandos y tareas que se esten ejecutando en el sistema.

Hay una tarea que ejecuta root la cual se encarga de ejecutar un script de bash el cual esta en mi directorio personal.

Somos el propietario del archivo por lo que lo podemos modificar y cambiar el contenido para que nos envie una ReverShell.

Modificamos el archivo.

Despues de 1 minuto esperando a que se ejecutara la tarea nos llega una consola como el usuario root.

This post is licensed under CC BY 4.0 by the author.