Conteúdo acessível em Libras usando o VLibras Widget com opções dos Avatares Ícaro, Hosana ou Guga. Conteúdo acessível em Libras usando o VLibras Widget com opções dos Avatares Ícaro, Hosana ou Guga.
 

Este recurso pode ser muito útil durante um PenTest pois informações sensíveis como Senhas, URLs, IPs entre outras..., podem ser encontradas ao extrair o Cache das Sessões RDP.

01 - Passo

Execute o PowerShell como Administrador e crie uma pasta para armazenar o Cache.

md RDP-Cache

cd .\RDP-Cache\

02 - Passo

Para verificar a existência do Cache basta acessar o caminho a seguir na pasta do Usuário :

  • Observe os arquivos Cache00?.bin
C:\Users\Administrador\AppData\Local\Microsoft\Terminal Server Client\Cache

03 - Passo

Copie o conteúdo abaixo e crie o arquivo rdp-cache.ps1 dentro da pasta RDP-Cache.

Add-Type -Assembly System.Drawing
$workingDir = "C:\100SECURITY\RDP-Cache"
md $workingDir
$file=(dir Env:\LOCALAPPDATA).Value+"\Microsoft\Terminal Server Client\Cache\Cache0001.bin"
 
$tileSize = 64
$tilesPerGraphW=8
$tilesPerGraphH=8
$bpp = 4
$bufSize = $bpp * $tileSize * $tileSize * $tilesPerGraphW * $tilesPerGraphH
$bytesRead=$bufSize
$imgNo=0
$imgNamePrefix=(get-date).Ticks
$tileSize2 = $tileSize * $tileSize
 
$buf = new-object byte[] $bufSize
$fs = new-object IO.FileStream($file, [IO.FileMode]::Open)
$reader = new-object IO.BinaryReader($fs)
$bmBM = New-Object System.Drawing.Bitmap (($tileSize * $tilesPerGraphW),($tileSize * $tilesPerGraphH))
 
 
while ($bytesRead -eq $bufSize)
    {
    $offset = $imgNo*$bufSize
    $imgNo++
   
    $dum=$reader.BaseStream.Seek($offset,"Begin")
    $bytesRead=$reader.Read($buf, 0, $bufSize)
   
    for ($it=0; $it -lt $tilesPerGraphH; $it++)
        {
        Write-Progress -Activity "Analyzing cache" -Status "Row $it of $tilesPerGraphH" -PercentComplete (($it/$tilesPerGraphH)*100) -id 0
        for ($jt=0; $jt -lt $tilesPerGraphW; $jt++)
            {
            Write-Progress -Activity "Completing row" -Status "Column $jt" -PercentComplete (($jt/$tilesPerGraphW)*100) -ParentId 0 -Id 1
            for ($is=0; $is -lt $tileSize; $is++)
                {
                for ($js=0; $js -lt $tileSize; $js++)
                    {
                    $bufPos = $bpp * (($it*$tilesPerGraphW+$jt)*$tileSize2+$is*$tileSize+$js)
                    $red = $buf[$bufPos]
                    $green = $buf[$bufPos + 1]
                    $blue = $buf[$bufPos + 2]
                    $bmBM.SetPixel($jt*$tileSize+$js,$it*$tileSize+$is,[System.Drawing.Color]::FromArgb($red, $green, $blue))
                    }
                }
            }
        }
        $imgNoText=($imgNo).ToString("0000")
        $bmBM.Save("$workingDir\$imgNamePrefix.$imgNoText.png")
    }

04 - Passo

Liste o conteúdo da pasta RDP-Cache, em seguida execute o script rdp-cache.ps1.

dir

./rdp-cache.ps1

Aguarde...

05 - Passo

Serão extraídas várias imagens contendo Prints de Tela (misturados) das Sessões RDP.

Analisando as Imagens

Em algumas imagens é possível encontrar URLs, IPs e Senhas, veja o exemplo :

Dicas

  • Não armazena Usuários e Senhas em arquivos de texto no Servidor.
  • Monitore os acessos realizados nos Servidores e as atividades dos Usuários com privilégios administrativos.

👍 Se este artigo te ajudou compartilhe!



  Autor

Marcos Henrique

 São Paulo/SP



  Coleta de Informações

© 2025 - 100SECURITY

Contato