Plesk использует симметричное шифрование для многих паролей в своей внутренней базе MySQL называющейся “psa”. В Интернете опубликовано несколько скриптов для их расшифровки, но ни одного для Windows. До сегодняшнего дня.
Симметрично зашифрованные пароли можно найти в следующих таблицах базы данных psa:
- accounts (столбец
password
) - databaseservers (столбец
admin_password
) - dsn (столбец
cstring
) - longtaskparams (запись
oldBackupkey
– это параметр дляbackup-encrypt-task
(из таблицыlongtasks
)) - misc (столбец
aps_password
) - servicenodeconfiguration (столбец
value
для секции MailGate / password) - smb_users (столбец
password
)
Симметрично зашифрованные пароли выглядят так: “$AES-128-CBC$ABNK35ZcqnbTYT4Q3mbaEA$HmGDWmtym6K3+kJ8uBoJOg”.
Они начинаются с “$AES-128-CBC$”. Далее между вторым и третьим знаком доллара расположен вектор инициализации AES. После него и до конца строки идут собственно зашифрованные данные.
В Linux симметричный ключ, использующийся Plesk’ом для шифрования таких паролей, находится в файле /etc/psa/private/secret_key
. В Windows, разработчики положили его в реестр: HKLM:\SOFTWARE\WOW6432Node\PLESK\PSA Config\Config\sym_key\sym_key
Для извлечения зашифрованного пароля из базы данных просто скопируйте его поле из таблицы с помощью любого инструмента для работы с MySQL, который вам нравится.
Скопированный пароль передайте в параметр -EncryptedString скрипта, который расположен ниже. Обратите внимание, что по умолчанию скрипт будет работать только на том же сервере, где установлен Plesk из базы которого вы скопировали пароль. Если вы хотите расшифровывать пароли на отдельной машине, извлеките из реестра симметричный ключ и передайте его в параметр -SymmetricKey.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
<# .SYNOPSIS Decrypts passwords symmetrically encrypted by Plesk on Windows. .DESCRIPTION Plesk uses symmetrical encryption for many passwords in its internal MySQL database "psa". With the help of this script you can now decrypt them for Plesk running on Windows as well. .PARAMETER EncryptedString An encrypted string you found Plesk's psa database .PARAMETER SymmetricKey Plesk symmetric encryption key. You can find it at HKLM:\SOFTWARE\WOW6432Node\PLESK\PSA Config\Config\sym_key\sym_key, but this script extracts it automatically. .EXAMPLE ConvertFrom-PleskSymmetricallyEncryptedString.ps1 -EncryptedString '$AES-128-CBC$ABNK35ZcqnbTYT4Q3mbaEA$HmGDWmtym6K3+kJ8uBoJOg' .OUTPUTS [string] .NOTES Author: Kirill Nikolaev Twitter: @exchange12rocks Web-site: https://exchange12rocks.org GitHub: https://github.com/exchange12rocks .LINK https://exchange12rocks.org/2021/02/08/how-to-decrypt-plesk-passwords-on-windows/ .LINK https://github.com/exchange12rocks/PS/blob/master/ConvertFrom-PleskSymmetricallyEncryptedString.ps1 .LINK https://mor-pah.net/2014/03/05/decrypt-plesk-11-passwords/ .LINK https://codeforcontent.com/blog/using-aes-in-powershell/ #> #Requires -Version 3.0 Param ( [Parameter(Mandatory)] [string]$EncryptedString, [byte[]]$SymmetricKey = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\PLESK\PSA Config\Config\sym_key' -Name sym_key).sym_key ) $EncryptedStringSplitted = $EncryptedString.Split('$') $IV = $EncryptedStringSplitted[2] $Data = $EncryptedStringSplitted[3] $IVRemainder = $IV.Length % 4 if ($IVRemainder) { $IV = $IV.PadRight($IV.Length + $IVRemainder, '=') } $DataRemainder = $Data.Length % 4 if ($DataRemainder) { $Data = $Data.PadRight($Data.Length + $DataRemainder, '=') } $AESCipher = New-Object -TypeName 'System.Security.Cryptography.AesCryptoServiceProvider' $AESCipher.Key = $SymmetricKey $EncryptedBytes = [System.Convert]::FromBase64String($Data) $AESCipher.IV = [System.Convert]::FromBase64String($IV) $Decryptor = $AESCipher.CreateDecryptor() $UnencryptedBytes = $Decryptor.TransformFinalBlock($EncryptedBytes, 0, $EncryptedBytes.Length) [System.Text.Encoding]::UTF8.GetString($UnencryptedBytes) |
Дополнительная информация по теме:
https://gist.github.com/gnanet/99f5e284c0f71032498625368ba67659
https://www.besuchet.net/2016/06/plesk-11-encrypted-hashed-password-authentication-php-on-psa-database/
https://mor-pah.net/2014/03/05/decrypt-plesk-11-passwords/
https://codeforcontent.com/blog/using-aes-in-powershell/