Odszyfruj hasło RDP zapisane w pliku .rdg

12

Czy istnieje sposób na odszyfrowanie hasła zapisanego w pliku .rdg ( Remote Desktop Connection Manager ), pod warunkiem, że znasz nazwę użytkownika i hasło użytkownika, który je utworzył?

Wiem, że hasło jest szyfrowane na podstawie użytkownika, który je utworzył. Użytkownik jest użytkownikiem domeny i próbuję użyć pliku .rdg w domu (domena niedostępna). Czy mogę „symulować” bycie użytkownikiem domeny, skoro znam nazwę użytkownika + hasło? Pamiętaj, że dostęp sieciowy do domeny jest niedostępny. Fizyczny dostęp do oryginalnej maszyny jest również niedostępny.

Wypróbowałem tę metodę , ale (co nie jest zaskoczeniem) mam

„Wyjątek wywołujący DecryptString z 2 argumentami: Nie można odszyfrować przy użyciu poświadczenia XXXX”

(XXX to mój bieżący login domowy).

pkExec
źródło

Odpowiedzi:

15

Oto skrypt Powershell, który wykona zadanie ...

Otwórz plik RDG w notatniku, aby uzyskać zaszyfrowane hasło. Odkryłem, że RDG zawierało zapisane przeze mnie „profile”, a także hasła zapisane na serwer.

Teraz użyj tego samego konta komputera i systemu Windows, które utworzyło plik RDG, aby uruchomić następujące polecenia programu PowerShell, aby zobaczyć hasło. Musisz użyć tego samego konta do odszyfrowania.

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

Źródło: https://blog.prudhomme.wtf/use-powershell-to-decrypt-password-stored-in-a-rdg-file/ przez THOMAS PRUD'HOMME

Rozpoznać
źródło
3
Linki zewnętrzne mogą się zepsuć lub być niedostępne, w takim przypadku Twoja odpowiedź nie byłaby przydatna. Prosimy o podanie niezbędnych informacji w odpowiedzi i skorzystanie z linku do przypisania i dalszego czytania. Dzięki.
fixer1234
1
Uwielbiam sposób, w jaki publikujesz ten sam link, który opublikowałem w moim pierwotnym pytaniu, mówiąc, że nie działa (ponieważ nie ma dostępu do sieci do domeny)
pkExec
@pkExec Ta metoda działała dla mnie. Domyślam się, że istnieje inny sposób rozwiązania problemu z domeną. (Prawdopodobnie potrzebujesz dostępu do konta użytkownika domeny, które zaszyfrowało hasło, a to może oznaczać, że musisz ponownie połączyć się z domeną.)
jpaugh
2

Użyj następującego skryptu Powershell, aby odszyfrować wszystkie hasła w pliku RDG za jednym razem. https://github.com/nettitude/PoshC2/blob/master/resources/modules/Decrypt-RDCMan.ps1

W przypadku, gdy link się nie powiedzie, oto treść odniesienia:

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

Uruchom skrypt w Powershell ISE, który powinien zarejestrować funkcje. Następnie prosty bieg:

Deszyfruj-RDCMan -FilePath MyRDGfile.rdg

Sahil Shah
źródło
Powyższy link jest zepsuty. Nie jest to, co wydaje się być podobny program tutaj .
G-Man mówi „Reinstate Monica”