06.12 CSRF漏洞詳解,一文看懂CSRF

0x00:CSRF 簡述

CSRF(Cross Site Request Forgery,跨站請求偽造),字面理解意思就是在別的站點偽造了一個請求。專業術語來說就是在受害者訪問一個網站時,其 Cookie 還沒有過期的情況下,攻擊者偽造一個鏈接地址發送受害者並欺騙讓其點擊,從而形成 CSRF 攻擊。

0x01:CSRF 案例

受害者 (A) 登錄了某個銀行給朋友 (B) 轉賬,其轉賬操作發送的請求 URL 如下:

https://www.xxxx.com?account=A&money=10000&touser=B

account 代表受害者,money 是要轉賬的金額,touser 是被轉入的賬戶。發送這個鏈接請求後,A 給 B 轉賬的操作完成。這時攻擊者(C)偽造了一個鏈接,如下:

https://www.xxxx.com?account=A&money=10000&touser=C

這個鏈接的請求是 A 用戶給 C 用戶轉賬一萬元。當 A 沒有登錄不存在 Cookie 信息時,此鏈接是無法執行的。這時攻擊者通過一系列手段讓 A 執行此鏈接,當 A 登錄銀行沒有退出的時候,點擊此鏈接便會執行成功。

0x02:代碼示例

當程序對於類似此敏感信息操作提交時,沒有進行相應的防護,便會產生 CSRF 攻擊,例如一下代碼:


0x03:如何測試

在滲透測試中,可以先看下網頁源代碼對於敏感信息提交有無防護措施,初步判斷是否存在 CSRF,隨後通過抓包確定提交的完整 URL 鏈接,並偽造另一個鏈接進行測試。

在代碼審計中,可以先查看網頁源代碼,是否有防護措施。隨後可查看 WEB 應用程序的配置文件中是否有相應的驗證措施,最後查看後臺的處理邏輯,對於發送過來的請求是否有過濾等措施。

0x04:防護方法

1,二次驗證,進行重要敏感操作時,要求用戶進行二次驗證。

2,驗證碼,進行重要敏感操作時,加入驗證碼。

3,驗證 HTTP 的 Referer 字段。

4,請求地址中添加 Token 並驗證。

5,HTTP 頭中自定義屬性並驗證。

0x05:防護代碼

1,對於二次驗證,可添加 JS,提交請求後詢問客戶是否提交,而不是直接發送請求給後臺。



2,對於驗證碼,進行轉賬時,可輸入圖形驗證碼,也可以添加手機接收驗證碼等功能。


分享到:


相關文章: