.rdgファイルに保存されているRDPパスワードを復号化する


11

パスワードを作成したユーザーのユーザー名とパスワードを知っていれば、.rdg(リモートデスクトップ接続マネージャー)ファイルに保存されているパスワードを解読する方法はありますか?

パスワードは、それを作成したユーザーに基づいて暗号化されています。ユーザーはドメインユーザーであり、自宅で.rdgファイルを使用しようとしています(ドメインは利用できません)。ユーザー名とパスワードがわかっているので、ドメインユーザーであることを「シミュレート」できますか?ドメインへのネットワークアクセスは利用できません。元のマシンへの物理的なアクセスも利用できません。

私はこの方法を試しましたが、(当然のことながら)

「2つの引数でDecryptStringを呼び出す例外:XXXX資格情報を使用して復号化できませんでした」

(XXXは現在のホームログインです。)

回答:


15

ここに仕事をするPowershellスクリプトがあります...

暗号化されたパスワードを取得するには、メモ帳でRDGファイルを開きます。RDGには、保存した「プロファイル」と、サーバーごとに保存されたパスワードが含まれていることがわかりました。

次に、RDGファイルを作成したのと同じコンピューターとWindowsアカウントを使用して、次のPowerShellコマンドを実行し、パスワードを確認します。復号化するには同じアカウントを使用する必要があります。

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

ソース:https : //blog.prudhomme.wtf/use-powershell-to-decrypt-password-stored-in-a-rdg-file/ by THOMAS PRUD'HOMME


3
外部リンクが壊れたり、利用できなくなったりする場合があります。その場合、回答は役に立ちません。回答の中に重要な情報を含め、帰属を表示したりさらに読んだりするためにリンクを使用してください。ありがとう。
fixer1234 2017年

1
元の質問に投稿したのと同じリンクを投稿するのが好きです(ドメインへのネットワークアクセスがないため)
pkExec

@pkExecこの方法でうまくいきました。ドメインの問題を解決する別の方法があると思います。(おそらく、パスワードを暗号化したドメインユーザーアカウントにアクセスする必要があり、ドメインに再接続する必要がある可能性があります。)
jpaugh

1

次のPowershellスクリプトを使用して、RDGファイル内のすべてのパスワードを一度に復号化します。 https://github.com/nettitude/PoshC2/blob/master/resources/modules/Decrypt-RDCMan.ps1

リンクが失敗した場合の参照用のコンテンツは次のとおりです。

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

Powershell ISEでスクリプトを実行すると、関数が登録されます。次に、単純な実行:

Decrypt-RDCMan -FilePath MyRDGfile.rdg


上記のリンクは壊れています。ここに同様のプログラムのように見えるものがあります
G-Manが「Reinstate Monica」を

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.