目錄
查找并利用存儲型XSS漏洞
1.1、簡介:
1.2、過程:
1.3、在Web郵件應用程式中測試XSS
1.4、在上傳檔案中測試XSS
混合檔案攻擊
在通過Ajax上傳的檔案中測試XSS
查找并利用存儲型XSS漏洞
1.1、簡介:
确定存儲型XSS漏洞的過程與确定反射型XSS漏洞的過程有很多相似之處, 都包括在應用程式的每一個進入點送出一個特殊字元串。但這兩個過程之間也存在一些重要的差別。在進行測試時, 必須記住這些差別, 以确定盡可能多的漏洞。
1.2、過程:
1、向應用程式中的每一個可能的位置送出一個特殊的字元串後, 必須反複檢查應用程式的全部内容與功能, 确定這個字元串在浏覽器中顯示的任何情況。在某個位置(如個人資訊頁面的姓名字段輸入使用者控制的資料, 這個資料可能會在應用程式的許多不同位置顯示(如使用者首頁上、注冊使用者清單中、任務等工作流程項目中、其他使用者的聯系清單中、使用者送出的消息或問題中、應用程式日志中等),應用程式可能對每個出現的字元串實施了不同的保
護性過濾,是以需要對它們進行單獨分析
2、應檢查管理者能夠通路的所有應用程式區域,确定其中是否存在任何可被非管理使用者控制的資料。如應用程式一般允許管理者在浏覽器中檢查日志檔案。這種類型的功能極有可能包含XSS漏洞,攻擊者通過生成含有惡意HTML的日志記錄即可對其加以利用
3、在向應用程式中的每個位置送出一個測試字元串時,并不總是把它作為每個頁面的每一個參數這樣簡單,在儲存被送出的資料之前,許多應用程式功能需要經曆幾個階段的操作。如注冊新使用者、處理購物訂單、轉賬等操作往往需要按預定的順序送出幾個不同的請求。為避免遺漏任何漏洞,必須確定每次測試徹底完成。
4、在探查反射型XSS漏洞時,應該注意可控的受害者請求的每一個方面,包括請求的所有參數和每一個HTTP消息頭,在探查存儲型XSS漏洞時,還應該分析應用程式用于接收并處理可控輸入的任何帶外通道,任何這類通道都是引入存儲型XSS攻擊的适當攻擊向量。同時,審查在應用程式解析過程中得到的結果,确定每一個可能的受攻擊面。
5、如果應用程式允許檔案上傳與下載下傳,應始終探查這種功能是否易于受到存儲型XSS攻擊
6、思考确定控制的資料是否可通過任何其他方法儲存在應用程式中并顯示給其他使用者。如果應用程式的搜尋功能顯示常用的搜尋項清單, 就可以通過多次搜素這個清單,引入存儲型XSS有效載荷,即使主搜尋功能本身安全地處理輸入
确定使用者控制的資料被應用程式儲存并随後在浏覽器中顯示的每一種情況後,應當遵循與前面描述的探查潛在的反射型XSS漏洞時相同的過程,決定需要送出哪些輸入,以在周圍的HTML中嵌入有效的JavaScript,然後嘗試避開幹擾攻擊有效載荷執行的過濾
在探查反射型XSS漏洞時,每次測試一個參數,并檢查每個響應中是否出現輸入,就可以輕易确定哪些請求參數易于受到攻擊。但在探查存儲型XSS漏洞時,要确定這一點并不容易。如果在每個頁面的每一個參數送出相同的測試字元串,那麼可能會發現,這個字元串在應用程式的許多位置重複出現,因而無法準确确定每個出現的字元串由哪個參數負責。為避免出現這個問題,在探查存儲型XSS時,可以為每個參數送出一個不同的測試字元串,如把測試字元串與它送出到其中的字段名稱連接配接起來
1.3、在Web郵件應用程式中測試XSS
1、由于Web郵件應用程式将直接從第三方收到的内容包含在向使用者顯示的應用程式頁面中,這種程式本身就存在存儲型XSS攻擊風險。要測試這種功能, 應該在該應用程式上建立自己的電子郵件賬戶,并通過電子郵件向自己實施大量xss攻擊,然後在該應用程式中檢視每封郵件, 确定是否有任何攻擊取得成功
2、為徹底完成這一任務,需要通過電子郵件發送各種反常的HTML内容(如在測試避開輸入過濾的方法)。如果僅限于使用标準電子郵件用戶端,可能會發現,無法完全控制原始的郵件内容, 或者郵件用戶端可能會淨化有意設計的畸形文法
3、最好是采用其他方法來生成電子郵件,以便于直接控制郵件的内容。一種方法是使用UNIX sendmail指令。首先需要使用應當用于向外發送電子郵件的郵件伺服器的詳細資訊配置電腦,再可以在文本編輯器中建立原始的電子郵件,并使用指令發送該郵件
1.4、在上傳檔案中測試XSS
1、如果應用程式允許使用者上傳可被其他使用者下載下傳并檢視的檔案, 就會出現儲存型XSS漏洞,這種漏洞常常被人們忽略,如今的應用程式通常都提供檔案上傳功能,除傳統的用于檔案共享的工作流功能外,檔案還可以通過電子郵件附件的形式傳送給Web郵件使用者,圖像檔案則可以附加到文章中, 并且可以用作定制的頭像或通過相冊共享
2、影響因素
檔案上傳過程中,可能會限制可以上傳的檔案的擴充名
檔案上傳過程中,可能會檢查檔案内容, 以确認其是否為所需的格式, 如JPEG
檔案下載下傳過程中,可能會傳回Content-Type消息頭, 以指定檔案所包含的内容的類型, 如image/jpeg
在檔案下載下傳過程中,可能會傳回Concenc-Disposition消息頭, 以指定浏覽器應将檔案儲存到磁盤上。否則對于相關的内容類型,應用程式會處理并在使用者的浏覽器中顯示檔案
3、在測試檔案上傳功能時, 首先應該嘗試上傳一個包含概念驗證腳本的簡單HTML檔案。如果該檔案被接受,則嘗試以正常方式下載下傳該檔案,如果應用程式按原樣傳回最初的檔案,并且腳本得以執行, 則應用程式肯定易于受到攻擊
如果應用程式阻止上傳的檔案, 則嘗試使用各種檔案擴充名, 包括.txt和.jpg。如果在使用其他擴充名時,應用程式接受包含HTML的檔案,則應用程式可能仍然易于受到攻擊,具體取決于其在下載下傳過程中如何傳送檔案。Web郵件應用程式通常易于受到這類攻擊,攻擊者可以發送包含誘惑性圖像附件的電子郵件, 如果使用者檢視該附件, 他們的會話将被攻破
即使應用程式傳回Content-Type消息頭,指定下載下傳檔案應為圖像, 但如果檔案實際包含的是HTML内容, 一些浏覽器仍然會将該檔案作為HTML處理
混合檔案攻擊
為防範上述攻擊,應用程式會對上傳檔案的内容執行某種确認,以確定其确實包含所需格式的資料。但使用混合檔案(在一個檔案中組合多種不同的格式)仍然可以對這些應用程式實施攻擊。
GIFAR檔案就是一種常見的混合檔案。GIFAR檔案包含GIF圖像格式和JAR(Java檔案)格式的資料,并且是這兩種格式的有效執行個體。這是因為, 與GIF格式相關的檔案中繼資料位于檔案的開始部分,與JAR格式相關的中繼資料則位于檔案的結尾部分。如果應用程式允許包含GIF資料的檔案, 那麼,在确認上傳檔案的内容時,該應用程式也可能會接受GIFAR檔案
使用GIFAR檔案實施的上傳檔案攻擊步驟
1、發現由一名使用者上傳的GIF檔案可由其他使用者下載下傳(如社交網絡應用程式中的使用者頭像)的應用程式功能。
2、建構一個GIFAR檔案,在其中包含一段Java代碼,用于劫持任何執行該代碼的使用者的會話
3、将該檔案作為他的頭像上傳,因為其中包含有效的GIF圖像,應用程式将接受該圖像
4、确定可利用上傳的檔案對其實施攻擊的适當外部網站,該網站可能為攻擊者自己的網站, 或允許使用者建立任意HTML(如部落格)的第三方站點
5、在該外部網站上,攻擊者使用<applet>和<object>标簽從上述社交網絡站點以Java applet的形式上傳GIFAR檔案
6、如果使用者通路該外部站點,攻擊者的Java applet将在其浏覽器中執行,與包含正常腳本的檔案不同,在遇到Java applet時,同源政策的執行方式會有所不同。Java apple将被視為屬于加載它的域,而不是調用它的域。是以攻擊者的applet将在社交網絡應用程式的域中執行。如果受害使用者在受到攻擊時已登入該社交網絡應用程式,或最近曾登入該應用程式并選中了保持登入狀态選項, 則攻擊者的applet将完全控制受害使用者的會話,進而侵入該使用者
在通過Ajax上傳的檔案中測試XSS
1、一些應用程式使用Ajax來檢索和呈現在片段辨別符之後指定的URL(如http://xxx.com/#profile)
當使用者單擊連結時, 用戶端腳本将處理單擊事件,使用Ajax來檢索在片段辨別符之後顯示的件, 并在現有頁面中的<div>元素的innerHtml中設定響應,這樣可提供無縫的使用者體驗,因為單擊使用者界面中的頁籤将更新所顯示的内容, 而無須重新加載整個頁面
2、在這種情況下,如果應用程式還包含其他允許上傳和下載下傳圖像檔案(如使用者頭像)的功能,就可以上傳一個包含嵌入式HTML标記的有效圖像檔案,并建構URL(http://xxx.com/#profile/image/13213.jpg),使用戶端代碼提取該圖像并将其作為HTML顯示
3、HTML可以嵌入到有效圖像檔案的各種位置,包括圖像的注釋部分,一些浏覽器樂于将圖像檔案以HTML格式顯示。圖像的二進制部分将顯示為亂碼, 而任何嵌入的HTML将正常顯示
4、假設潛在的受害者使用的是相容HTML5的浏覽器,如果所請求的域許可,該浏覽器可用于跨域傳送Ajax請示。在這種情況下,另一種可能的攻擊方法,是在片段辨別符後面放置一個絕對URL, 指定一個位于可與目标域進行Ajax互動的股務器上的、完全由攻擊者控制的外部HTML檔案。如果用戶端腳本不确認所請示的URL是否在同一個域上, 用戶端遠端檔案包含攻擊将取得成功