Giải mã mật khẩu RDP được lưu trữ trong tệp .rdg


11

Có cách nào để giải mã mật khẩu được lưu trữ trong tệp .rdg ( Trình quản lý kết nối máy tính từ xa ), cho bạn biết tên người dùng và mật khẩu của người dùng đã tạo mật khẩu không?

Tôi biết rằng mật khẩu được mã hóa dựa trên người dùng đã tạo ra nó. Người dùng là người dùng tên miền và tôi đang cố gắng sử dụng tệp .rdg tại nhà (tên miền không khả dụng). Tôi có thể "mô phỏng" là người dùng tên miền không, vì tôi biết tên người dùng + mật khẩu? Hãy nhớ rằng, truy cập mạng vào miền là không có sẵn. Truy cập vật lý vào máy ban đầu cũng không có sẵn.

Tôi đã thử phương pháp này , nhưng (không ngạc nhiên) tôi nhận được

"Ngoại lệ gọi DecryptString với 2 đối số: Không thể giải mã bằng thông tin xác thực XXXX"

(XXX là thông tin đăng nhập tại nhà hiện tại của tôi.)

Câu trả lời:


15

Đây là một kịch bản Powershell sẽ thực hiện công việc ...

Mở tệp RDG bằng notepad để lấy mật khẩu được mã hóa. Tôi thấy rằng RDG chứa 'hồ sơ' tôi đã lưu, cũng như mật khẩu được lưu trên mỗi máy chủ.

Bây giờ sử dụng cùng một tài khoản máy tính và windows đã tạo tệp RDG để chạy các lệnh powershell sau đây để xem mật khẩu. Bạn phải sử dụng cùng một tài khoản để giải mã.

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

Nguồn: https://blog.prudhomme.wtf/use-powershell-to-decrypt-password-stored-in-a-rdg-file/ bởi THOMAS PRUD'HOMME


3
Liên kết bên ngoài có thể bị hỏng hoặc không có sẵn, trong trường hợp đó, câu trả lời của bạn sẽ không hữu ích. Vui lòng bao gồm các thông tin cần thiết trong câu trả lời của bạn và sử dụng liên kết để ghi nhận và đọc thêm. Cảm ơn.
fixer1234

1
Tôi thích cách bạn đăng liên kết giống như tôi đã đăng trong câu hỏi ban đầu của mình, nói rằng nó không hoạt động (vì không có quyền truy cập mạng vào tên miền)
pkExec

@pkExec Phương pháp này hiệu quả với tôi. Tôi đoán có một cách khác để giải quyết vấn đề tên miền. (Bạn có thể cần quyền truy cập vào tài khoản người dùng tên miền đã mã hóa mật khẩu và điều đó có thể có nghĩa là bạn cần kết nối lại với tên miền.)
jpaugh

1

Sử dụng tập lệnh Powershell sau để giải mã tất cả mật khẩu trong tệp RDG trong một lần chụp. https://github.com/nettitude/PoshC2/blob/master/resource/modules/Decrypt-RDCMan.ps1

Trong trường hợp liên kết không thành công, đây là nội dung để tham khảo:

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

Thực thi tập lệnh trong Powershell ISE, cần đăng ký các chức năng. Sau đó, chạy đơn giản:

Giải mã-RDCMan -FilePath MyRDGfile.rdg


Các liên kết trên bị hỏng. Có những gì dường như là một chương trình tương tự ở đây .
G-Man nói 'Phục hồi Monica'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.