忽海娜,劉宇建,丁 豹,平 源
(許昌學(xué)院 信息工程學(xué)院,河南 許昌 461000)
隨著互聯(lián)網(wǎng)信息化的不斷發(fā)展,Web應(yīng)用得到了迅速開發(fā),為互聯(lián)網(wǎng)的進步發(fā)揮著非常重要的作用,但同時,隨之而來的安全問題也日益凸顯.《Radware 2018年Web應(yīng)用安全現(xiàn)狀》報告中指出,應(yīng)用層攻擊的頻率和復(fù)雜性在不斷增長,至少89%的受訪者在過去一年都遭遇過針對Web應(yīng)用或Web服務(wù)器的攻擊[1].因此,Web安全問題成了當(dāng)前信息安全領(lǐng)域的熱門關(guān)注點,國內(nèi)各高校信息安全相關(guān)專業(yè)也相繼開設(shè)《Web應(yīng)用安全》《Web安全技術(shù)》等相關(guān)課程關(guān)注這一熱點問題[2-4].
以我校為例,《Web安全技術(shù)》是信息安全專業(yè)的核心課程,具有很強的實踐性和應(yīng)用性,在教學(xué)過程中需引入大量的實驗任務(wù),幫助學(xué)生更好地理解Web攻擊的原理和漏洞的成因,從而提高學(xué)生的漏洞檢測能力和修復(fù)能力.但是,課程應(yīng)該包括哪些方面的實驗內(nèi)容,如何對實驗內(nèi)容進行合理的設(shè)計,選擇什么樣的實驗平臺,如何開展實驗教學(xué),這些都是亟待解決和研究的問題.
圖1 Web攻擊態(tài)勢分析
Web技術(shù)日新月異,Web 安全的威脅狀況也在不斷變化,因此,在設(shè)計《Web 安全技術(shù)》實驗教學(xué)內(nèi)容時,緊跟當(dāng)前Web安全的行業(yè)和技術(shù)發(fā)展態(tài)勢,同時按照我校應(yīng)用型人才的培養(yǎng)要求[5],從實踐角度出發(fā),圍繞2017年OWASP(Open Web Application Security Project,開放式Web應(yīng)用程序安全項目)公布的Web安全十大威脅[6],同時結(jié)合國內(nèi)阿里云發(fā)布的《2019上半年Web應(yīng)用安全報告》[7]中的Web攻擊態(tài)勢分析(如圖1所示),最終將常見的SQL注入、代碼注入、XML外部實體注入(XXE注入)、敏感信息泄露、XSS跨站腳本攻擊、文件包含、文件上傳、不安全的反序列化等作為主要教學(xué)內(nèi)容.針對每部分的教學(xué)內(nèi)容,設(shè)計操作性較強的實驗案例,對Web漏洞的成因和原理進行分析,同時對相關(guān)技術(shù)進行驗證.
此外,考慮到Web安全問題的復(fù)雜性,即Web安全問題不僅僅是由某個單一的漏洞造成的,基于此,在基礎(chǔ)實驗項目完成之后,設(shè)計了一個綜合的Web滲透測試實驗項目,包含網(wǎng)絡(luò)嗅探、漏洞掃描、信息收集、漏洞檢測與利用、提權(quán)等相關(guān)內(nèi)容,可以多維度地對Web服務(wù)器的安全問題進行分析.最終,《Web安全技術(shù)》課程設(shè)計的實驗內(nèi)容,如表1所示.
表1 Web安全實驗設(shè)計
因Web安全相關(guān)的實驗項目具有一定的攻擊性和破壞性,不能在真實的Web網(wǎng)站上進行,需要自主搭建Web安全實驗教學(xué)平臺.而在實驗平臺的遴選上,國內(nèi)高校更傾向于選擇開源的Web漏洞平臺,其中大多選擇的是DVWA平臺[8].
DVWA是一套開源的、適用于常規(guī)Web漏洞教學(xué)和檢測的Web脆弱性測試程序,包含了諸如SQL注入、XSS等常見的一些Web安全漏洞,可以滿足基本的實驗需求.但因后續(xù)版本更新太慢的問題,導(dǎo)致新的Web 漏洞未在平臺中及時更新,比如2017版OWASP TOP 10公布的一些漏洞,像XML外部實體注入、不安全的反序列化、越權(quán)等漏洞并未被包含在DVWA平臺中,平臺的實驗場景過于陳舊,而過于陳舊的安全攻防內(nèi)容以及環(huán)境受限的實驗設(shè)計缺乏實際應(yīng)用價值.
Pikachu平臺也是一套開源的且易于搭建的Web漏洞平臺.與DVWA相比,Pikachu平臺以最新發(fā)布的OWASP TOP 10為核心不斷更新漏洞模塊,截止目前,Pikachu平臺包含了常見的SQL注入、代碼注入、XML外部實體注入、敏感信息泄露、XSS跨站腳本攻擊、文件包含、文件上傳、PHP反序列化等15種Web漏洞場景,如圖2所示.同時,Pikachu平臺中的每類漏洞,根據(jù)不同的情況分別設(shè)計了不同的子類,以SQL注入漏洞為例,又分為數(shù)字型注入、字符型注入、搜索型注入、HTTP Header注入、布爾盲注(Base on Boolean)、時間盲注(Base on Time)和寬字節(jié)注入等十種不同類型的SQL注入漏洞.豐富的漏洞場景可以滿足不同的Web安全實驗需求.此外,Pikachu平臺的代碼結(jié)構(gòu)清晰,內(nèi)容易讀,在虛擬機搭建好之后,學(xué)生可以根據(jù)實驗的不同需求,修改Pikachu平臺的源代碼.比如,適當(dāng)添加一些過濾函數(shù),增加實驗的難度等.
課程在對DVWA和Pikachu兩大平臺進行對比分析的基礎(chǔ)上,最終確定采用Pikachu平臺作為《Web安全技術(shù)》的實驗教學(xué)平臺.
以2019級信息安全專業(yè)為例,根據(jù)Web安全的實驗項目和班級的學(xué)生人數(shù),將學(xué)生以3人為單位,分為10個小組,每組學(xué)生可以選擇Pikachu平臺的不同漏洞模塊或者同一漏洞模塊的不同內(nèi)容.在掌握漏洞基本原理的基礎(chǔ)上,各小組在搭建好的Pikachu平臺上進行實驗,并將實驗的整個過程,包括漏洞成因分析、漏洞檢測、漏洞利用以及漏洞防御等過程撰寫成文檔報告,同時將漏洞檢測和利用的過程在課堂上進行演示、分享.
以寬字節(jié)注入為例,學(xué)生在掌握寬字節(jié)注入的基本原理后,在Pikachu平臺上完成了實驗的整個過程,整理形成的報告如下.
圖2 Pikachu平臺漏洞模塊
當(dāng)GPC開啟或使用addslashes、mysql_escape_string等函數(shù)過濾提交的參數(shù)時,SQL注入的經(jīng)典語句【id=1'】,其中的單引號會被轉(zhuǎn)義而變成【id=1’】,這樣就使得單引號無法閉合SQL語句,從而達到防御SQL注入的目的,這種防御方式一般情況下是很難繞過的.此時,針對字符轉(zhuǎn)義,可以嘗試使用寬字節(jié)注入方式.
寬字節(jié)注入發(fā)生的原因就是PHP發(fā)送請求到MySQL時,字符集使用character_set_client設(shè)置值進行了一次編碼,如果編碼為GB2312、GBK等雙字節(jié)編碼,就會存在寬字節(jié)注入漏洞[9].
寬字節(jié)帶來的安全問題主要是編碼轉(zhuǎn)換引起的“吃ASCII字符”的現(xiàn)象,如果拼接合理,可以在吃掉一個字節(jié)后,將剩余內(nèi)容重新拼接成一個單引號.簡單來說,就是“’”轉(zhuǎn)義了單引號“'”,當(dāng)PHP連接MySQL的編碼為GBK時,注入格式為【id=1%df'】,因為反斜杠“”的編碼為“%5c”,所以參數(shù)傳到后端經(jīng)過轉(zhuǎn)義后就會變成【id=1%df%5c'】,其中GBK會將“%df%5c”編碼成一個繁體字“運”,這樣反斜杠就失去了轉(zhuǎn)義的效果,使得單引號逃逸出來閉合了語句,具體分析如圖3所示.
圖3 寬字節(jié)注入漏洞成因分析
第1步:訪問Pikachu平臺地址“http://192.168.136.135/pikachu/”,選擇“SQL-Inject”模塊的“寬字節(jié)注入”.通過測試,發(fā)現(xiàn)這是一個POST傳參,所以結(jié)合Burp Suite截獲數(shù)據(jù)包,利用Repeater 重放模塊進行測試分析.
第2步:在Repeater模塊中,嘗試修改參數(shù)【name=vince'】后發(fā)送數(shù)據(jù)包,頁面無任何返回信息.此時,對Pikachu后臺的源代碼文件“sqli_widebyte.php”進行修改,添加一條輸入語句“echo$query”,將SQL查詢的語句顯示在頁面上,便于對輸出結(jié)果進行分析.
第3步:再次發(fā)送上述數(shù)據(jù)包,頁面返回SQL查詢的語句為:【select id,email from member where username='vince’'】,單引號“'”被轉(zhuǎn)義為“’”.
第4步:嘗試使用寬字節(jié)注入的方式.在Burp Suite截獲數(shù)據(jù)包中,直接修改參數(shù)【name=vince%df' or 1=1#】 后發(fā)送數(shù)據(jù)包,瀏覽器頁面返回SQL查詢的語句為:【select id,email from member where username='vince運' or 1=1 #'】(此處需設(shè)置瀏覽器的編碼為中文模式),查詢結(jié)果如圖4所示.數(shù)據(jù)表中相關(guān)字段的內(nèi)容都顯示在了頁面上.從圖4中也可以看出,寫入的參數(shù)在實際執(zhí)行語句中發(fā)生了較大的變化,前面輸入的“%df”已經(jīng)吃掉了反斜杠“”,并將其轉(zhuǎn)換為一個繁體字“運”,使得單引號逃逸出來閉合了語句.說明,此處存在寬字節(jié)注入漏洞.
圖4 漏洞測試返回結(jié)果
利用聯(lián)合查詢,對存在的寬字節(jié)注入漏洞進一步利用.
第1步:構(gòu)造Payload為“vince%df' union select database(),2 #”,爆出當(dāng)前數(shù)據(jù)庫名為“pikachu”.
第2步:構(gòu)造Payload為“vince%df' union select(select group_concat(table_name)from information_schema.tables where table_schema=database()),2 #”,爆出當(dāng)前數(shù)據(jù)表名為“httpinfo,member,message,users,xssblind”.
第3步:構(gòu)造Payload為“vince%df' union select group_concat(column_name)from information_schema.columns where table_name=0x7573657273,2 #”,爆出數(shù)據(jù)表“users”的字段名為“id,username,password,level”.
第4步:構(gòu)造Payload為“vince%df' union select group_concat(username),group_concat(password)from users #”,爆出用戶名和密碼,如圖5所示.
圖5 爆出用戶名和密碼
寬字節(jié)注入漏洞的最好防御方式就是統(tǒng)一編碼標準,Web頁面及數(shù)據(jù)庫均使用UTF-8進行編碼.
在Pikachu平臺上進行驗證.修改Pikachu后臺的源代碼文件“sqli_widebyte.php”,將此行代碼$set=“set character_set_client=gbk”,修改為:$set=“set character_set_client=utf8”.保存退出后,在Burp Suite的Repeater模塊中重新發(fā)送Payload:“vince%df' union select group_concat (username),group_concat (password) from users #”,后臺數(shù)據(jù)庫未查詢出數(shù)據(jù),返回結(jié)果如圖6所示.
圖6 漏洞代碼修復(fù)后的查詢結(jié)果
在對Web常見漏洞的基本原理、成因及檢測方式熟練掌握的基礎(chǔ)上,本課程設(shè)置的最后一個實驗項目為Web滲透測試,要求學(xué)生以滲透測試的思路,完成Web平臺的漏洞檢測與利用的整個過程.其中,在Web滲透測試平臺的遴選上,建議每組學(xué)生從VulnHub或者GitHub網(wǎng)站上下載漏洞平臺源代碼,搭建在虛擬機環(huán)境中,并按照Web滲透測試的流程,對漏洞平臺進行網(wǎng)絡(luò)嗅探、端口掃描、信息收集、漏洞檢測、漏洞利用、提權(quán)等攻擊行為,盡可能地挖掘出Web平臺中存在的漏洞.
截止目前,學(xué)生在完成實驗項目的過程中,遴選出了一些非常不錯的Web滲透測試平臺,其中包括Zico2、Billu_b0x、HackInOS、Wakanda、Hackme等靶機平臺.以HackInOS平臺為例,它是一款CTF風(fēng)格的Web漏洞平臺,學(xué)生在虛擬機上搭建完成后,找到了平臺中存在的文件上傳漏洞,之后利用該漏洞上傳WebShell拿到權(quán)限,最終利用Docker逃逸成功提權(quán),拿到了“flag”文件的信息,如圖7所示.
圖7 HackInOS平臺滲透測試報告
圍繞Web安全十大威脅,對《Web安全技術(shù)》課程的實驗項目設(shè)計、實驗平臺遴選、實驗開展過程等環(huán)節(jié)進行了一系列的探索與實踐.在基礎(chǔ)實驗項目的開展過程中,以Pikachu平臺的漏洞實例為導(dǎo)向,將知識點與實驗項目緊密結(jié)合,學(xué)生在完成實驗的過程中,通過對代碼的深入分析,可以透徹理解漏洞的成因,掌握漏洞的挖掘技術(shù)和防御策略.而Web綜合滲透測試實驗的開展,一方面學(xué)生需要自主搜尋合適的“靶機”平臺,充分調(diào)動了學(xué)生的主動性,另一方面,學(xué)生需要采用“黑盒測試”的模式,對“靶機”平臺中存在的漏洞進行檢測與利用,最大限度地激發(fā)了學(xué)生的學(xué)習(xí)興趣.課程實踐表明,《Web安全技術(shù)》實驗教學(xué)效果良好,學(xué)生在具體實驗過程中能夠牢牢地掌握知識要點和專業(yè)技能.