Jest kilka takich miejsc w SQL Server, gdzie administratorzy czasami umieszczają hasła użytkowników:
- w definicji linked server, gdzie połączenie ma być wykonywane dla każdego użytkownika lokalnej maszyny z wykorzystaniem zdalnego loginu sql-owego
- w definicji credentials, które są dalej wykorzystywane do uruchamiania jobów agenta na innym koncie niż konto SQL Agenta
Na pierwszy rzut oka może się wydawać, że te hasła są bezpieczne, bo przecież podczas wprowadzania zostaną wyświetlone gwiazdeczki, a na dodatek w tabelach systemowych hasła też nie można podejrzeć. No ale….
Tutaj https://github.com/NetSPI/Powershell-Modules/blob/master/Get-MSSQLLinkPasswords.psm1 znajduje się skrypt, który w oparciu o zapisy w rejestrze i w oparciu o najwyższe uprawnienia w SQL Serverze potrafi zaszyfrowane hasło odszyfrować. Dokładniejszy opis tego jak to jest robione znajduje się https://blog.netspi.com/decrypting-mssql-database-link-server-passwords/
Podobnie z credetials. Tutaj jest skrypt: https://github.com/NetSPI/Powershell-Modules/blob/5c2e1490b8f6aad3c1e2905c2fe9af62a179b145/Get-MSSQLCredentialPasswords.psm1 a tutaj opis teorii za nim stojącej: https://blog.netspi.com/decrypting-mssql-credential-passwords/
Warto zauważyć, że w/w linki nie służą włamywaniu się na serwer, ale stanowią pomoc dla administratora, który przecież sam kiedyś te hasła wprowadził i np. je zapomniał. Pamiętajmy, że do uruchomienia powyższych skryptów są potrzebne uprawnienia sysadmin oraz lokalne logowanie na maszynę, na której jest zainstalowany SQL. Otwierane połączenie do SQL to DAC