聊一聊(XSS)跨站腳本攻擊

發表于:2021-4-13 09:47  作者:羅獅小釘   來源:51Testing軟件測試網原創

字體: | 上一篇 | 下一篇 |我要投稿 | 推薦標簽: 軟件測試 軟件測試技術

  跨站腳本攻擊(XSS)是一種將惡意腳本注入到可信任網站中的一種攻擊方式。在XSS攻擊中,攻擊者利用web應用程序將惡意代碼發送至終端用戶。這些惡意腳本通常經由瀏覽器端形式呈現, 惡意攻擊者往web頁面里插入惡意Script代碼,當用戶瀏覽該頁面時,嵌入web頁面中的Script代碼就會被執行,這樣即可達到惡意攻擊用戶的目的。

  【概述】
  在互聯網中,XSS幾乎到處可見,例如:當應用程序接受用戶輸入時,這些內容在未經驗證或編碼的情況下,就直接經由web應用程序生成相應的輸出。XSS漏洞借助于php輸出函數,將javascript代碼輸出到html頁面中,再通過用戶本地瀏覽器執行,所以在代碼審核中,查找XSS漏洞的關鍵就在于找到那些入參未經過濾的輸出函數。
  攻擊者利用XSS將惡意腳本發送給毫無戒心的大眾用戶,瀏覽器端用戶們在不知情的情況下執行了這些不受信任的惡意腳本,從而泄漏了自己在瀏覽器端保留個人隱私身份驗證等相關狀態信息(如:與該站點相關的cookie、session、token以及其他敏感信息)。此外,攻擊者的惡意腳本甚至還可以重寫HTML頁面內容。

  【XSS分類】
  反射型XSS:<非持久化>
  攻擊者事先制作好惡意鏈接,需要用戶自己去點擊鏈接才能觸發XSS代碼(這些代碼不會被保存至服務端)。

  存儲型XSS:<持久化>添加線程組
  惡意代碼存儲在服務器中,如攻擊者在個人信息或發表文章等頁面中加入惡意腳本;在接受輸入參數時,如果沒有對這些入參進行過濾或過濾不嚴謹,那么頁面中的惡意代碼將存儲到服務器中,一旦有用戶訪問該頁面時,就會觸發惡意代碼。這種XSS非常危險,容易造成蠕蟲(會大量盜竊用戶cookie信息)。

  【反射型XSS詳解】
  當攻擊者在單個HTTP響應中注入瀏覽器可執行的代碼,這時就會發生反射型跨站腳本攻擊(Reflected_XSS)。由于這類注入攻擊不會駐留在應用程序本身,所以它是一種非持久性注入,僅對于那些打開惡意鏈接(刻意制作的)或第三方頁面的用戶造成影響。這些帶有攻擊性的惡意字符串包含在攻擊者精心設計的URL或HTTP參數中,被存在安全隱患的應用程序處理后,將結果返回給用戶(受害者/被攻擊者)。
  反射型跨站腳本攻擊(Reflected_XSS)是XSS攻擊中最常見的類型,這類攻擊也稱非持久型XSS攻擊,因為此類攻擊的載體源于單個請求,通過響應將返回結果傳遞給客戶端瀏覽器,然后被用戶執行,從而觸發Reflected_XSS(Reflected_XSS也稱一階XSS,即XSS的第一種類型)。
  一個易受到Reflected_XSS攻擊的web應用程序,會將請求中未經驗證的輸入通過響應直接回傳給客戶端。常見的攻擊手段/途徑有:精心設計步驟(攻擊者創建問題URI),社會工程相關(試圖說服受害者將其URL加載到他們的瀏覽器上),最終攻擊者就能通過受害者的瀏覽器來執行問題代碼。
  從前文可知,攻擊者的代碼大多都用JavaScript語言編寫,當然也可以是其他腳本語言,例如ActionScript,VBScript等。攻擊者通常利用web應用程序漏洞來安裝密鑰日志,竊取受害者的Cookie,進行剪貼板盜竊,以及更改頁面內容(例如添加下載鏈接等)。
  預防XSS漏洞的主要困難之一是如何設置合適的字符編碼進行參數過濾。在某些情況下,Web服務器或Web應用程序可能無法過濾一些特殊的字符編碼,例如Web應用程序可能會過濾掉<script>,但也許不會過濾 ”%3cscript%3e“。

  【反射型XSS測試方法】
  (1)黑盒測試
  黑盒測試包含三個階段:

  檢測輸入
  針對web應用程序中每個頁面上的用戶自定義輸入,測試人員必須確定其輸入形式,包括隱藏(hidden),或者非顯式的輸入,如:HTTP參數、POST數據、表單中的隱藏字段以及預定義的單選(radio)或下拉選框(selection)中的值。 這些隱藏變量可以通過瀏覽器內置HTML編輯器或是web代理來查看。

  分析輸入
  分析頁面上每一項用戶輸入以檢測潛在漏洞。為了發現XSS漏洞,測試人員通常會將“定制化”數據作為輸入框的測試數據,這類測試數據不會對應用程序造成損害,其目的只是用于觸發來自瀏覽器的響應,從而驗證漏洞是否存在。測試數據可以通過[web application fuzzer]自動生成或手動構造,例如:

  更多有關潛在測試字符串的完整列表,參見https://owasp.org/www-community/xss-filter-evasion-cheatsheet。

  檢查影響
  對于以上所有測試數據,測試人員需要關注并分析其提交后的響應結果,從而確定每條數據是否對web應用程序安全性造成實際影響(漏洞的存在)。一旦發現漏洞,測試人員需要識別出漏洞存在的原因,例如:應用程序未對輸入數據采取合適編碼,應用程序對某些特殊字符沒有進行過濾或替換等。
  理想情況下,所有HTML的特殊字符都要替換成HTML實體:

  更多HTML實體規則可以參見:https://www.w3school.com.cn/tags/html_ref_entities.html
  在HTML或JavaScript代碼上下文中,特殊字符需要轉義,編碼,替換或過濾,這些字符包括:

  更多完整參考,請參見[Mozilla JavaScript指南]:
  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Using_special_characters_in_strings

  Example 1
  有如下站點自帶welcome提示及下載鏈接:

  測試人員本著懷疑每個數據輸入點都可能導致XSS攻擊的原則,對其進行分析后,嘗試以下測試數據:

  如果出現如下彈出框,則說明存在一個XSS漏洞,并且這個鏈接可以在任何瀏覽器中執行。

  Example 2
  除了在URL中提交植入的 JS alert彈框外,還可以有如下嘗試:

  從URL附帶的提交數據中可以發現,測試人員(模仿攻擊者)改變了當前頁面中的超鏈接資源,將鏈接引導到一個惡意的可執行文件,只要這個超鏈接被用戶點擊,就會在本地自動下載惡意文件“malicious.exe”:

  值得一提的Bypass XSS Filters
  當web應用程序啟用防火墻阻止惡意輸入,或通過web瀏覽器中自帶的內嵌機制,清理應用程序的外來輸入時,反射型跨站腳本攻擊(Reflected_XSS)是可以防止的。
  但在測試的時候,測試人員必須假定web瀏覽器是不具備阻止攻擊的機制,且客戶端也未開啟防火墻,這是因為在一些過時的瀏覽器中,相關過濾機制內置的安全防范功能已經被禁用了。同樣的道理,我們也不能保證即便客戶端防火墻開啟后,web應用程序能夠識別“與時俱進”的未知攻擊,網絡攻擊者往往緊跟時代步伐,制作出web應用程序防火墻無法識別的攻擊性字符串。
  大多數XSS預防取決于Web應用程序對“不可信用戶”輸入的清理。開發人員可以通過多種機對“問題輸入”進行凈化,例如返回錯誤,刪除,編碼或替換無效輸入。

  Example 3:Bypass XSS Filters —— 僅通過標簽屬性值
  雖然Bypass XSS Filters基于黑名單,但并不能阻止每種類型的字符串表達式。在實際情況下,甚至于不需要依賴<script>標簽就能發起XSS攻擊。例如頁面中有如下input輸入框:

  攻擊者可以直接在該輸入框中提交以下代碼:
" onfocus="alert(document.cookie)

  Example 4:Bypass XSS Filters —— 通過編碼植入未知變體
  在某些情況下,可以通過混淆攻擊來簡單地破壞基于簽名的過濾器。通常,攻擊者可以通過在語法或后續編碼中插入未知變體(如下實例)來實現此目的。當返回時,瀏覽器會將這些變體視為有效的HTML內容。

  Example 5:Bypass XSS Filters —— 繞過非遞歸機制的過濾
  有時過濾器的清理僅應用一次,不會遞歸執行。在這種情況下,攻擊者可以通過發送包含多次嘗試的字符串來擊敗多濾器,例如:

  Example 6:Bypass XSS Filters —— 包含外部腳本
  假設目標站點的開發人員實現了以下代碼,用來保護輸入內容免受外部腳本的影響。

  以上代碼中的正則表達式: $re = "/<script>+src/i" 
  用來檢查是否存在這樣的插入:<script [anything but the character: '>'] src
  這種判斷僅針對于過濾類似于如下常見攻擊有效。

  但可以在script和src中間的某個屬性利用”>“字符進行繞過, 從而發起reflected-XSS攻擊,不知不覺中讓用戶執行了攻擊者web服務器上存儲的javascript代碼,例如:

  可以看出這里利用了reflected-XSS漏洞,執行了javascript代碼,這些代碼看似來自受害網站http://example/, 實際上是存儲在攻擊者的Web服務器上。

  (2)灰盒測試
  這里的灰盒測試有點類似黑盒測試,但需要測試人員對應用程序有一定的了解,例如用戶可能的輸入,輸入的驗證機制,輸入提交后的返回信息,以及返回信息呈現給用戶的方式。如果測試人員有權限可以查看源代碼(白盒測試),那么還需要對每個用戶變量進行深入分析,此處已涉及更多白盒測試相關領域,暫不進行拓展。

  【總結】
  文章介紹了Cross Site Scripting (XSS) 跨站腳本及其分類展開介紹,其中針對反射型XSS(reflected-XSS)漏洞以及常見測試方法,應用場景進行詳細剖析,對于軟件測試從業者而言,無論是否身兼安全/滲透測試一職,都需對基本的安全漏洞有宏觀的認知,希望本次分享能夠給各位帶來收獲,持續完善你的測試知識庫。
  
      版權聲明:本文出自51Testing會員投稿,51Testing軟件測試網及相關內容提供者擁有內容的全部版權,未經明確的書面許可,任何人或單位不得對本網站內容復制、轉載或進行鏡像,否則將追究法律責任。

評 論

論壇新帖

頂部 底部


建議使用IE 6.0以上瀏覽器,800×600以上分辨率,法律顧問:上海信義律師事務所 項棋律師
版權所有 上海博為峰軟件技術股份有限公司 Copyright©51testing.com 2003-2021, 滬ICP備05003035號
投訴及意見反饋:webmaster@51testing.com; 業務聯系:service@51testing.com 021-64471599-8017

滬公網安備 31010102002173號

51Testing官方微信

51Testing官方微博

掃一掃 測試知識全知道

农村里的风流韵事