一个通用数据库命令行工具!

admin 2026-07-20 04:25:31 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档介绍了一个通用数据库命令行工具,支持连接MySQL、MSSQL、Oracle、PostgreSQL和Redis等数据库,可执行SQL查询、文件导入、交互模式及输出JSON/CSV。核心功能包括本机安全诊断命令和通过数据库机制(如xp_cmdshell、UDF、Java存储过程)在服务器上执行系统命令,支持自动诊断和交互模式。工具强调密码安全,建议通过环境变量输入。主要用途为数据库运维、授权测试和批量执行,但远程命令执行功能需在授权环境中谨慎使用,避免安全风险。 综合评分: 85 文章分类: 渗透测试,红队,内网渗透,安全工具,安全建设


cover_image

一个通用数据库命令行工具!

hnytgl hnytgl

乌雲安全

2026年7月14日 08:00 重庆

在小说阅读器读本章

去阅读

一个通用数据库命令行工具,支持连接并执行 MSSQL、MySQL、Oracle SQL 命令,以及在数据库服务器上执行系统命令。

用途:数据库日常运维、巡检、授权测试、批量执行 SQL。 注意:不要把密码、连接串、生产库地址提交到公开仓库。本工具默认不保存密码。

功能

  • • 支持 MySQL / MariaDB
  • • 支持 Microsoft SQL Server(MSSQL)
  • • 支持 Oracle Database
  • • 支持 PostgreSQL
  • • 支持 Redis(命令模式)
  • • 支持单条 SQL、SQL 文件、交互模式
  • • 支持表格、JSON、CSV 输出
  • • 可通过环境变量读取密码,减少命令行明文密码泄露风险
  • • 支持执行本机安全诊断命令,例如 hostnamewhoamipingipconfignetstat 等
  • • 支持在数据库服务器上执行系统命令(通过 xp_cmdshell、Java、UDF 等数据库自身机制)
  • • 支持远程命令交互模式(--remote-cmd -i),连续执行多条服务器命令

安装

python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -r requirements.txt

MSSQL 需要系统已安装 SQL Server ODBC Driver。Windows 常见驱动名为:

ODBC Driver 18 for SQL Server

Oracle 默认使用 python-oracledb thin 模式,一般不需要 Oracle Client。需要 thick 模式时再使用 --oracle-thick

基本用法

建议先把密码放到环境变量中:

export DB_PASSWORD='your_password'
# Windows PowerShell:
# $env:DB_PASSWORD='your_password'

MySQL

python dbcli.py --type mysql --host 127.0.0.1 --port 3306 -u root -d test \
  -q "select version();"

MSSQL

python dbcli.py --type mssql --host 127.0.0.1 --port 1433 -u sa -d master \
  --trust-server-certificate \
  -q "select @@version;"

如果使用 DSN:

python dbcli.py --type mssql --dsn MyMSSQLDsn -u sa -d master \
  -q "select name from sys.databases;"

Oracle

使用 service name:

python dbcli.py --type oracle --host 127.0.0.1 --port 1521 -u system \
  --service-name ORCLPDB1 \
  -q "select * from v$version"

使用 SID:

python dbcli.py --type oracle --host 127.0.0.1 --port 1521 -u system \
  --sid ORCL \
  -q "select sysdate from dual"

PostgreSQL

python dbcli.py --type postgresql --host 127.0.0.1 --port 5432 -u postgres -d postgres \
  -q "select version();"

Redis

Redis 使用 Redis 命令而非 SQL,无需 -u 参数:

# 执行单条命令
python dbcli.py --type redis --host 127.0.0.1 --port 6379 \
  -q "INFO server"

# 交互模式
python dbcli.py --type redis --host 127.0.0.1 --port 6379 -i

Redis 交互模式:

redis> PING
PONG
redis> KEYS *
(empty array)
redis> SET foo bar
OK
redis> GET foo
bar
redis> .exit

执行 SQL 文件

python dbcli.py --type mysql --host 127.0.0.1 -u root -d test \
  -f ./check.sql

默认会按分号拆分多条 SQL。复杂存储过程、PL/SQL 块、包含特殊分隔符的脚本,建议加 --no-split 或拆成单条执行。

交互模式(SQL)

python dbcli.py --type mysql --host 127.0.0.1 -u root -d test -i

进入后输入 SQL,并以分号结尾执行:

sql> select now();
sql> .exit

本机安全诊断命令

本工具支持通过 --local-cmd 执行运行脚本所在机器的安全诊断命令,不连接数据库,也不会通过数据库在远端数据库服务器上执行系统命令。

查看允许命令:

python dbcli.py --list-local-commands

执行本机命令:

python dbcli.py --local-cmd "hostname"
python dbcli.py --local-cmd "whoami"
python dbcli.py --local-cmd "ping 127.0.0.1"

JSON 输出:

python dbcli.py --local-cmd "hostname" --output json

保存输出:

python dbcli.py --local-cmd "ipconfig" --save local_network.txt

远程命令执行(在数据库服务器上)

通过 --remote-cmd 可以在连接的数据库服务器上执行系统命令,命令通过数据库自身机制在服务器端运行。

自动诊断模式(无需指定具体命令)

只加 --remote-cmd 不加命令值,工具自动连接数据库服务器并执行该模块的默认诊断命令集,快速获取服务器基本信息:

# MSSQL 自动诊断
python dbcli.py --type mssql --host 192.168.1.100 -u sa -d master \
  --enable-xp-cmdshell --remote-cmd

# MySQL 自动诊断
python dbcli.py --type mysql --host 192.168.1.100 -u root -d test \
  --remote-cmd

# Oracle 自动诊断
python dbcli.py --type oracle --host 192.168.1.100 -u system \
  --service-name ORCLPDB1 --remote-cmd

# PostgreSQL 自动诊断
python dbcli.py --type postgresql --host 192.168.1.100 -u postgres -d postgres \
  --remote-cmd

# Redis 自动诊断
python dbcli.py --type redis --host 192.168.1.100 --remote-cmd

执行效果示例:

未指定 --remote-cmd 命令,自动执行 MSSQL 服务器诊断命令集:
  → hostname
  → whoami
  → systeminfo
  → ipconfig
  → netstat -an
  → tasklist

正在连接 mssql 服务器 192.168.1.100 ...

[1/6] 执行:hostname
--------------------------------------------
远程命令:hostname
============================================================
db-server-01

[2/6] 执行:whoami
...

各数据库类型的默认诊断命令集:

| 数据库类型 | 自动执行的诊断命令 | | — | — | | MSSQL | hostnamewhoamisysteminfoipconfignetstat -antasklist | | MySQL | hostnamewhoamiiduname -auptimefree -mdf -hip addr | | Oracle | hostnamewhoamiiduname -auptimefree -mdf -hip addr | | PostgreSQL | hostnamewhoamiiduname -auptimefree -mdf -hip addr | | Redis | hostnamewhoamiiduname -auptimefree -mdf -hip addr |

自动诊断模式同样支持 --output json 和 --save 参数。多条命令结果以 JSON 数组保存。

单条命令模式

# MSSQL(xp_cmdshell)
python dbcli.py --type mssql --host 192.168.1.100 -u sa -d master \
  --remote-cmd "ipconfig /all"

# 自动启用 xp_cmdshell(需系统管理员权限)
python dbcli.py --type mssql --host 192.168.1.100 -u sa -d master \
  --enable-xp-cmdshell --remote-cmd "whoami"

# MySQL(需预装 sys_exec UDF)
python dbcli.py --type mysql --host 192.168.1.100 -u root -d test \
  --remote-cmd "hostname"

# Oracle(Java stored procedure)
python dbcli.py --type oracle --host 192.168.1.100 -u system \
  --service-name ORCLPDB1 --remote-cmd "hostname"

# PostgreSQL(COPY FROM PROGRAM,需 superuser 权限)
python dbcli.py --type postgresql --host 192.168.1.100 -u postgres -d postgres \
  --remote-cmd "hostname"

# Redis(cron 注入方式,仅 Linux,需 root 权限)
python dbcli.py --type redis --host 192.168.1.100 --remote-cmd "hostname"

Redis 说明:Redis 无原生命令执行机制,通过 CONFIG SET + BGSAVE 将命令写入 cron 作业实现。 前提条件:Linux 系统、/etc/cron.d/ 可写、Redis 有 CONFIG SET 权限。 命令将在 60 秒内通过 cron 执行,输出写入服务器 /tmp/_dbcli_rce_out

交互模式

加 -i 参数进入远程命令交互模式,连续执行多条命令:

python dbcli.py --type mssql --host 192.168.1.100 -u sa -d master \
  --enable-xp-cmdshell --remote-cmd -i

进入后:

正在连接 mssql 服务器 192.168.1.100 ...

已进入远程命令交互模式([email protected])
每行输入一个系统命令,在数据库服务器上执行。
输入 .exit 退出;输入 .help 查看帮助。

remote> whoami
mssql-srv\sa
remote> hostname
db-server-01
remote> ipconfig | findstr IPv4
   IPv4 Address. . . . . . . . . . . : 192.168.1.100
remote> .exit

输出格式

支持 JSON 输出和保存到文件:

python dbcli.py --type mssql --host 192.168.1.100 -u sa -d master \
  --remote-cmd "whoami" --output json

python dbcli.py --type mssql --host 192.168.1.100 -u sa -d master \
  --remote-cmd "dir C:\\" --save server_dir.txt

# 自动诊断模式结果保存
python dbcli.py --type mssql --host 192.168.1.100 -u sa -d master \
  --enable-xp-cmdshell --remote-cmd --save server_diag.txt

输出 JSON / CSV

JSON:

python dbcli.py --type mysql --host 127.0.0.1 -u root -d test \
  -q "select * from users limit 10" \
  --output json --save result.json

CSV:

python dbcli.py --type mysql --host 127.0.0.1 -u root -d test \
  -q "select * from users limit 10" \
  --output csv --save result.csv

关于 SQL 执行

本工具不拦截任何 SQL 语句,SELECTINSERTUPDATEDELETEDROP 等命令均可直接执行。 请确保在授权环境中使用,执行前确认 SQL 语句的正确性。

常用参数

--type                      数据库类型:mysql、mssql、oracle、postgresql、redis
--host                      数据库主机
--port                      数据库端口
-u, --user                  数据库用户名
-p, --password              数据库密码,不建议明文使用
--password-env              密码环境变量,默认 DB_PASSWORD
-d, --database              数据库名;Oracle 可作为 service_name 使用
--dsn                       DSN 或连接标识
-q, --query                 执行单条 SQL
-f, --file                  执行 SQL 文件
-i, --interactive           交互模式(SQL 或配合 --remote-cmd 使用)
--max-rows                  每条查询最多返回行数,默认 200
--output table|json|csv     输出格式
--save                      输出保存路径
--local-cmd                 执行本机安全诊断命令
--local-timeout             本机命令超时时间
--list-local-commands       列出允许的本机诊断命令
--remote-cmd                在数据库服务器上执行系统命令;不加命令值时自动执行模块默认诊断命令集;加 -i 进入交互模式
--enable-xp-cmdshell        MSSQL:自动启用 xp_cmdshell(需系统管理员权限)

安全建议

  1. 1. 只在已授权的数据库环境使用。
  2. 2. 使用只读账号进行查询巡检。
  3. 3. 不要在命令行、脚本、仓库中写死密码。
  4. 4. 生产库执行 SQL 前先确认语句正确性,尽量在事务中执行并备份数据。
  5. 5. 公开仓库中不要提交 .env、连接串、导出的数据文件。
  6. 6. 远程命令执行(--remote-cmd)有较高风险,仅在已授权环境和维护窗口使用。
  • • xp_cmdshell 启用后,具备对应权限的用户可执行任意系统命令。
  • • Oracle/MySQL 的远程命令执行同样需要较高权限,使用后建议回收。
  1. 7. 如需远程主机执行系统命令,建议使用 SSH、WinRM、堡垒机、自动化平台等正规运维通道。

下载地址:

https://github.com/hnytgl/Db-Command-Tool


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:乌雲安全 hnytgl hnytgl《一个通用数据库命令行工具!》

评论:0   参与:  0