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

CSRF安全測試流程

CSRF安全測試流程

1. csrf本質

跨站請求偽造的本質是通過偽造關鍵操作的資料包內容,從而藉助擁有執行身份的使用者儲存cookie的瀏覽器傳送出去,達到讓使用者不知情的情況下,“神不知鬼不覺”的執行的目的。

2. 收集csrf有利用價值的點

csrf由於其利用的特殊性,並不需要將整個站點的所有資料包均測試一遍,只需測試有csrf價值的點即可。具體“有無價值”的判斷規則需自己定義,但一般情況下,一些需要許可權的即時性的操作往往需要檢驗是否存在csrf,如:

1. 轉賬,購買
2. 修改密碼
3. 刪除,釋出內容
···

一般情況下,足夠安全的轉賬,購買,修改密碼功能通常是多步驟的,並且穿插多種驗證,這種情況下無需進行csrf測試,但如果上述功能通過單詞操作完成執行(我們也是不建議如此操作的),則需要測試csrf。

3. 手工測試

若本次操作中存在csrf token引數,或存在驗證碼等防禦行為,則不存在csrf漏洞。若將資料包中的referer欄位去掉,或僅僅刪除referer欄位的值,重新發送得到伺服器的正確受理。那麼可認為存在csrf漏洞,若是在對referer欄位修改後伺服器受理該請求報錯,則可以認為伺服器防禦csrf漏洞的方法是檢驗referer欄位,可利用下面方法繞過referer欄位的檢驗:

  • 通過使用data協議,自寫一個html頁面:

    <html>
        <body>
           <iframe src="data:text/html;base64,PGZvcm0gbWV0aG9kPXBvc3QgYWN0aW9uPWh0dHA6Ly9hLmIuY29tL2Q+PGlucHV0IHR5cGU9dGV4dCBuYW1lPSdpZCcgdmFsdWU9JzEyMycvPjwvZm9ybT48c2NyaXB0PmRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOzwvc2NyaXB0Pg=="
    >
    </body> </html>

    其中base64編碼部分是需要提交表單的程式碼,如例子中解碼後:

    <form method=post action=http://a.b.com/d>
        <input type=text name='id' value='123'/>
    </form>
    <script>
        document.forms[0].submit();
    </script>
    
  • https協議轉http協議時不攜帶referer欄位,可在自己https的伺服器上構建csrf頁面測試。

  • 判斷是否有域的檢測,如目標站點xx.com 驗證的referer是驗證的*.xx.com,可在二級域名中尋找可以發表自定義內容的頁面,之後加入圖片標籤<img “csrf地址”>後發表內容,換賬號訪問測試是否可以執行。