[url]
[url]
(一)linked servers
mssql在資料庫中hash本地sql口令,而linked server口令則加密儲存。如果mssql可以解密它們,那麼你也可以使用powershell指令碼來做相同的事。
mssql伺服器允許user建立鏈結來連線到外部的服務去,典型的是其他的mssql伺服器。如果使用mssql口令,那麼賬號和密碼加密儲存在資料庫中,而且他們是可以逆向的格式。不可以使用單向hash,因為mssql必須使用明文口令來認證其他的伺服器。
mssql儲存伺服器資訊,包含加密密碼在master.sys.syslnklgns表中。特別的是,加密的密碼儲存在"pwdhash"列(即使它不是乙個hash)。
[img]
master.sys.syslnklgns 不能通過普通的sql連線訪問,但是可以使用dac*(需要sysadmin特權來開啟乙個dac連線。但是管理員許可權是必須的。如果本地管理員沒有sysadmin許可權,你將需要偽裝成mssql 賬戶或本地管理員賬戶。
接下來的過程需要service master key,service master key是sql伺服器加密的根源。當第一次需要使用它加密密碼的時候它將會被建立。smk儲存於master.sys.key_encryptions,通過key_id 102找到。smk使用windows data protection api加密並且有兩個版本:乙個加密為localmachine另乙個在當前user的上下文中。我們選擇第乙個版本,它可以不需要偽裝成服務賬號來解密。
[img]
額外的熵可以用來強化加密,但是熵位元組可以在登錄檔中找到:hklm:softwaremicrosoftmicrosoft sql server[instancename]securityentropy,需要本地管理員許可權來訪問登錄檔。
[img]
根據smk的長度或mssql的版本,我們可以確定加密演算法:mssql2012使用aes,之前版本使用3des
使用來解密
指令碼必須在mssql伺服器本地執行(因為dpapi需要訪問local machin key)執行指令碼必須有所有db的sysadmin許可權以及本地管理員許可權(來獲得登錄檔中的熵)。如果uac啟動了,那麼必須以管理員來執行指令碼。
1)識別mssql 伺服器的db
2)為每乙個db嘗試建立乙個dac連線
3)從master.sys.syslnklgns表中的pwdhash列選出linked伺服器口令
4)從每個db的master.sys.key_encryptions表選出key_id為102的msk。根據thumbprint列選出加密為localmachine的版本
5)從登錄檔中提取熵
6)解密smk
7)指令碼確定加密演算法
8)使用smk解密linked伺服器口令
9)成功結果如下[img]
(二)mssql口令
mssql允許user往資料庫中新增口令。這些口令,典型的windows使用者名稱和密碼,可以用來訪問mssql伺服器以外的資源。
乙個例子就是mssql**賬戶。當執行xp_cmdshell的時候,預設是使用mssql賬戶。但是如果配置**賬戶,則可以使用許可權較低的**賬戶而不是mssql伺服器賬戶來訪問系統資源。
當往伺服器中新增口令的時候,密碼是可逆向的格式。
mssql儲存口令密碼在master.sys.sysobjvalues表中,可以使用下面的語句來確定加密的密碼位置
[quote]
select object_definition(object_id('sys.credentials'))
[/quote]
master.sys.sysobjvalues中有很多資料,但是口令資訊的valueclass是28.加密的密碼存在於imageval 列並且valclass=28 以及 valnum=2.
[img]
需要使用dac來訪問master.sys.sysobjvalues。
使用指令碼 來解密密碼
[quote]ps c:\> get-mssqlcredentialpasswords | out-gridview[/quote]
[img]
解密MSSQL鏈結資料庫的密碼
文章很多專有名詞,而且老外說話的方式和中國的差別還是太大了點 所以有很多地方翻譯的不是很好,見諒。從重要系統中獲取明文密碼的過程總是充滿著樂趣。mssql伺服器對本地儲存的密碼是進行了加密操作的,鏈結伺服器的相關憑證也不例外,但與此同時mssql也是有自己的手段可以對相關的密碼憑證進行解密。而你可以...
查詢mssql 密碼
select name,password from syslogins select master.dbo.fn varbintohexstr password hash from sys.sql logins where name sa 竊取雜湊口令 sql server sha1加密 版本 se...
查詢mssql 密碼
select name,password from syslogins select master.dbo.fn varbintohexstr password hash from sys.sql logins where name sa 竊取雜湊口令 sql server sha1加密 版本 se...