PySQLRecon
PySQLRecon 是 @sanjivkawa 所创优秀项目 SQLRecon 的 Python 移植版。功能列表请参阅命令章节。
文章演示了如何使用 PySQLRecon 实现 SCCM TAKEOVER-1。
可通过 pip3 install pysqlrecon 安装 PySQLRecon,或克隆本仓库后运行 pip3 install .。
SQLRecon 的所有主要模块均有对应命令。标注 [PRIV] 的命令需要提升权限或 sysadmin 权限才能运行。标注 [NORM] 的命令普通用户通常也可运行,无需提升权限。
命令描述末尾标注了是否支持模拟([I])或在链接服务器上执行([L])。
adsi [PRIV] 从 ADSI 链接服务器获取 ADSI 凭据 [I,L]
agentcmd [PRIV] 使用代理作业执行系统命令 [I,L]
agentstatus [PRIV] 枚举 SQL 代理状态及作业 [I,L]
checkrpc [NORM] 枚举链接服务器的 RPC 状态 [I,L]
clr [PRIV] 加载并执行存储过程中的 .NET 程序集 [I,L]
columns [NORM] 枚举表中的列 [I,L]
databases [NORM] 枚举服务器上的数据库 [I,L]
disableclr [PRIV] 禁用 CLR 集成 [I,L]
disableole [PRIV] 禁用 OLE 自动化过程 [I,L]
disablerpc [PRIV] 禁用链接服务器的 RPC 和 RPC Out [I]
disablexp [PRIV] 禁用 xp_cmdshell [I,L]
enableclr [PRIV] 启用 CLR 集成 [I,L]
enableole [PRIV] 启用 OLE 自动化过程 [I,L]
enablerpc [PRIV] 启用链接服务器的 RPC 和 RPC Out [I]
enablexp [PRIV] 启用 xp_cmdshell [I,L]
impersonate [NORM] 枚举可模拟的用户
info [NORM] 收集 SQL 服务器信息
links [NORM] 枚举链接服务器 [I,L]
olecmd [PRIV] 使用 OLE 自动化过程执行系统命令 [I,L]
query [NORM] 执行自定义 SQL 查询 [I,L]
rows [NORM] 获取表中的行数 [I,L]
sample [NORM] 查询表数据的样本 [I,L]
sccm [SUBM] SCCM 特定命令的子模块
search [NORM] 在表中搜索列名 [I,L]
smb [NORM] 通过 xp_dirtree 强制进行 NetNTLM 认证 [I,L]
tables [NORM] 枚举数据库中的表 [I,L]
users [NORM] 枚举拥有数据库访问权限的用户 [I,L]
whoami [NORM] 获取登录用户、映射用户及角色信息 [I,L]
xpcmd [PRIV] 使用 xp_cmdshell 执行系统命令 [I,L]
SCCM 命令可通过运行 pysqlrecon [OPTIONS] sccm -h 查看(需要指定必要的全局标志,见用法)。
addadmin [PRIV] 将账户提升为完全管理员 [I]
credentials [NORM] 显示加密凭据 [I]
logons [NORM] 显示 SCCM 客户端及最后登录用户 [I]
removeadmin [PRIV] 移除提升的账户或提升的权限 [I]
sites [NORM] 收集 SCCM 站点信息 [I]
taskdata [NORM] 解密任务序列 [I]
tasklist [NORM] 显示任务序列 [I]
users [NORM] 枚举 SCCM 用户 [I]
PySQLRecon 具有全局选项(适用于任何命令),部分命令还会引入额外标志。所有全局选项必须在命令名称之前指定:
pysqlrecon [GLOBAL_OPTS] COMMAND [COMMAND_OPTS]
查看全局选项:
pysqlrecon --help
查看命令特定选项:
pysqlrecon [GLOBAL_OPTS] COMMAND --help
使用 --database 标志可更改要认证的数据库,或在某些 PySQLRecon 命令(query、tables、columns、rows)中使用的数据库。
使用 --link 标志可将 PySQLRecon 命令的目标执行位置指向链接服务器(而非当前认证的 SQL 服务器)。
使用 --impersonate 标志可在运行 PySQLRecon 命令时模拟用户帐户。
--link 和 --impersonate 不兼容。
ntlmrelayx 配合使用PySQLRecon 可与 proxychains 配合使用,以利用针对 mssql:// 服务的中继身份验证。由于 ntlmrelayx 会话的工作方式,运行 PySQLRecon 时 --database 参数将不起作用(中继会话始终连接至 master 数据库)。这在尤其是使用 SCCM 模块时会产生影响,因为 SCCM 模块需要指定站点数据库。解决方法:首先使用 query 模块更改数据库上下文(该更改将在同一中继会话内后续的 PySQLRecon 使用中持久保持)。示例:
proxychains4 pysqlrecon -t <目标> -d <域> -u <用户名> -p FAKE query --query 'use new_db_name'
现在,无需指定 --database,即可在同一个 ntlmrelayx 会话中运行针对该特定数据库资源的模块/查询。
pysqlrecon 使用 uv 管理依赖项。从源码安装并进行开发设置的方法如下:
# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 安装 pysqlrecon
git clone https://github.com/tw1sm/pysqlrecon
cd pysqlrecon
uv sync
uv run pysqlrecon --help
PySQLRecon 易于扩展——请参阅 resources 中的模板和说明。