Descifrar la contraseña RDP almacenada en el archivo .rdg

11

¿Hay alguna manera de descifrar una contraseña almacenada en un archivo .rdg ( Remote Desktop Connection Manager ), siempre que conozca el nombre de usuario y la contraseña del usuario que la creó?

Sé que la contraseña está encriptada según el usuario que la creó. El usuario es un usuario de dominio, y estoy tratando de usar el archivo .rdg en casa (dominio no disponible). ¿Puedo "simular" ser el usuario del dominio, ya que sé el nombre de usuario + contraseña? Recuerde, el acceso de red al dominio no está disponible. El acceso físico a la máquina original tampoco está disponible.

He intentado este método , pero (como era de esperar) me sale

"Excepción al llamar a DecryptString con 2 argumento (s): Error al descifrar usando la credencial XXXX"

(XXX es mi inicio de sesión actual).

pkExec
fuente

Respuestas:

15

Aquí hay un script de Powershell que hará el trabajo ...

Abra el archivo RDG con el bloc de notas para obtener la contraseña cifrada. Descubrí que RDG contenía los 'perfiles' que había guardado, así como las contraseñas guardadas por servidor.

Ahora use la misma cuenta de computadora y Windows que creó el archivo RDG para ejecutar los siguientes comandos de PowerShell para ver la contraseña. Tienes que usar la misma cuenta para descifrar.

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

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

Conocer
fuente
3
Los enlaces externos pueden romperse o no estar disponibles, en cuyo caso su respuesta no sería útil. Incluya la información esencial en su respuesta y use el enlace para la atribución y lectura adicional. Gracias.
fijador1234
1
Me encanta cómo publicas el mismo enlace que publiqué en mi pregunta original, diciendo que no funciona (ya que no hay acceso de red al dominio)
pkExec
@pkExec Este método funcionó para mí. Supongo que hay otra forma de resolver el problema del dominio. (Probablemente necesite acceso a la cuenta de usuario de dominio que cifró la contraseña, y podría significar que necesita volver a conectarse al dominio.)
jpaugh
1

Use el siguiente script de Powershell para descifrar todas las contraseñas en un archivo RDG de una sola vez. https://github.com/nettitude/PoshC2/blob/master/resources/modules/Decrypt-RDCMan.ps1

En caso de que el enlace falle, aquí está el contenido para referencia:

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

Ejecute el script en Powershell ISE, que debería registrar las funciones. Entonces simple ejecución:

Descifrar-RDCMan -FilePath MyRDGfile.rdg

Sahil Shah
fuente
El enlace de arriba está roto. Hay lo que parece ser un programa similar aquí .
G-Man dice 'reinstalar a Monica' el