Sql常用函数

SQL注入常用函数与系统表整理

信息获取类函数与系统表

函数/系统表 类型 功能说明 使用示例
information_schema 系统数据库 存储所有数据库的元数据信息 访问数据库结构信息的基础
information_schema.tables 系统视图 存储所有表的信息 SELECT table_name FROM information_schema.tables WHERE table_schema=database()
information_schema.columns 系统视图 存储所有字段的信息 SELECT column_name FROM information_schema.columns WHERE table_name='users'
information_schema.schemata 系统视图 存储所有数据库的信息 SELECT schema_name FROM information_schema.schemata
database() 函数 返回当前数据库名称 SELECT database()
user() 函数 返回当前数据库用户 SELECT user()
version() 函数 返回数据库版本信息 SELECT version()
@@version 系统变量 返回数据库版本信息 SELECT @@version
@@hostname 系统变量 返回服务器主机名 SELECT @@hostname

字符串处理函数

函数 功能说明 使用示例 盲注应用
substring() 截取字符串指定位置 substring('abc',1,1) → ‘a’ 逐字符提取数据
substr() substring的别名 同substring 同substring
mid() 截取字符串指定位置 mid('abc',2,1) → ‘b’ 逐字符提取数据
left() 从左截取字符串 left('abc',2) → ‘ab’ 获取前N个字符
right() 从右截取字符串 right('abc',2) → ‘bc’ 获取后N个字符
length() 返回字符串长度 length('abc') → 3 判断数据长度
char() 将ASCII码转为字符 char(65) → ‘A’ 构造特殊字符
ascii() 返回字符的ASCII码 ascii('A') → 65 字符转为数字比较
ord() ascii的别名 同ascii 同ascii
concat() 连接多个字符串 concat('a','b') → ‘ab’ 合并查询结果
group_concat() 将多行结果合并为一行 group_concat(table_name) 一次性获取所有表名/字段名
concat_ws() 用分隔符连接字符串 concat_ws(',','a','b') → ‘a,b’ 带分隔符的结果合并

数据聚合与条件函数

函数 功能说明 使用示例 注入应用
count() 统计行数 count(*) 判断表是否存在、数据量
limit 限制返回行数 limit 0,1 逐行获取数据
if() 条件判断 if(1=1,'true','false') → ‘true’ 布尔盲注条件判断
case when 条件判断 case when 1=1 then 'a' else 'b' end → ‘a’ 布尔盲注条件判断
sleep() 延迟执行 sleep(5) 时间盲注
benchmark() 重复执行消耗资源 benchmark(1000000,md5('test')) 时间盲注
rand() 生成随机数 rand() 配合条件判断使用

系统信息函数

函数 功能说明 使用示例 信息收集用途
@@datadir 数据库数据存储路径 SELECT @@datadir 了解服务器结构
@@basedir 数据库安装路径 SELECT @@basedir 了解服务器结构
@@version_compile_os 操作系统信息 SELECT @@version_compile_os 识别目标系统
current_user() 当前用户 SELECT current_user() 权限判断
system_user() 系统用户 SELECT system_user() 权限判断
session_user() 会话用户 SELECT session_user() 权限判断

十六进制与编码函数

函数 功能说明 使用示例 绕过应用
hex() 转为十六进制 hex('abc') → ‘616263’ 绕过引号过滤
unhex() 十六进制转字符串 unhex('616263') → ‘abc’ 解码十六进制数据
to_base64() Base64编码 to_base64('test') 数据编码
from_base64() Base64解码 from_base64('dGVzdA==') 数据解码
md5() MD5哈希 md5('test') 生成测试数据

文件操作函数

函数 功能说明 使用示例 渗透测试用途
load_file() 读取文件内容 load_file('/etc/passwd') 读取服务器文件
into outfile 写入文件 SELECT 'test' INTO OUTFILE '/tmp/test.txt' 写入webshell
into dumpfile 写入二进制文件 同outfile,用于二进制文件 写入二进制数据

常用字段与条件

字段/条件 所在表 功能说明 常用查询
table_schema information_schema.tables/columns 数据库名称 WHERE table_schema=database()
table_name information_schema.tables/columns 表名称 SELECT table_name FROM information_schema.tables
column_name information_schema.columns 字段名称 SELECT column_name FROM information_schema.columns
table_catalog information_schema.tables 表目录 通常为def
TABLE_ROWS information_schema.tables 表行数估算 判断数据量大小

实用技巧总结

  1. information_schema是金矿:几乎所有数据库结构信息都在这里
  2. 逐字符提取:在盲注中使用substring+ascii逐字符获取数据
  3. 一次性获取:使用group_concat一次性获取所有表名或字段名
  4. 条件判断:布尔盲注使用if/case when,时间盲注使用sleep/benchmark
  5. 编码绕过:使用hex、base64等编码绕过WAF过滤