1. 程式人生 > >xss安全測試流程

xss安全測試流程

xss安全測試流程

1. xss本質

xss產生的本質只有兩點,1. 對使用者可控的輸入內容沒有進行有效的過濾;2. 將(沒過濾的)使用者可控內容輸出回前端頁面。所以xss的安全測試可以從這兩方面入手。

2. 收集xss可能存在的點

由於xss的利用特徵,儲存型xss危害最大,可以盜取使用者cookie,形成蠕蟲等;反射型和DOM型主要用於釣魚。所以在關注上述兩點時應遵循以下規律:

  • 使用者可控的輸入在協議層面上分為GET請求和POST請求,通過對使用者可見的頁面瀏覽,進而對引數進行歸類
    • 將會存入資料庫中的引數單獨分類。
    • 在其他不需要存入資料庫中的引數只檢視GET請求的引數

3. 對蒐集到的點做返回測試

自定義一個特殊字串,如projecttest1這類,不會和前端中的變數名或值相同的特殊字串,在這裡稱其為“標記”。對上述兩類變數以標記字串賦值後提交。在返回頁面中檢視原始碼,ctrl+f搜尋原始碼中出現標記的地方。出現哪個變數的標記值,即認為此變數的值回顯在前端。對所有值回顯的變數進行下一步測試。

4.xss測試

  • xss測試payload:

    <script>alert(1)</script>
    <img src=x onerror=alert(1)>
    
  • 若標記引數的值存在於html標籤的屬性中的,先閉合屬性和標籤再嘗試xss payload,或指在屬性中引用js

    <input type="text" name="YJDZ" value="protest1" title="通知書郵寄地址">
    //在這個例子中,標記protest1在value屬性中,在進行測試時需先閉合當前標籤
    "><script>alert(1)</script>
    888" onload=alert(1)
    
  • 對沒有輸出在屬性中的,直接嘗試xss測試程式碼在返回介面中變成了alert(1),那麼存在過濾,進行過濾測試

5. 過濾測試

  • 首先針對測試過程中用到的敏感單個字元進行測試

    <>"';()\/#%等
    
    • 若有某些標籤沒有被輸出,則說明被過濾,嘗試繞過或替代,若無法繞過,則說明不存在xss

    • 若都正常輸出,則不存在某個字元被過濾,繼續進行標籤測試

      <script></script>,<img src=x>
      • 檢視原始碼,若找不到對應位置應出現的標籤,說明被過濾,嘗試使用其他標籤繞過,若無法繞過,說明不存在xss

      • 檢視原始碼,若能找到標籤並在前端沒有輸出成字串,說明標籤成功被瀏覽器解析,可進行程式碼測試

        <script>alert(1)</script>
        
        • 若在原始碼中可以看到標籤,但沒有看到程式碼,則說明針對函式進行了過濾,嘗試使用其他函式繞過,若無法繞過,說明不存在xss