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