Sql常用函数

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 | 表行数估算 | 判断数据量大小 |
实用技巧总结
- information_schema是金矿:几乎所有数据库结构信息都在这里
- 逐字符提取:在盲注中使用substring+ascii逐字符获取数据
- 一次性获取:使用group_concat一次性获取所有表名或字段名
- 条件判断:布尔盲注使用if/case when,时间盲注使用sleep/benchmark
- 编码绕过:使用hex、base64等编码绕过WAF过滤
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果
