Decifrare la password RDP memorizzata nel file .rdg


11

Esiste un modo per decrittografare una password memorizzata in un file .rdg ( Remote Desktop Connection Manager ), fornendo il nome utente e la password dell'utente che l'ha creata?

So che la password è crittografata in base all'utente che l'ha creata. L'utente è un utente di dominio e sto cercando di utilizzare il file .rdg a casa (dominio non disponibile). Posso "simulare" l'utente del dominio, poiché conosco username + password? Ricorda, l'accesso alla rete al dominio non è disponibile. Anche l'accesso fisico alla macchina originale non è disponibile.

Ho provato questo metodo , ma (non sorprende) ottengo

"Eccezione che chiama DecryptString con 2 argomento / i: impossibile decifrare usando le credenziali XXXX"

(XXX è il mio attuale login di casa.)

Risposte:


15

Ecco uno script Powershell che farà il lavoro ...

Apri il file RDG con il blocco note per ottenere la password crittografata. Ho scoperto che RDG conteneva i "profili" che avevo salvato, nonché le password salvate per server.

Ora usa lo stesso account computer e windows che ha creato il file RDG per eseguire i seguenti comandi PowerShell per vedere la password. Devi usare lo stesso account per decifrare.

> $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/ di THOMAS PRUD'HOMME


3
I collegamenti esterni possono interrompersi o non essere disponibili, nel qual caso la tua risposta non sarebbe utile. Includi le informazioni essenziali nella tua risposta e usa il link per l'attribuzione e per ulteriori letture. Grazie.
Fixer 1234

1
Adoro il modo in cui pubblichi lo stesso link che ho pubblicato nella mia domanda originale, dicendo che non funziona (poiché non esiste un accesso di rete al dominio)
pkExec

@pkExec Questo metodo ha funzionato per me. Immagino che ci sia un altro modo per risolvere il problema del dominio. (Probabilmente hai bisogno dell'accesso all'account utente del dominio che ha crittografato la password e potrebbe significare che devi riconnetterti al dominio.)
jpaugh

1

Utilizzare il seguente script Powershell per decrittografare tutte le password in un file RDG in una sola volta. https://github.com/nettitude/PoshC2/blob/master/resources/modules/Decrypt-RDCMan.ps1

Nel caso in cui il collegamento fallisca ecco il contenuto per riferimento:

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"
        }
    }
}

Eseguire lo script in Powershell ISE, che dovrebbe registrare le funzioni. Quindi corsa semplice:

Decrypt-RDCMan -FilePath MyRDGfile.rdg


Il link sopra è interrotto. C'è quello che sembra essere un programma simile qui .
G-Man dice "Reinstate Monica" il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.