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