xss安全測試流程
阿新 • • 發佈:2018-12-16
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
-
-