主頁 >  其他 > CSRF 攻擊詳解

CSRF 攻擊詳解

2020-09-24 05:49:31 其他

什么是CSRF攻擊

CSRF(Cross-Site Request Forgery)的全稱是“跨站請求偽造”,也被稱為“One Click Attack”或者“Session Riding”,通常縮寫為CSRF或者XSRF,CSRF的中文名稱盡管聽起來像跨站腳本攻擊(XSS),但它與XSS非常不同,并且攻擊方式幾乎相左,XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來攻擊受信任的網站,與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防范的資源也相當稀少)和難以防范,所以被認為比XSS更具危險性,

我們可以這么理解CSRF攻擊:攻擊者首先盜用了你的身份,然后以你的名義進行某些非法操作,CSRF能夠使用你的賬戶發送郵件,獲取你的敏感資訊,甚至盜走你的賬戶購買商品等,CSRF攻擊其實是利用了web中用戶身份認證驗證的一個漏洞:簡單的身份驗證僅僅能保證請求發自某個用戶的瀏覽器,卻不能保證請求本身是用戶自愿發出的,

CSRF攻擊的流程

攻擊流程

CSRF攻擊攻擊原理及程序如下:

  1. 用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登錄網站A;
  2. 在用戶資訊通過驗證后,網站A產生Cookie資訊并回傳給瀏覽器,此時用戶登錄網站A成功,可以正常發送請求到網站A;
  3. 用戶未退出網站A之前,在同一瀏覽器中,打開一個TAB頁訪問網站B;
  4. 網站B接收到用戶請求后,回傳一些攻擊性代碼,并發出一個請求要求訪問第三方站點A;
  5. 瀏覽器在接收到這些攻擊性代碼后,根據網站B的請求,在用戶不知情的情況下攜帶Cookie資訊,向網站A發出請求,網站A并不知道該請求其實是由B發起的,所以會根據用戶C的Cookie資訊以C的權限處理該請求,導致來自網站B的惡意代碼被執行,

從上面的流程可以看出,想要達成CSRF攻擊,必須達到兩個基本條件:

  • 登錄受信任站點A,并在本地生成Cookie,
  • 在不登出A的情況下,訪問危急站點B,

常見的CSRF攻擊型別

  1. GET型別的CSRF
    僅僅須要一個HTTP請求,就能夠構造一次簡單的CSRF, 
    樣例:
銀行站點A:它以GET請求來完畢銀行轉賬的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000 
危急站點B:它里面有一段HTML的代碼例如以下:
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

首先,你登錄了銀行站點A,然后訪問危急站點B,這時你會發現你的銀行賬戶少了1000塊,為什么會這樣呢?原因是銀行站點A違反了HTTP規范,使用GET請求更新資源,在訪問危急站點B的之前,你已經登錄了銀行站點A,而B中的 一個合法的請求,但這里被不法分子利用了),所以你的瀏覽器會帶上你的銀行站點A的Cookie發出Get請求,去獲取資源以GET的方式請求第三方資源(這里的第三方就是指銀行站點了,原本這是http://www.mybank.com/Transfer.php?toBankId=11&money=1000 ,結果銀行站點服務器收到請求后,覺得這是一個更新資源操作(轉賬操作),所以就立馬進行轉賬操作,

  1. POST型別的CSRF
    這種型別的CSRF危害沒有GET型的大,利用起來通常使用的是一個自動提交的表單,如:
<form action=http://wooyun.org/csrf.php method=POST>
    <input type="text" name="xx" value="https://www.cnblogs.com/54chensongxia/p/11" />
</form>
<script> document.forms[0].submit(); </script> 

訪問該頁面后,表單會自動提交,相當于模擬用戶完成了一次POST操作,

CSRF漏洞測驗

檢測CSRF漏洞是一項比較繁瑣的作業,最簡單的方法就是抓取一個正常請求的資料包,去掉Referer欄位后再重新提交,如果該提交還有效,那么基本上可以確定存在CSRF漏洞,

隨著對CSRF漏洞研究的不斷深入,不斷涌現出一些專門針對CSRF漏洞進行檢測的工具,如CSRFTester,CSRF Request Builder等,以CSRFTester工具為例,CSRF漏洞檢測工具的測驗原理如下:使用CSRFTester進行測驗時,首先需要抓取我們在瀏覽器中訪問過的所有鏈接以及所有的表單等資訊,然后通過在CSRFTester中修改相應的表單等資訊,重新提交,這相當于一次偽造客戶端請求,如果修改后的測驗請求成功被網站服務器接受,則說明存在CSRF漏洞,當然此款工具也可以被用來進行CSRF攻擊,

預防CSRF攻擊

1. 驗證HTTP Referer欄位
根據 HTTP 協議,在 HTTP 頭中有一個欄位叫 Referer,它記錄了該 HTTP 請求的來源地址,在通常情況下,訪問一個安全受限頁面的請求來自于同一個網站,比如需要訪問 http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory,用戶必須先登陸 bank.example,然后通過點擊頁面上的按鈕來觸發轉賬事件,這時,該轉帳請求的 Referer 值就會是轉賬按鈕所在的頁面的 URL,通常是以 bank.example 域名開頭的地址,而如果黑客要對銀行網站實施 CSRF 攻擊,他只能在他自己的網站構造請求,當用戶通過黑客的網站發送請求到銀行時,該請求的 Referer 是指向黑客自己的網站,因此,要防御 CSRF 攻擊,銀行網站只需要對于每一個轉賬請求驗證其 Referer 值,如果是以 bank.example 開頭的域名,則說明該請求是來自銀行網站自己的請求,是合法的,如果 Referer 是其他網站的話,則有可能是黑客的 CSRF 攻擊,拒絕該請求,

這種方法的顯而易見的好處就是簡單易行,網站的普通開發人員不需要操心 CSRF 的漏洞,只需要在最后給所有安全敏感的請求統一增加一個攔截器來檢查 Referer 的值就可以,特別是對于當前現有的系統,不需要改變當前系統的任何已有代碼和邏輯,沒有風險,非常便捷,

然而,這種方法并非萬無一失,Referer 的值是由瀏覽器提供的,雖然 HTTP 協議上有明確的要求,但是每個瀏覽器對于 Referer 的具體實作可能有差別,并不能保證瀏覽器自身沒有安全漏洞,使用驗證 Referer 值的方法,就是把安全性都依賴于第三方(即瀏覽器)來保障,從理論上來講,這樣并不安全,事實上,對于某些瀏覽器,比如 IE6 或 FF2,目前已經有一些方法可以篡改 Referer 值,如果 bank.example 網站支持 IE6 瀏覽器,黑客完全可以把用戶瀏覽器的 Referer 值設為以 bank.example 域名開頭的地址,這樣就可以通過驗證,從而進行 CSRF 攻擊,

即便是使用最新的瀏覽器,黑客無法篡改 Referer 值,這種方法仍然有問題,因為 Referer 值會記錄下用戶的訪問來源,有些用戶認為這樣會侵犯到他們自己的隱私權,特別是有些組織擔心 Referer 值會把組織內網中的某些資訊泄露到外網中,因此,用戶自己可以設定瀏覽器使其在發送請求時不再提供 Referer,當他們正常訪問銀行網站時,網站會因為請求沒有 Referer 值而認為是 CSRF 攻擊,拒絕合法用戶的訪問,

驗證Referer方式總結

  • 優點:使用方便,開發簡單,一定程度上能預防CSRF攻擊;
  • 缺點:這種機制完全依托于瀏覽器,Referer欄位容易被故意篡改,或者被禁用,

2. 請求中添加token并驗證
token就是服務端回傳給客戶端類似sessionid那樣一長串的類值(長是為了防暴力猜解),csrf依賴于瀏覽器該問鏈接時自動對應網站的cookie帶上,token不放cookie(一般form表單加個hidden屬性的input標簽來存放)csrf就沒法獲取token,這樣我們就可以通過檢測發送過來的資料包中是否有正確的token值來決定是否回應請求,

在講清token防御的原理后,我們再來講token的設計,因為token方式給人的感覺很復雜令人望而生畏,

我們首先明確一個問題,就是能夠防止csrf攻擊的token,并不需要每次請求都不一樣,在用戶登錄后到退出前的這整個程序中的所有請求token完全可以是一樣,因為(在基于沒有其他漏洞會泄漏本次會話的token的設想下)黑客是無法獲取用戶的tokne,所以又何必每個請求都要生成一個新的token呢,(token每次請求都要不一樣的想法是受防重放攻擊的影響)只考濾防csrf不考濾防重放的情況下,token設計就簡單多了,

使用sessionid作為token設計:在csrf中cookie是瀏覽器自己帶上的,本質而言用戶的sessionid并未丟失(也就是攻擊者并不能知道sessionid是多少),基于此我們完全可以不用另傳一個值只需直接將sessionid作為token即可(或者也可以做些運算比如取sessionid的某些值做個md5來做為token,意思都差不多),判斷代碼類似 if session["id"] == $_POST["token"]

與sessionid同時回傳的token設計:在生成sessionid的同時生成一個token(服務端token可以存于session變數中)回傳給客戶端,客戶端保存該token每次請求時都在form表單中提交該值,判斷代碼類似if session["token"] == $_POST["token"]

這種方法要比檢查 Referer 要安全一些,token 可以在用戶登陸后產生并放于 session 之中,然后在每次請求時把 token 從 session 中拿出,與請求中的 token 進行比對,但這種方法的難點在于如何把 token 以引數的形式加入請求,對于 GET 請求,token 將附在請求地址之后,這樣 URL 就變成 http://url?csrftoken=tokenvalue, 而對于 POST 請求來說,要在 form 的最后加上 ,這樣就把 token 以引數的形式加入請求了,但是,在一個網站中,可以接受請求的地方非常多,要對于每一個請求都加上 token 是很麻煩的,并且很容易漏掉,通常使用的方法就是在每次頁面加載時,使用 javascript 遍歷整個 dom 樹,對于 dom 中所有的 a 和 form 標簽后加入 token,這樣可以解決大部分的請求,但是對于在頁面加載之后動態生成的 html 代碼,這種方法就沒有作用,還需要程式員在編碼時手動添加 token,另外還有一個問題就是怎么保障token本身的存盤安全,不要被黑客截獲,

驗證token方式總結

  • 安全程度比Referer的方式要高;
  • 實作方式上稍微復雜;
  • 需要保證token存盤的安全性,

3. 在 HTTP 頭中自定義屬性并驗證
這種方法也是使用 token 并進行驗證,和上一種方法不同的是,這里并不是把 token 以引數的形式置于 HTTP 請求之中,而是把它放到 HTTP 頭中自定義的屬性里,通過 XMLHttpRequest 這個類,可以一次性給所有該類請求加上 csrftoken 這個 HTTP 頭屬性,并把 token 值放入其中,這樣解決了上種方法在請求中加入 token 的不便,同時,通過 XMLHttpRequest 請求的地址不會被記錄到瀏覽器的地址欄,也不用擔心 token 會透過 Referer 泄露到其他網站中去,

然而這種方法的局限性非常大,XMLHttpRequest 請求通常用于 Ajax 方法中對于頁面區域的異步重繪,并非所有的請求都適合用這個類來發起,而且通過該類請求得到的頁面不能被瀏覽器所記錄下,從而進行前進,后退,重繪,收藏等操作,給用戶帶來不便,另外,對于沒有進行 CSRF防護的遺留系統來說,要采用這種方法來進行防護,要把所有請求都改為 XMLHttpRequest 請求,這樣幾乎是要重寫整個網站,這代價無疑是不能接受的,

驗證Head屬性方式總結

  • 使用方式較簡單,而且token不容易泄露
  • 使用場合較少,局限性較大,

參考

  • https://blog.csdn.net/sinat_41898105/article/details/80783551
  • https://blog.csdn.net/xiaoxinshuaiga/article/details/80766369

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/116886.html

標籤:其他

上一篇:求問思科路由器怎么配置成FTP服務器?

下一篇:求各位大佬幫幫忙,關于windows c++套接字發送自組udp包的問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more