还是netspi博客中的提到的思路,可以在DAC登录后导出sqlserver后期添加的凭据。由msdn所述,这些凭据多数情况下是windows用户名和密码,在内网渗透时可能会有用。
原文提供的powershell脚本依旧不能在中文(也可能是所有多字节操作系统如鬼子语)上运行,所以进行了修正,顺便改成了exe和AspxSpy插件方便调用。
工具与源码见附件,其中Get-MSSQLCredentialPasswords.psm1为修改后的powershell脚本,调用方式:
1
2
|
import-module Get-MSSQLCredentialPasswords.psm1
Get-MSSQLCredentialPasswords
|
注意:不能显示中文,超长密码只能显示一部分。
lscredpwd.exe为一键获取工具,直接执行即可。lscredpwd.js为源码,编译命令行:
1
|
jsc /r:system.xml.dll lspwd.js
|
GetMSSQLCredentialsPasswordPlugin.cs为AspxSpy插件源码,编译命令行:
1
2
|
csc /t:library GetMSSQLCredentialsPasswordPlugin.cs
PluginDeflater GetMSSQLCredentialsPasswordPlugin.dll #压缩插件以防止拦截
|
jsc和csc在.net安装目录下面,为保证兼容性建议用.net 2.0版本的编译器编译。
GetMSSQLCredentialsPasswordPlugin.GetMSSQLCredentialsPasswordPlugin.dll.Deflated分别为未压缩和压缩后的插件。插件信息如下:
1
2
3
4
|
TypeName:Zcg.Test.AspxSpyPlugins.GetMSSQLCredentialsPasswordPlugin
MethodName:Run
HTML Result:true
Params:null
|
输出:当前服务器所有能成功连接的sqlserver实例中所有凭据信息。
测试环境搭建:
执行以下sql用于添加凭据:
1
2
|
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
[via@90sec]
Copyright © hongdaChiaki. All Rights Reserved. 鸿大千秋 版权所有
联系方式:
地址: 深圳市南山区招商街道沿山社区沿山路43号创业壹号大楼A栋107室
邮箱:service@hongdaqianqiu.com
备案号:粤ICP备15078875号