Розшифруйте пароль RDP, що зберігається у файлі .rdg


12

Чи є спосіб розшифрувати пароль, що зберігається у файлі .rdg ( диспетчер підключень віддаленого робочого столу ), даючи вам знати ім’я користувача та пароль користувача, який його створив?

Я знаю, що пароль шифрується на основі користувача, який його створив. Користувач - користувач домену, і я намагаюся використовувати .rdg-файл вдома (домен недоступний). Чи можу я "імітувати" користувача домену, оскільки знаю ім'я користувача + пароль? Пам'ятайте, що мережевий доступ до домену недоступний. Фізичний доступ до оригінальної машини також недоступний.

Я спробував цей метод , але (не дивно) отримую

"Виняток викликає DecryptString з 2 аргументами: Не вдалося розшифрувати за допомогою облікових даних XXXX"

(XXX - мій поточний домашній логін.)

Відповіді:


15

Ось сценарій Powershell, який зробить роботу ...

Відкрийте файл RDG із блокнотом, щоб отримати зашифрований пароль. Я виявив, що RDG містить збережені «профілі», а також збережені паролі на одному сервері.

Тепер використовуйте той самий обліковий запис комп'ютера та Windows, який створив файл RDG, щоб запустити наступні команди PowerSll, щоб побачити пароль. Ви повинні використовувати той самий обліковий запис, щоб розшифрувати.

> $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/ автор THOMAS PRUD'HOMME


3
Зовнішні посилання можуть розірватися або бути недоступними, і тоді ваша відповідь не буде корисною. Будь ласка, включіть у відповідь важливу інформацію та скористайтеся посиланням для віднесення та подальшого читання. Дякую.
fixer1234

1
Мені подобається, як ви публікуєте те саме посилання, яке я розмістив у своєму первинному запитанні, кажучи, що воно не працює (оскільки немає доступу до домену в мережі)
pkExec

@pkExec Цей метод працював на мене. Я здогадуюсь, є ще один спосіб вирішити проблему домену. (Можливо, вам потрібен доступ до облікового запису користувача домену, який зашифрував пароль, і це може означати, що вам потрібно знову підключитися до домену.)
jpaugh

2

Використовуйте наступний скрипт 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, який повинен реєструвати функції. Тоді простий запуск:

Розшифрувати-RDCMan -FilePath MyRDGfile.rdg


Вищезгадане посилання розірвано. Існує то , що , як видається, подібна програма тут .
G-Man каже "Відновити Моніку"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.