xss的目的就是在被攻擊用戶的瀏覽器上運行攻擊者編輯腳本代碼。
根據攻擊方式,xss可以分為三類:反射型xss、存儲型xss和DOM型xss.
反射型xss
三個對象:攻擊者、受害者和有價值的網站。
三個條件:用戶訪問網站並提交數據,響應數據或頁面中包含提交的數據,網站對輸入輸出數據沒有充分檢查。
注:xss攻擊的價值在於用戶和網站之間的關系,比如用戶的個人數據、敏感操作、網購或銀行操作等。通過使受害者執行攻擊者的腳本,使攻擊者獲取受害者的cookie等敏感數據,進而可以竊取受害者的臨時身份,進行一系列操作。當然,也可以將動作寫入腳本中,使受害者之間進行錯誤操作,比如轉賬、刪除文章、關注某某等,而網站會以為這一切都是用戶的自主行為。
場景:
1、攻擊者挖掘到有價值網站的反射型xss漏洞,通過業務分析,構建出有危害性的、執行特定目的的payload語句。
2、攻擊者通過社交誘使受害者點擊構造的包含payload的url。比如通過qq、郵件等發送,或者嵌入在某些網頁中,包含誘使用戶點擊的內容,如美女或緊急消息,或者結合點擊劫持技術。
3、網站接收受害者的請求及攜帶的payload數據,沒有經過充分檢查,將其作為返回數據直接返回或包含在返回的頁面中。
4、受害者的瀏覽器接收響應,payload作為腳本被成功執行。
漏洞手動挖掘
1、分析可能的注入點
從數據提交着手,按照數據構成方式,可以將數據來源分為兩類:一是網頁希望用戶進行輸入的,二是js自動構建的。
三種數據提交方式:地址欄提交url,表單form提交,以及js提交。對於一般用戶,地址欄提交url不在業務場景內。
對於表單form提交,一般都是基於用戶輸入的內容進行提交,但是不排除js對hidden屬性的輸入元素進行了動態賦值。
對於js提交,可以是完全是基於用戶輸入數據提交,也可以包含一些js自動構建的數據,甚至可以完全是基於js自動構建的數據。
我們可以根據參數名,獲取參數來源的元素id以及文檔頁面等分析參數的意義,進而構建業務場景,分析后台處理機制和可能的返回頁面。
2、尋找注入點
針對每一個參數,進行不同類型的賦值,研究響應頁面。
基於響應頁面,我們可以進一步分析參數作用和后台機制。
查看響應頁面是否包含提交的參數值,或有關聯的值,找到反射型xss注入點——即數據的提交對象和參數名,以及響應頁面或響應數據。
3、分析響應
我們需要查看提交的參數被包含在響應頁面的對應點,構造payload使其能夠作為js代碼被執行,並根據服務器可能的、不同的參數過濾器修改payload進行測試。
自動挖掘漏洞
1、基於爬蟲代碼,能夠模擬用戶使用瀏覽器進行工作,獲取html、css、js、jsp、php等代碼。
2、審計代碼,通過發現參數提交點判斷可能的注入點,比如form和submit類型的input標簽,js的ajax函數。(到這一步,可以將可能的注入點提取出來,整理成表交給攻擊者分析和手動注入)。
3、基於每一個參數進行不同類型的數據構造,分析響應頁面尋找注入點。
4、針對明確的注入點,結合參數在響應頁面的位置,構造不同payload去試圖突破過濾器。
自動挖掘工具
burpsuite
存儲型XSS
存儲型與反射型原理基本一致,只不過是把提交的內容保存到服務器,允許其它用戶進行查看。當一般用戶請求包含提交的payload文本內容時,該payload將在用戶的瀏覽器上加載並作為腳本執行。
其關鍵也在於服務器是否對用戶提交的數據進行充分過濾。
存儲型xss可能存在於評論、博客、站內消息等等。