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,對於驗證碼,進行轉賬時,可輸入圖形驗證碼,也可以添加手機接收驗證碼等功能。
閱讀更多 發哥微課堂 的文章