El reto de esta maquina consiste en localizar dos banderas:
- User.txt
- Root.txt
Y no utilizar MetaSploit.
Comenzamos primero buscando los puertos abiertos en la maquina, en este caso usaremos las opciones » -sS -Pn y -p-» para buscar todos los puertos abiertos de una forma silenciosa y sin realizar «ping» que podría alertar al servicio ICMP.
nmap -sS -Pn -p- <IP maquina atacada>
Vemos que tenemos abiertos los puertos: 80,135,139,445,3389,49663,49667,49669 así que ahora realizamos un sondeo un poco más agresivos sobre ellos (-T4 -sV) para localizar las versiones, una buena idea es salvar los resultados en un fichero para uso posterior con la opción -oA <Fichero_Informe> y en especial cuando solicitamos ejecución de scripts que dan muchos más datos.
nmap -p 80,135,139,445,3389,49663,49667,49669 -Pn -sS -sV -T4 <IP>
Con las versiones de los servicios empezamos a enumerar estos particularmente, ya sean con nmap y ejecución de scripts de la herramienta con la opción «-sC» para ejecutar los scripts estándar de ese servicio, por ejemplo el del servicio SMB que es por el que empezaremos a enumerar los servicios disponibles en busca de pistar para la explotación.
Enumeración SMB
sudo nmap -p 445 -Pn -sS -sV -T4 -sC -oA <Fichero_enmumeracion_SMB> <IP>
Empezamos por este servicio pues suele resultar bastante frágil, en especial por errores humanos de configuración, y obtenemos al ejecutar el script varias informaciones que nos pueden resultar útil, por ejemplo la versión del Windows que es más precisa que en la búsqueda anterior.
Con esta versión podemos realizar una búsqueda de vulnerabilidades, por ejemplo con la herramientas «searchsploit» o directamente desde la base de datos de vulnerabilidades.
Lo primero que realizaremos es intentar buscar los recursos compartidos disponibles en SMB, con la herramienta «smbclient» y la opción «-L».
smbclient -L \\<IP>
Vemos varios servicios disponibles, pero nos llama la atención uno que es de compartición de disco y no es de los estándar y es «ntwrksv» así que lo mejor es intentar conectarnos a el a ver si tenemos suerte.
smbclient \\<IP>\nt4wrksv
Y vemos que nos da propmpt «smb>» lo cual nos podemos conectar a el.
Podemos ver la lista de comando con help pero conviene conocer algunas que utilizaremos en las busqueda de la bandera.
- help: Lista de comandos.
- ls o dir: Listar los ficheros del directorio actual.
- cd: Cambiamos de directorio.
- pwd: Nos da el directorio de red actual.
- get: Traernos un fichero a nuestra maquina.
- put: Subir un fichero a la maquina remota.
- more: Visualizar un fichero.
Así que una vez conectados realizamos una pequeña enumeración con un dir y vemos un ficheros, posiblemente interesante, así que nos lo traeremos a nuestra maquina local para analizarlo.
Al realizar un «cat» del fichero sugiere ser claves de usuario y ademas nos fijamos en el contenido y parece base 64 así que las decodificamos viendo que tenemos dos usuarios (Bob y Bill) y aparentemente sus claves así que lo mejor es intentar conectarnos con esta información.
Las respuestas nos hacen suponer que Bob existe como usuario pero esta no es la clave, al menos para el acceso a SMB y Bill ni siquiera es un usuario.
Con esta información pasamos a enumerar los dos servicios HTTP que encontramos, uno por el puerto 80 y el otro por el puerto 49663 (puerto muy alto y que normalmente no encontramos en uso).
Enumeración HTTP
Una primera vista en el navegador de las dos páginas, una por el puerto 80 y la otra por el 49663, nos hace ver que aparentemente son las mismas así que lo mejor es realizar un fuzzing de los directorios en cada uno de los puertos.
dirb http://<IP>
dirb http://<IP>:49663
Y no vemos diferencias entre ambos salvo la existencia del directorio «aspnet_client» en el servidor que escucha por el puerto 49663.
Este directorio se crea cuando se activa el servicio ASP.NET y como tenemos acceso a un directorio desde SMB, que ademas conocemos un fichero que se encuentra en el lo mejor es probar si desde el navegador se tiene acceso a este fichero «passwords.txt».
Así que solicitaremos en el navegador dos páginas una para el puerto 80 y otra para el puerto 49663, del recurso que tenemos disponible por SMB.
http://<IP>/nt4wrksv/passwords.txt
http://<IP>:49663/nt4wrksv/passwords.txt
Vemos que solo vemos el contenido del fichero «passwords.txt» cuando accedemos por el puerto 49663, así que podemos intentar subir un fichero .aspx (paginas de ASP.NET) con un reverse shell.
Buscamos uno por internet y encontramos uno en la dirección «https://raw.githubusercontent.com/borjmz/aspx-reverse-shell/master/shell.aspx» lo configuramos con nuestra IP y el puerto por ejemplo 4444 y subimos el fichero modificado a la maquina atacada mediante «smbclient» y el comando «put».
Con el fichero en la maquina a ser atacada, solo nos queda poner la escucha en nuestra maquina por el puerto configurado (4444) y pedir en el navegador el fichero recientemente subido.
Ya tenemos acceso a la maquina así que ahora realizaríamos una enumeración de la maquina atacada, pero antes vamos a por la bandera de usuario a ver si tenemos suerte y no necesitamos escalada.
Nos vamos al directorio de usuarios y vemos a nuestro «Bob» así que nos movemos por sus directorios, también podíamos usar «dir user.txt /s» y nos encontramos el fichero en el escritorio así que solo nos falta ver el contenido y perfecto tenemos acceso y vemos la primera bandera.
Escalada de privilegios
Para la próxima bandera tenemos que realizar una escalada de privilegios ya que no tenemos acceso a directorios del Administrador, que en teoría es donde estará el fichero de bandera para root, para esto realizaremos una pequeña enumeración del sistema para ver por donde podemos atacar la escalada de privilegios.
Confirmamos la versión de Windows, así que buscamos una vulnerabilidad, ademas obtenemos también la arquitectura que es de 64Bits para conocer que tipos de exploit podemos utilizar.
También miramos los privilegios que tenemos, en especial miramos SeAssignPrimaryTokenPrivilege y SeImpersonatePrivilege que son los necesarios para un ataque Potatoe, vemos que el primero esta deshabilitado pero buscando nos encontramos que tenemos un exploit printSpoofer( https://itm4n.github.io/printspoofer-abusing-impersonate-privileges) que es valido para versiones actuales como esta y ademas es suficiente con tener habilitado uno de los dos permisos.
Deberemos descargarnos el de 64 bits que es la arquitectura que utilizamos (https://github.com/itm4n/PrintSpoofer/releases/download/v1.0/PrintSpoofer64.exe) y lo subimos con smbclient como hicimos con nuestro shell inverso.
Ahora nos iremos al directorio donde se ha descargado, para conocer el directorio antes nos fuimos a la raiz y desde esta buscamos el fichero passwords.txt que es el mismo lugar que donde hemos salvados nuestros ficheros con un comando muy sencillo de windows similar al find de Linux.
dir passwords.txt /s
Nos vamos a ese directorio y ejecutamos
PrintSpoofer64.exe -i -c cmd
Puede que no funcione a la primera así que repetimos el comando varias veces hasta que vemos que obtenemos un Shell.
Ya con nivel de administrador vamos a buscar la bandera donde seguramente este y es en el escritorio del administrador.
Y con esta ultima bandera finalizamos esta CTF.