◆金濤 霍旭磊 王亞麗
XSS的攻擊利用與防護策略研究
◆金濤 霍旭磊 王亞麗
(甘肅政法大學公安技術學院 甘肅 730070)
XSS是一種常見的針對Web應用攻擊的安全漏洞,造成漏洞的主要原因是服務器端對攻擊者輸入的惡意語句沒有進行過濾或轉義,導致惡意語句被執(zhí)行,造成客戶端被攻擊的危害。本文介紹了XSS的分類和利用實例,提出了檢測方法和防護策略。
XSS漏洞;DVWA;漏洞利用;漏洞防護
隨著第八屆中國網絡安全大會的成功舉辦,網絡安全的話題越來越被全民關注。網絡系統(tǒng)漏洞中,Web應用最易受到惡意攻擊,影響也最為廣泛。其中的XSS(Cross Site Scripting,跨站點腳本)漏洞連續(xù)數(shù)次出現(xiàn)在OWASP TOP 10(OWASP十大應用安全風險)榜單當中。
XSS是指攻擊者在網站正常輸入界面中插入惡意腳本對用戶和系統(tǒng)造成危害的Web安全漏洞。“跨站攻擊”指不直接攻擊Web服務器,而以其為跳板攻擊客戶端。主要分為反射型XSS、存儲型XSS、基于DOM的XSS三種類型。
此次實驗平臺是DVWA靶場(Damn Vulnerable Web Application)[1],它包含了暴力破解、命令行注入、文件上傳等多種常見且危害巨大的web安全漏洞。支持調整靶場源碼的安全級別,分別為 Low,Medium,High,Impossible。級別越高,安全防護越嚴格,滲透難度越大。
1.2.1漏洞分析
攻擊者提交惡意腳本給服務器時,服務器沒有對其進行過濾或過濾的不充分,將腳本內容作為url的參數(shù)完整的返回給瀏覽器,當用戶點擊鏈接,惡意腳本會完全回顯,受到含有特殊目的攻擊[2]。
1.2.2漏洞驗證
選擇DVWA的 XSS(Reflected)漏洞模塊進行漏洞驗證并利用。
(1)插入漏洞檢測腳本:,如圖1所示:
圖1 插入檢測腳本
(2)彈窗顯示Reflected1,判斷其可能存在XSS反射型漏洞,如圖2所示:
圖2 彈出指定內容
(3)為了進一步驗證存在XSS反射型漏洞,可以使用Burp Suite來查看HTTP響應內容中是否完全回顯了所插入的檢測腳本。結果發(fā)現(xiàn),檢測腳本被完全回顯,如圖3所示:
圖3 腳本完全回顯
1.2.3漏洞利用
(1)插入惡意獲取cookie的語句,此處IP地址為攻擊者所控制的機器IP,通過受害者點擊含有惡意語句的鏈接來監(jiān)聽訪問請求信息,并盜取cookie信息。
(2)當受害者點擊惡意鏈接時,攻擊機使用netcat工具監(jiān)聽,成功獲取到用戶cookie信息,如圖4所示:
圖4 盜取cookie信息
(3)替換cookie信息從而冒名登錄,可見攻擊者成功登錄,這也說明漏洞利用成功,如圖5所示:
圖5 冒名登錄
1.3.1漏洞分析
當用戶提交信息給服務器時,服務器對提交的內容沒有過濾或過濾的不充分,數(shù)據(jù)會被服務器存儲,一般會直接顯示。若當服務器存儲了攻擊者插入的惡意代碼時,每當有用戶點擊漏洞位置時,惡意代碼就會被執(zhí)行[3]。如果管理員沒能及時清除惡意代碼并修復漏洞,它就會被長期保存在服務器中,而且很可能被其他攻擊者再次利用,造成持久性的漏洞危害。這也是存儲型XSS漏洞比反射型XSS漏洞危害更大的原因之一。
1.3.2漏洞驗證
選擇DVWA的 XSS(Stored)漏洞模塊進行漏洞驗證并利用。
(1)插入檢測腳本:,若腳本的長度被限制,一般可通過網頁前端檢測元素功能對 max屬性進行修改,以便完整輸入檢測腳本,如圖6所示:
圖6 插入檢測語句
(2)插入檢測語句后,當再瀏覽此模塊時,會彈出檢測語句,如圖7所示:
圖7 彈出指定信息
(3)可以看到name為check的檢測語句已經被存儲到了數(shù)據(jù)庫中,并顯示了出來,如果網站管理員沒能及時清除它,每當用戶瀏覽到這個模塊的時候,都會受到攻擊,如圖8所示:
圖8 惡意腳本被存儲
1.3.3漏洞利用
插入上文中惡意獲取用戶cookie信息的語句,同樣能獲取到用戶cookie信息,通過替換cookie的方式冒名登錄其他賬戶[4]。而與反射型XSS不同的是,存儲型XSS漏洞被插入的惡意語句存儲時間長,受害用戶多,危害程度更大。
1.4.1漏洞分析
DOM是一個與網站系統(tǒng)、編譯語言不相關的接口,通過它,用戶可以隨時更新文檔內容、結構和樣式,動態(tài)地檢查和修改頁面內容。此漏洞不需要提交數(shù)據(jù)到服務器端來進行攻擊,而是從客戶端獲得其中的數(shù)據(jù)后在本地執(zhí)行,一旦其中的算法沒有經過嚴格防護,就可能被攻擊成功。
1.4.2漏洞驗證
選擇DVWA的 XSS(DOM)漏洞模塊進行驗證并利用。
(1)頁面的本意是選擇默認語言,如圖9所示:
圖9 語言選擇界面
(2)插入檢測腳本:,構造URL:IP/dvwa/vulnerabilities/xss_d/?default=English%20 &&,可以發(fā)現(xiàn)會彈出DOM字符,說明漏洞存在,如圖10所示:
圖10 彈出指定信息
1.4.3漏洞利用
插入盜取用戶cookie信息的腳本:,可以看到瀏覽器彈出了客戶端的cookie信息,者說明基于DOM型的XSS漏洞被利用成功,如圖11所示:
圖11 彈出cookie信息
獲取cookie信息成功后,通過替換cookie信息的方式同樣實現(xiàn)了冒名登錄其他賬戶,說明基于DOM的XSS漏洞利用成功。
除了利用以上手工檢測方法外,還可以通過源碼審計及時發(fā)現(xiàn)漏洞代碼,或是利用自動化檢測工具進行漏洞探測[5],這里著重介紹綜合漏洞掃描工具Nessus和專門檢測XSS漏洞的XSSer。
Nessus是一款非常優(yōu)秀的綜合漏洞掃描工具,不僅支持包括XSS在內的多種漏洞掃描功能,還可實時對其漏洞數(shù)據(jù)庫進行更新??蛻舳撕瓦h程端可同時操作,多終端實時對系統(tǒng)漏洞掃描和分析。Nessus是綜合漏洞掃描器,但如果只需要針對XSS漏洞進行檢測時,可以使用XSSer。
XSSer(Cross site “scripter”)是專門檢測XSS漏洞的安全工具,獨有的代碼注入技術,可繞過部分防護策略來自動化檢測XSS漏洞,誤報率相對較低,更準確。同時它還可以對xss漏洞進行利用,這為安全工作者帶來了極大的便利,在專門針對XSS漏洞進行檢測驗證時,一直都是被首選的安全工具。
一般的瀏覽器都內置了防范XSS的方法,例如CSP(Content Security Policy,內容安全策略)可防范簡單XSS攻擊[6]。但對于完全防范來說,還需要更高級的方案。
所有輸入的內容進行嚴格檢查,對語句中"/""script""<"">"等特殊字符進行過濾、編碼或轉義。一般前端框架中都有DecodeingMap程序,它可用于過濾或轉義用戶所輸入的特殊字符和HTML標簽。例如vuejs中的DecodingMap程序,可以用來過濾用戶輸入信息中script標簽里的內容。簡單的DecodeingMap程序如圖12所示:
圖12 簡單過濾代碼
HttpOnly是最常見的防止cookie被劫持的方法之一,當cookie中設置了這個屬性時,通過動態(tài)腳本則無法獲取其內容。
當對用戶的輸入內容進行檢查后,服務器的輸出內容也不能忽視。除RFT(Rich Text Format,富文本格式)的輸出外,其他需要對變量進行編碼或轉義后再輸出到HTML頁面。利用sanitize-html模塊來處理就是很好的方式。
XSS漏洞作為Web應用的經典漏洞類型,已經存在多年。直到現(xiàn)在,跨站腳本攻擊仍是許多站點前端安全的最大威脅。本文對不同類型的XSS漏洞進行了分析和利用,同時提出了手工檢測、源碼審計和工具探測三種檢測方法,最后針對用戶和服務器端分別提出了不同防御手段。
[1]孫宇成,尹航.XSS漏洞分析與攻擊平臺的搭建[J].電腦知識與技術,2020,16(12):88-89+92.
[2]劉建亮,喬興華.跨站腳本攻擊及防范方法研究[J].科學技術創(chuàng)新,2020(10):137-138.
[3]谷家騰. 基于動態(tài)分析的XSS漏洞檢測方法研究[D].北京郵電大學,2019.
[4]王丹,劉立家,林九川,趙文兵,杜曉林.基于DOM狀態(tài)轉換檢測XSS漏洞[J].北京工業(yè)大學學報,2018,44(09):1208-1216.
[5]黃波,孫羽壯. XSS跨站攻擊原理與調查方法研究[J]. 網絡安全技術與應用,2017,000(006):50-52.
[6]龔小剛,王紅凱,夏威,等. 跨站腳本攻擊(XSS)的形成與利用研究[J]. 信息安全與技術,2015(3):52-55.
本文系2016年蘭州市科技計劃項目(2016-2-45)“基于大數(shù)據(jù)的網絡犯罪信息情報分析模式的研究”;甘肅省“證據(jù)科學技術研究與應用創(chuàng)新團隊”項目(編號2016C-09)