mssqlproxy 是一个工具包,旨在通过受损的 Microsoft SQL Server 利用套接字重用(socket reuse)在受限环境中执行横向移动。客户端需要 impacket 和 SQL 服务器上的 sysadmin 权限。
在继续之前,请仔细阅读这篇文章。
它由三部分组成:
你可以自行编译库文件,或从发布页面(x64)下载。
要生成核心 DLL,只需将项目导入 Visual Studio(reciclador.sln)并编译。
要生成 CLR 程序集,首先需要找到 C# 编译器:
Get-ChildItem -Recurse "C:\Windows\Microsoft.NET\" -Filter "csc.exe" | Sort-Object fullname -Descending | Select-Object fullname -First 1 -ExpandProperty fullname
然后执行:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /target:library .\assembly.cs
编译完两个库后,将核心 DLL(reciclador)上传到目标服务器。
认证选项与原始 mssqlclient 相同。mssqlproxy 的选项:
proxy mode:
-reciclador path DLL 在服务器上的远程路径
-install 安装 CLR 程序集
-uninstall 卸载 CLR 程序集
-check 检查 CLR 是否准备就绪
-start 启动代理
-local-port port 本地监听端口
-clr local_path 本地 CLR 路径
-no-check-src-port 当连接非直接(例如通过代理)时使用此选项
我们还实现了两个命令(在 SQL shell 内)用于下载和上传文件。关于代理功能,我们有四个命令:
-clr 参数以从本地 DLL 文件读取生成的 CLR。-reciclador),该 DLL 可通过 upload 命令上传。-local-port,则默认监听 1337/tcp 端口。代理启动后,你就可以接入 proxychains 了 ;)
注意 #1: 如果使用非直接连接(例如中间存在代理),则需要使用 -no-check-src-port 标志,这样服务器仅检查源地址。
注意 #2: 目前仅支持 IPv4 目标(不支持 DNS 或 IPv6 地址)。
注意 #3: 请小心使用!目前如果尝试建立多个并发连接,MSSQL 服务将会崩溃。
重要提示: 务必在客户端按 Ctrl+C 停止 mssqlproxy。否则服务器可能会崩溃,你将需要手动重启 MSSQL 服务。
Pablo Martinez (@xassiz), Juan Manuel Fernandez (@TheXC3LL) [ www.blackarrow.net - www.tarlogic.com ]
本项目包含的所有代码均采用 MIT 许可证。mssqlclient.py 基于 Impacket。