網站漏洞攻擊之跨站請求偽造CSRF

什麼是CSRF

跨站請求偽造是一種互聯網安全漏洞,它允許一個攻擊者誘導用戶操作他們不想要進行的操作。它允許攻擊者繞過同源策略來攻擊(一種設計用來阻止不同互相干涉的策略)。

網站漏洞攻擊之跨站請求偽造CSRF

跨站攻擊有什麼影響

在一個成功的跨站攻擊中,攻擊者可以讓受害者用戶無意之中執行一些操作。比如,他可以更改賬戶的郵件地址或者密碼或者進行資金轉賬等。如果受害者擁有更高的權限,那麼整個操作系統和上面的數據文件都會受到竊取和破壞。

跨站攻擊的原理

進行跨站攻擊,必須滿足三個條件:

  • 相關操作-攻擊者應該能夠誘導用戶操作某些動作,比如修改密碼等。
  • 基於cookie的會話處理-執行跨站偽造需要發出一個或者多個http請求,並且該請求是通過cookie來標識用戶的。
  • 請求參數固定-跨站請求不能包含無法確定或者猜測的其它參數。例如,如果修改密碼需要當前密碼的值,那麼攻擊者就無法進行攻擊。
網站漏洞攻擊之跨站請求偽造CSRF

跨站攻擊的例子

假設有這樣一個通過忘記密碼的請求,請求的頭如下:

POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE
[email protected]
網站漏洞攻擊之跨站請求偽造CSRF

如果發送這個請求可以修改用戶的密碼,那麼攻擊者和就可以構造一個下面的網頁。







當受害者訪問這個網頁的時候,因為用戶攜帶有網站的cookie,那麼他就會將cookie和郵箱一併提交給網站,而網站認為是用戶自己進行的請求,導致用戶的密碼洩露。

如何進行跨站請求偽造

首先,攻擊者會將惡意的html放到他們控制的網站上。

然後,誘導用戶訪問該網站。

最後,通過電子郵件或者社交媒體向用戶發送指向網站的鏈接。

如何防止跨站偽造

最可靠的防止跨站請求偽造的方式就是使用csrf令牌,這個令牌在很多語言和框架中都有實現。因為令牌是不可預測的,所以當用戶進行操作的時候,都需要拿著令牌進行相關操作,這樣就使得攻擊者不能滿足請求參數固定這個條件,導致無法進行攻擊。

常見的csrf漏洞

最常見的csrf漏洞就是csrf令牌驗證錯誤引起的。假還是下面的請求頭。這裡添加了csrf這個token。

POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 68
Cookie: session=2yQIDcpia41WrATfjPqvm9tOkDvkMvLm
csrf=WfF1szMUHhiokx9AHFply5L2xAOfjRkE&[email protected]

這樣應該可以防止csrf攻擊,因為它打破了csrf的三個必要條件,不僅依賴cookie,還有csrf這個攻擊者無法確定的參數。但是,攻擊者卻可以通過多種方式來打破這種防禦。

一種情況是當請求方法使用GET方法時,可以跳過驗證。因為get方法可以獲取到當前的token然後,進行訪問就會導致攻擊成功。

一種情況是攻擊者先通過自己的賬戶訪問網站,獲取到令牌,然後通過該令牌和用戶的請求進行偽造,導致攻擊成功。

一種情況是令牌重複,比如 發出的令牌陳宮之後,服務器保存發出的令牌記錄。當後續進行請求的時候,應用程序只是驗證令牌和cookie中的值是否一致,導致雙重提交攻擊。

網站漏洞攻擊之跨站請求偽造CSRF

總結

隨著人們的安全意識提升,現在很多開發者都已經非常重視跨站請求偽造攻擊了。但是還是有部分網站,或者一些菜鳥程序員會犯一些低級錯誤。僅以此文提醒程序員們,代碼須謹慎,漏洞二行淚。

"


分享到:


相關文章: