工具介绍
SQLRecon是一款使用C#开发的MS-SQL渗透工具包,专为攻击性侦察和后期渗透而设计;有关每种技术的详细使用示例可参阅 wiki 。
关注【Hack分享吧】公众号,回复关键字【230601】获取下载链接
类似工具还有:SharpSQLTools、PySQLTools,大家可以自己去看下,根据实际场景使用。
工具参数
枚举
SQLRecon 支持 MSSQL SPN 的 Active Directory 枚举,类似于 PowerUpSQL 的 Get-SQLInstanceDomain.
枚举类型 (-e):
-e domain - 使用当前用户令牌为MSSQL SPN枚举AD
[+] -d domain.local | (可选) Domain FQDN
强制参数
强制参数包括身份验证类型(Windows、本地或 Azure)、连接参数和模块。
身份验证类型 (-a):
-a Windows - Windows身份验证,这使用当前用户令牌
-a Local - 本地身份验证,这需要本地数据库用户的凭据
-a Azure - Azure AD域用户名和密码身份验证,这需要域用户的凭据
如果身份验证类型是Windows,那么您将需要提供以下参数:
-s SERVERNAME - SQL服务器主机名/IP
-d DATABASE - SQL服务器数据库名称,默认为“master”
-r PORT - 默认端口1433
-m MODULE - 您要使用的模块
如果身份验证类型是Local,那么您将需要提供以下参数:
-s SERVERNAME - SQL服务器主机名/IP
-d DATABASE - SQL服务器数据库名称,默认为“master”
-u USERNAME - 本地SQL用户的用户名
-p PASSWORD - 本地SQL用户的密码
-r PORT - 默认端口1433
-m MODULE - 您要使用的模块
如果身份验证类型是Azure,则您需要提供以下参数:
-s SERVERNAME - SQL服务器主机名/IP
-d DATABASE - SQL服务器数据库名称,默认为“master”
-r DOMAIN.COM - 域的FQDN
-u USERNAME - 域用户的用户名
-p PASSWORD - 域用户的密码
-m MODULE - 您要使用的模块
注:有时 SQL Server 可能不会使用标准 TCP 端口,如:MSSQL 故障转移集群。如果身份验证类型是Windows或Local ,您可以选择通过 -r 参数来设置非标准连接端口。默认情况下 SQLRecon 将通过 1433 端口连接到数据库。
标准模块
标准模块用于与单个 MS SQL 服务器进行交互。
标准模块(-m):
info - 打印有关SQL服务的信息
query -o QUERY - 执行任意SQL查询
whoami - 查看您登录的用户、映射的用户以及存在的角色
users- 查看哪些用户帐户和组可以针对数据库进行身份验证
databases - 显示SQL服务器上存在的所有数据库
tables -o DATABASE - 显示您指定的数据库中的所有表
search -o KEYWORD - 在您连接的数据库的表中搜索列名
smb -o SHARE - 捕获NetNTLMv2哈希
↓命令执行(需要系统管理员角色或类似角色)
enablexp - 启用xp_cmdshell
disablexp - 禁用xp_cmdshell
xpcmd -o COMMAND - 使用xp_cmdshell执行任意系统命令
enableole - 启用OLE自动化程序
disableole - 禁用OLE自动化程序
olecmd -o COMMAND - 使用OLE自动化程序执行任意系统命令
enableclr - 启用自定义CLR程序集
disableclr - 禁用自定义CLR程序集
clr -o DLLPATH -f FUNCTION - 在自定义存储过程中加载并执行.NET程序集
agentstatus - 检查SQL代理是否正在运行并获取作业
agentcmd -o COMMAND - 执行任意系统命令
模拟模块
模拟模块用于在模拟 SQL 用户的上下文中与单个 MS SQL 服务器进行交互。
模拟模块(-m):
impersonate - 枚举任何可以被模拟的用户帐户
iwhoami -i IMPERSONATEUSER - 查看您登录的用户、映射的用户以及存在的角色
iusers -i IMPERSONATEUSER - 查看哪些用户帐户和组可以针对数据库进行身份验证
iquery -i IMPERSONATEUSER -o QUERY - 作为模拟用户执行任意SQL查询
↓命令执行(需要系统管理员角色或类似角色)
ienablexp -i IMPERSONATEUSER - 启用xp_cmdshell
idisablexp -i IMPERSONATEUSER - 禁用xp_cmdshell
ixpcmd -i IMPERSONATEUSER -o COMMAND - 使用xp_cmdshell执行任意系统命令
ienableole -i IMPERSONATEUSER - 启用OLE自动化程序
idisableole -i IMPERSONATEUSER - 禁用OLE自动化过程
iolecmd -i IMPERSONATEUSER -o COMMAND - 使用OLE自动化程序执行任意系统命令
ienableclr - 启用自定义CLR程序集
idisableclr - 禁用自定义CLR程序集
iclr -o DLLPATH -f FUNCTION - 在自定义存储过程中加载并执行.NET程序集
iagentstatus -i IMPERSONATEUSER - 检查SQL代理是否正在运行并获取作业
iagentcmd -i IMPERSONATEUSER -o COMMAND - 执行任意系统命令
链接的 SQL Server 模块
当您能够通过已建立的连接与链接的 SQL 服务器进行交互时,链接的 SQL Server 模块是有效的。
链接的SQLServer模块(-m):
links - 枚举任何链接的SQL服务器
lquery -l LINKEDSERVERNAME -o QUERY - 在链接的SQL服务器上执行任意SQL查询
lwhoami -l LINKEDSERVERNAME - 查看您在链接的SQL服务器上登录的用户
lusers -l LINKEDSERVERNAME - 查看哪些用户帐户和组可以针对链接的SQL服务器上的数据库进行身份验证
ldatabases -l LINKEDSERVERNAME - 显示链接的SQL服务器上存在的所有数据库
ltables -l LINKEDSERVERNAME -o DATABASE-显示链接的SQL服务器上提供的数据库中的所有表
lsmb -l LINKEDSERVERNAME -o SHARE - 从链接的SQL服务器捕获NetNTLMv2哈希
↓命令执行(需要系统管理员角色或类似角色)
lenablerpc -l LINKEDSERVERNAME - 在链接的SQL服务器上启用RPC和RPC out
ldisablerpc -l LINKEDSERVERNAME - 在链接的SQL服务器上禁用RPC和RPC out
lenablexp -l LINKEDSERVERNAME - 在链接的SQL服务器上启用xp_cmdshell
ldisablexp -l LINKEDSERVERNAME - 在链接的SQL服务器上禁用xp_cmdshell
lxpcmd -l LINKEDSERVERNAME -o COMMAND - 在链接的SQL服务器上使用xp_cmdshell执行任意系统命令
lenableole -l LINKEDSERVERNAME - 在链接的SQL服务器上启用OLE自动化过程
ldisableole -l LINKEDSERVERNAME - 在链接的SQL服务器上禁用OLE自动化过程
lolecmd -l LINKEDSERVERNAME -o COMMAND - 在链接的SQL服务器上使用OLE自动化过程执行任意系统命令
lenableclr -l LINKEDSERVERNAME - 在链接的SQL服务器上启用自定义CLR程序集
ldisableclr -l LINKEDSERVERNAME - 在链接的SQL服务器上禁用自定义CLR程序集
lclr -o DLLPATH -f FUNCTION - 在链接的SQL服务器上的自定义存储过程中加载并执行.NET程序集
lagentstatus -l LINKEDSERVERNAME - 检查SQL代理是否正在运行并在链接的SQL服务器上获取作业
lagentcmd -l LINKEDSERVERNAME -o COMMAND - 在链接的SQL服务器上执行任意系统命令