Descriptografar senha RDP armazenada no arquivo .rdg


11

Existe uma maneira de descriptografar uma senha armazenada em um arquivo .rdg ( Gerenciador de Conexão de Área de Trabalho Remota ), fornecendo o nome de usuário e a senha do usuário que a criou?

Eu sei que a senha é criptografada com base no usuário que a criou. O usuário é um usuário do domínio e estou tentando usar o arquivo .rdg em casa (domínio indisponível). Posso "simular" ser o usuário do domínio, pois sei o nome de usuário + a senha? Lembre-se, o acesso de rede ao domínio não está disponível. O acesso físico à máquina original também está indisponível.

Eu tentei esse método , mas (sem surpresa) eu recebo

"Exceção ao chamar DecryptString com 2 argumento (s): falha ao descriptografar usando a credencial XXXX"

(XXX é o meu login inicial atual.)

Respostas:


15

Aqui está um script do Powershell que fará o trabalho ...

Abra o arquivo RDG com o bloco de notas para obter a senha criptografada. Descobri que o RDG continha os 'perfis' que eu havia salvo, bem como as senhas salvas por servidor.

Agora use a mesma conta de computador e Windows que criou o arquivo RDG para executar os seguintes comandos do PowerShell para ver a senha. Você precisa usar a mesma conta para descriptografar.

> $PwdString = 'EnCryptEdStringFRoMRDGfile=='
> Copy-Item 'C:\Program Files (x86)\Microsoft\Remote Desktop Connection Manager\RDCMan.exe' 'C:\temp\RDCMan.dll'
> Import-Module 'C:\temp\RDCMan.dll'
> $EncryptionSettings = New-Object -TypeName RdcMan.EncryptionSettings
> [RdcMan.Encryption]::DecryptString($PwdString, $EncryptionSettings)

Fonte: https://blog.prudhomme.wtf/use-powershell-to-decrypt-password-stored-in-a-rdg-file/ por THOMAS PRUD'HOMME


3
Os links externos podem quebrar ou ficar indisponíveis; nesse caso, sua resposta não seria útil. Inclua as informações essenciais em sua resposta e use o link para atribuição e leitura adicional. Obrigado.
fixer1234

11
Eu amo como você postar o mesmo destino como eu postei na minha pergunta original, dizendo que não funciona (já que não há acesso à rede para o domínio)
pkExec

@pkExec Este método funcionou para mim. Acho que há outra maneira de resolver o problema do domínio. (Você provavelmente precisará de acesso à conta de usuário do domínio que criptografado a senha, e isso pode significar que você precisa para voltar a ligar ao domínio.)
jpaugh

1

Use o seguinte script do Powershell para descriptografar todas as senhas em um arquivo RDG em uma única captura. https://github.com/nettitude/PoshC2/blob/master/resources/modules/Decrypt-RDCMan.ps1

Caso o link falhe, aqui está o conteúdo para referência:

function Decrypt-RDCMan ($FilePath) {
<#
.SYNOPSIS

This script should be able to decrpt all passwords stored in the RDCMan config file

Function: Decrypt-RDCMan
Author:Ben Turner @benpturner, Rich Hicks @scriptmonkey_

.EXAMPLE

Decrypt-RDCMan -FilePath
#>
    if (!$FilePath) {
        [xml]$config = Get-Content "$env:LOCALAPPDATA\microsoft\remote desktop connection manager\rdcman.settings"
        $Xml = Select-Xml -Xml $config -XPath "//FilesToOpen/*"
        $Xml | select-object -ExpandProperty "Node"| % {Write-Output "Decrypting file: " $_.InnerText; Decrypt-RDCMan $_.InnerText}
    } else {
    [xml]$Types = Get-Content $FilePath

    $Xml = Select-Xml -Xml $Types -XPath "//logonCredentials"

    # depending on the RDCMan version we may need to change the XML search 
    $Xml | select-object -ExpandProperty "Node" | % { $pass = Decrypt-DPAPI $_.Password; $_.Domain + "\" + $_.Username + " - " + $Pass + " - " + "Hash:" + $_.Password + "`n" } 

    # depending on the RDCMan version, we may have to use search through the #text field in the XML structure 
    $Xml | select-object -ExpandProperty "Node" | % { $pass = Decrypt-DPAPI $_.Password."#text"; $_.Domain + "\" + $_.Username + "`n" + $Pass + " - Hash: " + $_.Password."#text" + "`n"}
    }
}

function Decrypt-DPAPI ($EncryptedString) {
    # load the Security Assembly into the PS runspace
    Add-Type -assembly System.Security
    $encoding= [System.Text.Encoding]::ASCII
    $uencoding = [System.Text.Encoding]::UNICODE

    # try and decrypt the password with the CurrentUser Scope
    try {
        $encryptedBytes = [System.Convert]::FromBase64String($encryptedstring)
        $bytes1 = [System.Security.Cryptography.ProtectedData]::Unprotect($encryptedBytes, $null, [System.Security.Cryptography.DataProtectionScope]::CurrentUser)
        [System.Text.Encoding]::Convert([System.Text.Encoding]::UNICODE, $encoding, $bytes1) | % { $myStr1 += [char]$_}
        echo $myStr1
    } 
    catch {
        # try and decrypt the password with the LocalMachine Scope only if the CurrentUser fails
        try {
            $encryptedBytes = [System.Convert]::FromBase64String($encryptedstring)
            $bytes1 = [System.Security.Cryptography.ProtectedData]::Unprotect($encryptedBytes, $null, [System.Security.Cryptography.DataProtectionScope]::LocalMachine)
            [System.Text.Encoding]::Convert([System.Text.Encoding]::UNICODE, $encoding, $bytes1) | % { $myStr1 += [char]$_}
            echo $myStr1
        }
        catch {
            echo "Could not decrypt password"
        }
    }
}

Execute o script no Powershell ISE, que deve registrar as funções. Em seguida, execute simples:

Decrypt-RDCMan -FilePath MyRDGfile.rdg


O link acima está quebrado. Existe o que parece ser um programa semelhante aqui .
G-Man diz 'Reinstate Monica'

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.