從零開始學CSRF

2022-01-21 15:34:51 字數 2317 閱讀 2360

csrf(cross-site request forgery)跨站請求偽造,由於目標站無token/referer限制,導致攻擊者可以使用者的身份完成操作達到各種目的。根據http請求方式,csrf利用方式可分為兩種。

我們先來看看csrf和xss的工作原理,先讓大家把這兩個分開來。

xss:

攻擊者發現xss漏洞——構造**——傳送給受害人——受害人開啟——攻擊者獲取受害人的cookie——完成攻擊

csrf:

攻擊者發現csrf漏洞——構造**——傳送給受害人——受害人開啟——受害人執行**——完成攻擊

舉個例子來說吧(受害者的**是a.cn,攻擊者的**是b.cn)攻擊者想要在某個**(**是某個開源cms)新增上另乙個管理員,但是這個**並沒有xss漏洞。怎麼辦呢?這時攻擊者發現了這個開源cms後台新增管理員時並沒有加入驗證碼或則token,只需要輸入要新增的管理員賬號和密碼點選確定就可以新增管理員賬戶了。這時和我一樣聰明的攻擊者在自己的伺服器上建立了乙個html檔案(假設位址是b.cn/index.html)。然後就給**管理員發郵件等等,誘使管理員開啟b.cn/index.html。當管理員開啟後(這時管理員正在**後台,或則管理員的session並沒有失效的話),就可以神不知鬼不覺的在**後台新增了乙個管理員賬戶。

1、get型別的csrf

這種型別的csrf一般是由於程式設計師安全意識不強造成的。get型別的csrf利用非常簡單,只需要乙個http請求,所以,一般會這樣用:

在訪問含有這個img的頁面後,成功向發出了一次http請求。所以,如果將該**替換為存在get型csrf的位址,就能完成攻擊了。

(1)場景一:

在乙個bbs社群裡,使用者在發言的時候會發出乙個這樣的get請求:

這是使用者發言內容為「hello」時發出的請求,當然,使用者在請求的同時帶上了該域下的cookie,於是攻擊者構造了下面的csrf.html頁面:

可以看到,攻擊者在自己的頁面中構造了乙個發言的get請求,然後把這個頁面放在自己的伺服器上,鏈結為之後攻擊者通過某種方式誘騙受害者訪問該鏈結,如果受害者此時處於登入狀態,就會帶上bbs.com域下含有自己認證資訊的cookie訪問結果就是受害者按照攻擊者的意願提交了乙份內容為「goodbye」的發言。

有人說這有什麼大不了的,好,我們再看看另乙個場景下的csrf攻擊。

2、post型別的csrf

這種型別的csrf危害沒有get型的大,利用起來通常使用的是乙個自動提交的表單,

訪問該頁面後,表單會自動提交,相當於模擬使用者完成了一次post操作。

(2)場景二:

在乙個cms系統的後台,發出下面的post請求可以執行新增管理員的操作:

(空一行)

uname=test&pword=test

在這裡,攻擊者構造了的csrf2.html頁面如下:

3、csrf攻擊方式

1)、html csrf攻擊:

即利用html元素發出get請求(帶src屬性的html標籤都可以跨域發起get請求),如:

2)、json hijacking攻擊:

4、 csrf的危害

前面說了csrf的基本概念,列舉了幾個csrf的攻擊場景,講述了幾種csrf的攻擊方法,現在我們來簡單總結一下csrf攻擊可能造成的危害。

csrf能做的事情大概如下:

1)篡改目標**上的使用者資料;

2)盜取使用者隱私資料;

3)作為其他攻擊向量的輔助攻擊手法;

4)傳播csrf蠕蟲。

其中前兩點我們在之前的例子中已經做了比較詳細的說明,不再贅述。第三點即將其他攻擊方法與csrf進行結合進行攻擊,接下來我們以實際的漏洞例項來說明csrf的第三個危害。

另外,csrf蠕蟲就是利用之前講述的各種攻擊方法,並且在攻擊**裡新增了形成蠕蟲傳播條件的攻擊向量,這一點會在本文的最後介紹。

5、如何修復

輔助:http referer是header的一部分,當瀏覽器向web伺服器傳送請求的時候,一般會帶上referer,告訴伺服器我是從哪個頁面鏈結過來的,伺服器籍此可以獲得乙個資訊用於處理。比如從我主頁上鏈結到乙個朋友那裡,他的伺服器就能夠從http referer中統計出每天有多少使用者點選我主頁上的鏈結訪問他的**。

零開始學python 從零開始學Python

第1章 python入門 1 1 1 什麼是python 1 1 2 python語言有什麼特點 2 1 3 python可以幹什麼 4 練一練 5 第2章 準備開發環境 6 2 1 在windows上安裝python開發環境 6 2 2 選擇和安裝開發工具 11 練一練 17 第3章 基本概念 1...

從零開始學android

相對布局管理器指的是參考某一其他控制項進行擺放,可以通過控制,將元件擺放在乙個指定參考元件的上 下 左 右等位置,這些可以直接通過各個元件提供的屬性完成。下面介紹一下各個方法的基本使用 no.屬性名稱 對應的規則常量 描述1 android layout below relativelayout.b...

從零開始學 樹

在之前做二級的題的時候,偶爾會碰見二叉樹,很自然的就想起了樹,那麼什麼是樹呢?這裡說的可不是外面的參天大樹,而是有實際概念的樹,下面就來介紹一下樹。樹是由n n 0 個結點組成的有限集合。若n 0,稱為空樹 若n 0,則 1 有乙個特定的稱為根 root 的結點。它只有直接後繼,但沒有直接前驅 2 ...