Déchiffrer le mot de passe RDP stocké dans le fichier .rdg

11

Existe-t-il un moyen de déchiffrer un mot de passe stocké dans un fichier .rdg ( Remote Desktop Connection Manager ), à condition que vous connaissiez le nom d'utilisateur et le mot de passe de l'utilisateur qui l'a créé?

Je sais que le mot de passe est crypté en fonction de l'utilisateur qui l'a créé. L'utilisateur est un utilisateur de domaine et j'essaie d'utiliser le fichier .rdg à la maison (domaine non disponible). Puis-je "simuler" être l'utilisateur du domaine, puisque je connais le nom d'utilisateur + mot de passe? N'oubliez pas que l'accès réseau au domaine n'est pas disponible. L'accès physique à la machine d'origine n'est pas non plus disponible.

J'ai essayé cette méthode , mais (sans surprise) je reçois

"Exception appelant DecryptString avec 2 argument (s): échec du décryptage à l'aide des informations d'identification XXXX"

(XXX est mon identifiant de connexion actuel.)

pkExec
la source

Réponses:

15

Voici un script Powershell qui fera le travail ...

Ouvrez le fichier RDG avec le bloc-notes pour obtenir le mot de passe crypté. J'ai trouvé que RDG contenait les «profils» que j'avais enregistrés, ainsi que les mots de passe enregistrés par serveur.

Utilisez maintenant le même ordinateur et le même compte Windows qui ont créé le fichier RDG pour exécuter les commandes powershell suivantes pour voir le mot de passe. Vous devez utiliser le même compte pour décrypter.

> $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)

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

Ken
la source
3
Les liens externes peuvent se rompre ou ne pas être disponibles, auquel cas votre réponse ne serait pas utile. Veuillez inclure les informations essentielles dans votre réponse et utiliser le lien pour l'attribution et la lecture ultérieure. Merci.
fixer1234
1
J'adore la façon dont vous publiez le même lien que celui que j'ai publié dans ma question d'origine, en disant que cela ne fonctionne pas (car il n'y a pas d'accès réseau au domaine)
pkExec
@pkExec Cette méthode a fonctionné pour moi. Je suppose qu'il existe une autre façon de résoudre le problème de domaine. (Vous devez probablement avoir accès au compte d'utilisateur du domaine qui a chiffré le mot de passe, et cela peut signifier que vous devez vous reconnecter au domaine.)
jpaugh
1

Utilisez le script Powershell suivant pour décrypter tous les mots de passe d'un fichier RDG en une seule fois. https://github.com/nettitude/PoshC2/blob/master/resources/modules/Decrypt-RDCMan.ps1

En cas d'échec du lien, voici le contenu pour référence:

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

Exécutez le script dans Powershell ISE, qui devrait enregistrer les fonctions. Puis exécution simple:

Decrypt-RDCMan -FilePath MyRDGfile.rdg

Sahil Shah
la source
Le lien ci-dessus est rompu. Il y a ce qui semble être un programme similaire ici .
G-Man dit «Réinstalle Monica» le