现在的位置: 首页 Sql >正文

MSSQL凭据密码获取工具

还是netspi博客中的提到的思路,可以在DAC登录后导出sqlserver后期添加的凭据。由msdn所述,这些凭据多数情况下是windows用户名和密码,在内网渗透时可能会有用。

原文提供的powershell脚本依旧不能在中文(也可能是所有多字节操作系统如鬼子语)上运行,所以进行了修正,顺便改成了exe和AspxSpy插件方便调用。


工具与源码见附件,其中Get-MSSQLCredentialPasswords.psm1为修改后的powershell脚本,调用方式:

import-module Get-MSSQLCredentialPasswords.psm1
Get-MSSQLCredentialPasswords

注意:不能显示中文,超长密码只能显示一部分。


lscredpwd.exe为一键获取工具,直接执行即可。lscredpwd.js为源码,编译命令行:

jsc /r:system.xml.dll lspwd.js


GetMSSQLCredentialsPasswordPlugin.cs为AspxSpy插件源码,编译命令行:

csc /t:library GetMSSQLCredentialsPasswordPlugin.cs
PluginDeflater GetMSSQLCredentialsPasswordPlugin.dll   #压缩插件以防止拦截

jsc和csc在.net安装目录下面,为保证兼容性建议用.net 2.0版本的编译器编译。


GetMSSQLCredentialsPasswordPlugin.GetMSSQLCredentialsPasswordPlugin.dll.Deflated分别为未压缩和压缩后的插件。插件信息如下:

TypeName:Zcg.Test.AspxSpyPlugins.GetMSSQLCredentialsPasswordPlugin
MethodName:Run
HTML Result:true
Params:null

输出:当前服务器所有能成功连接的sqlserver实例中所有凭据信息。


测试环境搭建:

执行以下sql用于添加凭据:

CREATE CREDENTIAL cred1 WITH IDENTITY = '管理员1A', SECRET = '密码asdc12xe1CVYR%#^BG(G*$FW$XSZFDXtgfgfsrtx';
CREATE CREDENTIAL cred2 WITH IDENTITY = '管理员1B', SECRET = '密码asdc12x密码SZFDXt密码tx';

测试一键获取工具:在非DAC连接的查询中用xp_cmdshell执行lscredpwd.exe

测试AspxSpy插件:为iis应用程序域和sqlserver的服务进程设置成同一账户(如network service),之后在AspxSpy中加载插件。

测试截图:


已知错误信息:

已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: TCP 提供程序, error: 0 - 指定的网络名不再可用。)

原因:DAC只支持单用户,出现此错误说明当前已经有一个活动的DAC连接。


不允许所请求的注册表访问权。

原因:当前用户不是sqlserver服务进程用户或administrator。


原文地址:https://blog.netspi.com/decrypting-mssql-credential-passwords/

msdn关于sqlserver凭据的信息:https://msdn.microsoft.com/zh-cn/library/ms189522.aspx

下载地址:       mssql_credentials_pwd.zip

百度网盘:http://pan.baidu.com/s/1eQGPy98

解压密码见注释。