Dekripsi kata sandi RDP yang disimpan dalam file .rdg

11

Apakah ada cara untuk mendekripsi kata sandi yang disimpan dalam file .rdg ( Remote Desktop Connection Manager ), asalkan Anda tahu nama pengguna dan kata sandi pengguna yang membuatnya?

Saya tahu bahwa kata sandi dienkripsi berdasarkan pengguna yang membuatnya. Pengguna adalah pengguna domain, dan saya mencoba menggunakan file .rdg di rumah (domain tidak tersedia). Bisakah saya "mensimulasikan" menjadi pengguna domain, karena saya tahu nama pengguna + kata sandi? Ingat, akses jaringan ke domain tidak tersedia. Akses fisik ke mesin asli juga tidak tersedia.

Saya sudah mencoba metode ini , tetapi (tidak mengejutkan) saya dapatkan

"Pengecualian memanggil DecryptString dengan 2 argumen: Gagal mendekripsi menggunakan kredensial XXXX"

(XXX adalah login rumah saya saat ini.)

pkExec
sumber

Jawaban:

15

Berikut skrip Powershell yang akan melakukan pekerjaan ...

Buka file RDG dengan notepad untuk mendapatkan kata sandi terenkripsi. Saya menemukan bahwa RDG berisi 'profil' yang saya simpan, juga kata sandi yang disimpan per server.

Sekarang gunakan akun komputer dan windows yang sama yang membuat file RDG untuk menjalankan perintah PowerShell berikut untuk melihat kata sandi. Anda harus menggunakan akun yang sama untuk mendekripsi.

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

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

Ken
sumber
3
Tautan eksternal dapat rusak atau tidak tersedia, dalam hal ini jawaban Anda tidak akan berguna. Harap sertakan informasi penting dalam jawaban Anda dan gunakan tautan untuk atribusi dan bacaan lebih lanjut. Terima kasih.
fixer1234
1
Saya suka bagaimana Anda memposting tautan yang sama dengan yang saya posting di pertanyaan asli saya, mengatakan itu tidak berfungsi (karena tidak ada akses jaringan ke domain)
pkExec
@ pkExec Metode ini bekerja untuk saya. Saya menduga ada cara lain untuk menyelesaikan masalah domain. (Anda mungkin perlu akses ke akun pengguna domain yang mengenkripsi kata sandi, dan itu mungkin berarti Anda harus menyambung kembali ke domain.)
jpaugh
1

Gunakan skrip Powershell berikut untuk mendekripsi semua kata sandi dalam file RDG dalam satu pemotretan. https://github.com/nettitude/PoshC2/blob/master/resources/modules/Decrypt-RDCMan.ps1

Jika tautan gagal, inilah konten untuk referensi:

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

Jalankan script di Powershell ISE, yang seharusnya mendaftarkan fungsi. Maka jalankan sederhana:

Decrypt-RDCMan -FilePath MyRDGfile.rdg

Sahil Shah
sumber
Tautan di atas rusak. Tampaknya ada program serupa di sini .
G-Man Mengatakan 'Reinstate Monica'