利用SQL注入攻击登录网站后台实验环境搭建及使用研究 下载本文

内容发布更新时间 : 2024/12/27 3:38:16星期一 下面是文章的全部内容请认真阅读。

龙源期刊网 http://www.qikan.com.cn

利用SQL注入攻击登录网站后台实验环境搭建及使用研究

作者:曾煌存

来源:《职业教育研究》2013年第11期

摘要:为了在高职院校的《网络安全与防范》课程中取得较好的教学效果,必须搭建大量的实验环境供学生演练。本文总结了开展ASP+SQL Server 2000环境下利用SQL注入攻击登录网站后台的实验环境的搭建及使用研究。 关键词:SQL注入攻击;网络安全;实验环境

中图分类号:G718 文献标识码:A 文章编号:1672-5727(2013)11-0129-03

SQL注入攻击是黑客最喜欢使用的攻击方式之一,其危害极大。为了在高职院校的《网络安全与防范》课程中取得较好的教学效果,必须搭建大量的实验环境供学生演练。 在之前工作经验的基础之上,笔者总结了开展ASP+SQL Server 2000环境下利用SQL注入攻击登录网站后台实验环境搭建及使用的研究,希望能对高职院校《网络安全与防范》课程中SQL注入攻击与防范的教学起到一定的促进作用。 利用SQL注入攻击登录网站后台实验环境的搭建

在之前的工作中,已经基于ASP+SQL Server 2000搭建了一个具有SQL注入漏洞的动态网站Testweb,并且演示了使用SQL注入攻击,添加目标计算机系统的管理员账户、开启远程终端连接,并且用攻击机远程登录到目标计算机等操作。

本文扩展了动态网站Testweb,使其有用于网站后台登录的页面,然后我们将展示使用SQL注入攻击获得网站后台账户、口令,并且登录进入后台的操作。

如之前的工作一样,使用VMware WorkStatition虚拟机软件安装了两台虚拟机,一台虚拟机安装的是Windows Server 2003操作系统,用于模拟被攻击的服务器,IP地址为

192.168.248.132;另一台虚拟机安装的是Windows XP操作系统,用于模拟黑客使用的攻击机,IP地址为192.168.248.133。

在Windows Server 2003虚拟机上,扩展了之前搭建的使用ASP+SQL Server 2000开发的简单的动态网站Testweb。该动态网站访问名为Testweb的数据库,该数据库原来只包含一个表:tblNews。我们扩展了该数据库,使其包含另一个表:tblUser,该表用于存储登录后台的账户和密码。tblUser的具体结构如表1所示。

龙源期刊网 http://www.qikan.com.cn

初始时在这个表中输入了一些测试用的数据。

该网站原来包括以下三个页面:conn.asp、news.asp、displayNews.asp。其中conn.asp用于保存与SQL Server 2000数据库服务器的连接信息;news.asp用于读取数据库中的新闻记录,显示所有新闻的标题,并且将这些标题以超级链接的形式显示。当单击某个新闻的标题后,即可以进入形如displayNews.asp?id=xxx的页面,看到新闻的具体内容(其中“xxx”表示某条新闻在tblNews表中ID字段的值)。

从新增的三个页面的具体代码可以看出,新增的页面也具有简单,易于理解、分析和掌握的优点。

同时,页面displayNews.asp有SQL注入漏洞,可以满足进行SQL注入攻击的实训需要,其具有SQL注入漏洞的具体语句为:

strSql=\

该语句根据某条新闻的ID查询tblNews表的内容,可以在形如displayNews.asp?id=xxx的地址后面加入精心构造的语句,从而执行特定的SQL语句,查询信息、执行命令、进而控制服务器。

利用SQL注入攻击登录网站后台实验环境的使用

如上开发的动态网站Testweb具有SQL注入漏洞,下面我们通过破解网站后台账户、口令的入侵步骤来展示该SQL注入攻击实验环境的使用。 访问Testweb网站,判断其是否具有SQL注入漏洞。

(一)猜解含有字符串“pass”的字段名以及该字段所属表的表名

在SQL Server 2000中,当前数据库的syscolumn表中有以下两个字段:name和id。其中name是当前数据库中所有表中含有的字段的名称,id是该字段所属表的编号。通过查询syscolumns表,我们就可以得到含有字符串pass的字段名以及该字段所属表格的编号。再使用SQL Server中的object_name(id)函数就可以得到字段所属表格的名称。

在地址栏输入:http://192.168.248.132/testweb/displayNews.asp?id=1 and(select top 1 t_name+’|’+c_name from(select top 1 object_name(id)as t_name,name as c_name from syscolumns where charIndex(‘pass’,name)>0 and left(name,1)!=’@’ order by t_name)as T order by t_name desc)>0 (1)

龙源期刊网 http://www.qikan.com.cn

返回的提示信息包含:将 nvarchar 值 'sysusers|password' 转换为数据类型为 int 的列时发生语法错误。从返回信息中,我们可以知道当前数据库中有一个sysusers表,该表含有password字段。

将(1)中的子查询“select top 1 object_name(id)as t_name,name…. ”中的1依次修改为2,3,……,即可得到所有含有“pass”的字段名以及该字段所属表的的表名信息。如将“select top 1 object_name(id)as t_name,name….”改成“select top 2 object_name(id)as t_name,name….”后,得到的提示信息包含:将 nvarchar 值 'tblUser|password' 转换为数据类型为 int 的列时发生语法错误。从该提示信息,可以知道当前数据库中有个tblUser表,该表有password字段。

(1)比较复杂。首先看(1)的子查询中的:select top 1 object_name(id)as t_name,name as c_name from syscolumns where charIndex(‘pass’,name)>0 and left(name,1)!=’@’ order by t_name (2)

(2)的原理是:在syscolumns表中筛选出字段名中包含字符串“pass”,并且字段名不以字符“@”起始的记录,然后得到这些记录的字段名和该字段所属的表的表名(通过

object_name(id)函数从表的id得到表的名称),再将这些结果根据表名按照升序进行排列,最后筛选出最前面的一条记录。

(1)的原理是从子查询(2)的结果中根据表名降序筛选出最前面的一条记录,并将表名和字段名用“|”连接起来,得到最终的结果,最后让其与整数0进行比较,因为类型不匹配,将导致SQL Server出错,根据出错信息,即可得到表名和字段名。其中“+”是字符串连接运算符“+”。

(二)得到用户表的字段数目 (三)得到用户表的所有字段名 (四)得到用户名和密码 (五)登录网站的后台 结语

与DVBBS等整站程序相比,我们搭建的实验环境具有简单、方便学生理解、分析和掌握的优点。同时,我们的实验环境设有SQL注入漏洞,能够让学生方便地演练在ASP+SQL Server 2000环境下猜解数据表的名称、猜解字段的数目、字段的名称、字段的内容、扫描网站后台等操作。这对提高学生的学习兴趣,掌握SQL注入攻击的原理和具体的实施步骤很有好处。