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.

Windows
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
Windows
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.

PowerShell
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.

Windows
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.


  Autor

Marcos Henrique

 São Paulo/SP



  Coleta de Informações

© 2020 - 100SECURITY

Contato