一、csrf攻擊
什么是CSRF
CSRF(Cross-Site Request Forgery),也被稱為 one-click attack 或者 session riding,即跨站請求偽造攻擊。
那么 CSRF 到底能夠干嘛呢?CSRF是一種挾制用戶在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。可以簡單的理解為:攻擊者可以盜用你的登陸信息,以你的身份模擬發(fā)送各種請求對服務(wù)器來說這個(gè)請求是完全合法的,但是卻完成了攻擊者所期望的一個(gè)操作,比如以你的名義發(fā)送郵件、發(fā)消息,盜取你的賬號,添加系統(tǒng)管理員,甚至于購買商品、虛擬貨幣轉(zhuǎn)賬等。攻擊者只要借助少許的社會(huì)工程學(xué)的詭計(jì),例如通過 QQ 等聊天軟件發(fā)送的鏈接(有些還偽裝成短域名,用戶無法分辨),攻擊者就能迫使 Web 應(yīng)用的用戶去執(zhí)行攻擊者預(yù)設(shè)的操作。
所以遇到 CSRF 攻擊時(shí),將對終端用戶的數(shù)據(jù)和操作指令構(gòu)成嚴(yán)重的威脅。當(dāng)受攻擊的終端用戶具有管理員帳戶的時(shí)候,CSRF 攻擊將危及整個(gè) Web 應(yīng)用程序。
CSRF原理
1、用戶C打開瀏覽器,訪問受信任網(wǎng)站A,輸入用戶名和密碼請求登錄網(wǎng)站A;
2、在用戶信息通過驗(yàn)證后,網(wǎng)站A產(chǎn)生Cookie信息并返回給瀏覽器,此時(shí)用戶登錄網(wǎng)站A成功,可以正常發(fā)送請求到網(wǎng)站A;
3、用戶未退出網(wǎng)站A之前,在同一瀏覽器中,打開一個(gè)TAB頁訪問網(wǎng)站B;
4、網(wǎng)站B接收到用戶請求后,返回一些攻擊性代碼,并發(fā)出一個(gè)請求要求訪問第三方站點(diǎn)A;
5、瀏覽器在接收到這些攻擊性代碼后,根據(jù)網(wǎng)站B的請求,在用戶不知情的情況下攜帶Cookie信息,向網(wǎng)站A發(fā)出請求。網(wǎng)站A并不知道該請求其實(shí)是由B發(fā)起的,所以會(huì)根據(jù)用戶C的Cookie信息以C的權(quán)限處理該請求,導(dǎo)致來自網(wǎng)站B的惡意代碼被執(zhí)行。
CSRF 攻擊的三個(gè)條件 :
1. 用戶已經(jīng)登錄了站點(diǎn) A,并在本地記錄了 cookie
2. 在用戶沒有登出站點(diǎn) A 的情況下(也就是 cookie 生效的情況下),訪問了惡意攻擊者提供的引誘危險(xiǎn)站點(diǎn) B (B 站點(diǎn)要求訪問站點(diǎn)A)。
3. 站點(diǎn) A 沒有做任何 CSRF 防御
延伸閱讀:
二、CSRF漏洞檢測
檢測CSRF漏洞最簡單的方法就是抓取一個(gè)正常請求的數(shù)據(jù)包,去掉Referer字段后再重新提交,如果該提交還有效,那么基本上可以確定存在CSRF漏洞。
隨著對CSRF漏洞研究的不斷深入,不斷涌現(xiàn)出一些專門針對CSRF漏洞進(jìn)行檢測的工具,如CSRFTester,CSRF Request Builder等。
以CSRFTester工具為例,CSRF漏洞檢測工具的測試原理如下:使用CSRFTester進(jìn)行測試時(shí),首先需要抓取我們在瀏覽器中訪問過的所有鏈接以及所有的表單等信息,然后通過在CSRFTester中修改相應(yīng)的表單等信息,重新提交,這相當(dāng)于一次偽造客戶端請求。如果修改后的測試請求成功被網(wǎng)站服務(wù)器接受,則說明存在CSRF漏洞,當(dāng)然此款工具也可以被用來進(jìn)行CSRF攻擊。