一个C# MS SQL工具箱,设计用于进攻性侦察和后渗透阶段

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/skahwah/SQLRecon

SQL侦察

描述

AC# MS-SQL 工具包,专为攻击性侦察和后期开发而设计。有关每种技术的详细使用信息,请参阅wiki

用法

您可以从发布页面获取 SQLRecon 的副本。或者,您可以自行编译解决方案这应该与克隆存储库一样直接,双击解决方案文件并构建。

枚举

SQLRecon 支持 MSSQL SPN 的 Active Directory 枚举,类似于PowerUpSQL 的 Get-SQLInstanceDomain.

  • -e - 枚举类型
    • 域-d域| (可选)域 FQDN - 使用当前用户令牌为 MSSQL SPN 枚举 AD。

强制参数

强制参数包括身份验证类型(Windows、本地或 Azure)、连接参数和模块。

  • -a - 身份验证类型
    • -a Windows - 使用 Windows 身份验证。这使用当前用户令牌。
    • -a Local - 使用本地身份验证。这需要本地数据库用户的凭据。
    • -a Azure - 使用 Azure AD 域用户名和密码身份验证。这需要域用户的凭据。

如果身份验证类型是Windows,那么您将需要提供以下参数。

  • -s SERVERNAME - SQL 服务器主机名
  • -d DATABASE -(可选)SQL 服务器数据库名称,默认为“master”
  • -m MODULE - 您要使用的模块

如果身份验证类型是Local,那么您将需要提供以下参数。

  • -d DATABASE -(可选)SQL 服务器数据库名称,默认为“master”
  • -u USERNAME - 本地 SQL 用户的用户名
  • -p PASSWORD - 本地 SQL 用户的密码
  • -m MODULE - 您要使用的模块

如果身份验证类型是Azure,则您需要提供以下参数。

  • -d DATABASE -(可选)SQL 服务器数据库名称,默认为“master”
  • -r DOMAIN.COM - 域的 FQDN
  • -u USERNAME - 域用户的用户名
  • -p PASSWORD - 域用户的密码
  • -m MODULE - 您要使用的模块

在某些情况下,MS SQL Server 可能不会侦听标准 TCP 端口。一个很好的例子是 MS SQL 故障转移集群。如果身份验证类型是WindowsLocal ,您可以选择通过提供-r PORT标志来设置非标准连接端口。默认情况下,SQLRecon 将通过 TCP 端口 1433 连接到数据库。

标准模块

标准模块用于与单个 MS SQL 服务器进行交互。

  • info - 打印有关 SQL 服务的信息
  • query -o QUERY - 执行任意 SQL 查询
  • whoami - 查看您登录的用户、映射的用户以及存在的角色
  • 用户- 查看哪些用户帐户和组可以针对数据库进行身份验证
  • 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 服务器进行交互。

  • 模拟- 枚举可以模拟的任何用户帐户
  • 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 模块是有效的。

  • 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 服务器上执行任意系统命令

例子

请参阅维基。有关详细示例。

路线图

以下技术在未来版本的路线图上

  • 扩展枚举模块
标签:工具分享, SQL注入