导出SqlServer凭据来方便你的内网渗透

还是netspi博客中的提到的思路,可以在DAC登录后导出sqlserver后期添加的凭据。由msdn所述,这些凭据多数情况下是windows用户名和密码,在内网渗透时可能会有用。
原文提供的powershell脚本依旧不能在中文(也可能是所有多字节操作系统如鬼子语)上运行,所以进行了修正,顺便改成了exe和AspxSpy插件方便调用。

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

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

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

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

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

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

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

测试环境搭建:

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

测试一键获取工具:在非DAC连接的查询中用xp_cmdshell执行lscredpwd.exe
测试AspxSpy插件:为iis应用程序域和sqlserver的服务进程设置成同一账户(如network service),之后在AspxSpy中加载插件。

测试截图:
pic1

已知错误信息:

已成功与服务器建立连接,但是在登录过程中发生错误。 (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

[via@90sec]