数据库脱库命令具体操作是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
一、什么是“脱库”还有你最关心的痛点
在安全领域里“脱库”指的是攻击者通过各种手段将目标数据库中的数据导出、复制或转移到自己控制的地方。怎么说呢,对公司而言,最怕的就是:
- 业务主要数据被一次性泄露,导致合规处罚。
- 攻击者留下后门,持续窃取增量数据。
- 因缺乏及时检测,导致事后追溯成本极高。
二、常见的脱库攻击方法
1. SQL 注入
通过在输入框等位置注入恶意 SQL。使得查询语句被篡改,直接返回敏感表或列的数据。
' OR '1'='1' --
SELECT * FROM users WHERE username='admin' --
SELECT password FROM admin --
2. 文件包含 / 远程文件上传
利用服务器对文件方法或上传文件的校验不足。将恶意脚本写入服务器,从而执行数据库导出命令。
/index.php?page=../../../../etc/passwd%00
POST /upload HTTP/1.1
Content-Type: multipart/form-data;说起来,boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data;name="file",filename="shell.php"
Content-Type: application/x-php
------WebKitFormBoundary--
3. 命令注入 & 操作程序注入
当应用把使用者输入直接拼接到程序命令时攻击者可以执行任意 shell,从而调用数据库导出工具。
;cat /etc/passwd | mysql -u root -p -e "SELECT * FROM secret_table"> /tmp/leak.txt
三、常用的合法脱库命令
1. MySQL – mysqldump
将整个数据库或指定表导出为 SQL 脚本:
# 导出整个数据库
mysqldump -u username -p database_name> /tmp/database.sql
# 导出单表并压缩
mysqldump -u username -p database_name table_name | gzip> /tmp/table.sql.gz
2. PostgreSQL – pg_dump
支持全库、单表或自定义格式导出:
# 全库导出
pg_dump -U username -d database_name -F p> /tmp/database.sql
# 自定义压缩格式
pg_dump -U username -d database_name -F c -b -v -f /tmp/database.dump
3. Oracle – expdp/impdp
Data Pump 是 Oracle 推荐的高速导出/导入工具:
# 导出整个 schema 到目录对象 EXP_DIR
expdp username/password@service \
DIRECTORY=EXP_DIR \
DUMPFILE=full_export.dmp \
LOGFILE=export.log \
SCHEMAS=target_schema
# 只导出指定表
expdp username/password@service \
DIRECTORY=EXP_DIR \
DUMPFILE=table_export.dmp \
LOGFILE=table_export.log \
TABLES=target_schema.table_name
4. SQL Server – bcp/Powershell Invoke-Sqlcmd
# 使用 bcp 导出表数据为 CSV
bcp "SELECT * FROM dbo.TargetTable" queryout "C:\temp\target.csv" ^
-c -t,-S server_name -U sa -P password
# PowerShell 一键导出全库结构和数据
Invoke-Sqlcmd -Query "EXEC sp_MSforeachtable 'SELECT * FROM?'" `
-ServerInstance "server\instance" `
-Username "sa" -Password "password" | Export-Csv C:\temp\full_db.csv -NoTypeInformation
四、实战式脱库操作流程
1️⃣ 信息收集 & 环境指纹识别
-
端口扫描的观点是。
Nmap -sV -p 3306,5432,1521 target.com -
Banner 抓取:
bannerdetect target.com:3306 - Web 应用指纹:使用 /
- Pain point:很多团队只检查了防火墙,却忽视了内部服务版本泄露。
2️⃣ 漏洞验证 & 初始渗透入口
-
SQlmap 快速验证:
- If sqlmap fails → 手工构造 UNION SELECT 或 error‑based payload。
- Pain point:误报频繁导致安全团队误判,浪费时间。
3️⃣ 数据枚举阶段
-
- 获取当前数据库:
-
- 列举所有表:
-
- 列举字段:
-
- 抽取数据:
- Pain point:大量字段导致 dump 时间过长,需精准定位关键列。
4️⃣ 利用合法脱库工具进行“批量下载”
当获得 DB 账号后可直接使用上述合法工具完成快速离线备份,这也是攻击者常用的 “爆库 → 爆表 → 爆字段 → 爆数据” 流程。
Mysqldump 示例:
/tmp/steal_$.sql
Pg_dump 示例: /tmp/db_$.gz
Caution:
在真实环境中执行上述命令属于非法行为,仅供安全加固学习使用!请务必在授权渗透测试范围内操作。按理说,
五、防御建议——从根源堵住痛点
- 输入过滤与参数化查询:所有业务层统一使用预编译语句。杜绝拼接 SQL,
- 最小权限原则:DB 账户仅授予业务所需的 SELECT/INSERT 权限,禁止使用拥有 FILE、SUPER 权限的账户对外提供服务。
- 审计日志与异常检测:开启 MySQL 的 audit_log、PostgreSQL 的 pgaudit。还有 Oracle 的 unified_audit,对所有 EXPORT/DUMP 操作做实时告警。
- 网络隔离与防火墙白名单:只允许可信 IP 访问数据库端口;对外部接口禁用直接 DB 连接。
- 定期漏洞扫描与补丁管理:使用 Nessus、OpenVAS 等工具每月扫描 DB 软件版本漏洞,并及时打补丁。
- 文件程序权限硬化:限制 MySQL/PG 使用者只能访问特定 data 目录,防止 LOAD_FILE、xp_cmdshell 被滥用。
六、与行动要点
• 脱库本质是“把数据搬走”。了解常见入口才能有针对性防御。不过,• 常见脱库工具:mysqldump、pg_dump、expdp 等。一旦获取 DB 凭证即可快速批量下载。• 防御主要是:输入校验 + 参数化 + 最小权限 + 完整审计。只有把这些痛点逐一击破,才能真正降低“脱库”风险。
一、什么是“脱库”还有你最关心的痛点
在安全领域里“脱库”指的是攻击者通过各种手段将目标数据库中的数据导出、复制或转移到自己控制的地方。怎么说呢,对公司而言,最怕的就是:
- 业务主要数据被一次性泄露,导致合规处罚。
- 攻击者留下后门,持续窃取增量数据。
- 因缺乏及时检测,导致事后追溯成本极高。
二、常见的脱库攻击方法
1. SQL 注入
通过在输入框等位置注入恶意 SQL。使得查询语句被篡改,直接返回敏感表或列的数据。
' OR '1'='1' --
SELECT * FROM users WHERE username='admin' --
SELECT password FROM admin --
2. 文件包含 / 远程文件上传
利用服务器对文件方法或上传文件的校验不足。将恶意脚本写入服务器,从而执行数据库导出命令。
/index.php?page=../../../../etc/passwd%00
POST /upload HTTP/1.1
Content-Type: multipart/form-data;说起来,boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data;name="file",filename="shell.php"
Content-Type: application/x-php
------WebKitFormBoundary--
3. 命令注入 & 操作程序注入
当应用把使用者输入直接拼接到程序命令时攻击者可以执行任意 shell,从而调用数据库导出工具。
;cat /etc/passwd | mysql -u root -p -e "SELECT * FROM secret_table"> /tmp/leak.txt
三、常用的合法脱库命令
1. MySQL – mysqldump
将整个数据库或指定表导出为 SQL 脚本:
# 导出整个数据库
mysqldump -u username -p database_name> /tmp/database.sql
# 导出单表并压缩
mysqldump -u username -p database_name table_name | gzip> /tmp/table.sql.gz
2. PostgreSQL – pg_dump
支持全库、单表或自定义格式导出:
# 全库导出
pg_dump -U username -d database_name -F p> /tmp/database.sql
# 自定义压缩格式
pg_dump -U username -d database_name -F c -b -v -f /tmp/database.dump
3. Oracle – expdp/impdp
Data Pump 是 Oracle 推荐的高速导出/导入工具:
# 导出整个 schema 到目录对象 EXP_DIR
expdp username/password@service \
DIRECTORY=EXP_DIR \
DUMPFILE=full_export.dmp \
LOGFILE=export.log \
SCHEMAS=target_schema
# 只导出指定表
expdp username/password@service \
DIRECTORY=EXP_DIR \
DUMPFILE=table_export.dmp \
LOGFILE=table_export.log \
TABLES=target_schema.table_name
4. SQL Server – bcp/Powershell Invoke-Sqlcmd
# 使用 bcp 导出表数据为 CSV
bcp "SELECT * FROM dbo.TargetTable" queryout "C:\temp\target.csv" ^
-c -t,-S server_name -U sa -P password
# PowerShell 一键导出全库结构和数据
Invoke-Sqlcmd -Query "EXEC sp_MSforeachtable 'SELECT * FROM?'" `
-ServerInstance "server\instance" `
-Username "sa" -Password "password" | Export-Csv C:\temp\full_db.csv -NoTypeInformation
四、实战式脱库操作流程
1️⃣ 信息收集 & 环境指纹识别
-
端口扫描的观点是。
Nmap -sV -p 3306,5432,1521 target.com -
Banner 抓取:
bannerdetect target.com:3306 - Web 应用指纹:使用 /
- Pain point:很多团队只检查了防火墙,却忽视了内部服务版本泄露。
2️⃣ 漏洞验证 & 初始渗透入口
-
SQlmap 快速验证:
- If sqlmap fails → 手工构造 UNION SELECT 或 error‑based payload。
- Pain point:误报频繁导致安全团队误判,浪费时间。
3️⃣ 数据枚举阶段
-
- 获取当前数据库:
-
- 列举所有表:
-
- 列举字段:
-
- 抽取数据:
- Pain point:大量字段导致 dump 时间过长,需精准定位关键列。
4️⃣ 利用合法脱库工具进行“批量下载”
当获得 DB 账号后可直接使用上述合法工具完成快速离线备份,这也是攻击者常用的 “爆库 → 爆表 → 爆字段 → 爆数据” 流程。
Mysqldump 示例:
/tmp/steal_$.sql
Pg_dump 示例: /tmp/db_$.gz
Caution:
在真实环境中执行上述命令属于非法行为,仅供安全加固学习使用!请务必在授权渗透测试范围内操作。按理说,
五、防御建议——从根源堵住痛点
- 输入过滤与参数化查询:所有业务层统一使用预编译语句。杜绝拼接 SQL,
- 最小权限原则:DB 账户仅授予业务所需的 SELECT/INSERT 权限,禁止使用拥有 FILE、SUPER 权限的账户对外提供服务。
- 审计日志与异常检测:开启 MySQL 的 audit_log、PostgreSQL 的 pgaudit。还有 Oracle 的 unified_audit,对所有 EXPORT/DUMP 操作做实时告警。
- 网络隔离与防火墙白名单:只允许可信 IP 访问数据库端口;对外部接口禁用直接 DB 连接。
- 定期漏洞扫描与补丁管理:使用 Nessus、OpenVAS 等工具每月扫描 DB 软件版本漏洞,并及时打补丁。
- 文件程序权限硬化:限制 MySQL/PG 使用者只能访问特定 data 目录,防止 LOAD_FILE、xp_cmdshell 被滥用。
六、与行动要点
• 脱库本质是“把数据搬走”。了解常见入口才能有针对性防御。不过,• 常见脱库工具:mysqldump、pg_dump、expdp 等。一旦获取 DB 凭证即可快速批量下载。• 防御主要是:输入校验 + 参数化 + 最小权限 + 完整审计。只有把这些痛点逐一击破,才能真正降低“脱库”风险。

