CSRF跨站請(qǐng)求偽造漏洞分析與防御
CSRF
現(xiàn)在的網(wǎng)站都有利用CSRF令牌來(lái)防止CSRF,就是在請(qǐng)求包的字段加一個(gè)csrf的值,防止csrf,要想利用該漏洞,要和xss組合起來(lái),利用xss獲得該csrf值,在構(gòu)造的請(qǐng)求中將csrf值加進(jìn)去,就可以繞過(guò)csrf防御,利用該漏洞。
該漏洞與xss的區(qū)別:xss是通過(guò)執(zhí)行惡意腳本,獲取到用戶的cookie等信息,再利用cookie等信息進(jìn)行繞過(guò)登錄限制,做一些用戶可以做的事。
而csrf是偽造請(qǐng)求,讓用戶自己執(zhí)行攻擊者偽造的請(qǐng)求,這個(gè)過(guò)程是用戶自己完成的。
漏洞原理
跨站請(qǐng)求偽造,攻擊者偽造一個(gè)請(qǐng)求(通常是一個(gè)惡意鏈接)發(fā)送給用戶,用戶在登錄的情況下點(diǎn)擊該鏈接,服務(wù)器就會(huì)以用戶的身份去執(zhí)行攻擊者偽造的這個(gè)請(qǐng)求,從而造成攻擊。
漏洞危害
1. 修改用戶信息:修改郵箱,更改密碼、轉(zhuǎn)賬等。
如果修改的信息是GET方式提交的,我們就直接將修改信息的url發(fā)送給用戶,用戶登錄情況下點(diǎn)擊該鏈接,就把他的信息修改為我們url中的值了。
如果是POST傳參,那我們就需要搭建一個(gè)公網(wǎng)服務(wù)器,偽造一個(gè)自動(dòng)提交的修改用戶信息的表單,同樣發(fā)送給用戶一個(gè)鏈接,讓用戶在登錄存在漏洞網(wǎng)站的情況下訪問(wèn)我們構(gòu)造的這個(gè)表單,從而修改用戶信息。
防御繞過(guò)
1. 切換請(qǐng)求方式繞過(guò)CSRF令牌驗(yàn)證:
某些應(yīng)用程序只在POST請(qǐng)求中驗(yàn)證CSRF令牌,所以我們將請(qǐng)求方法改為GET,就可以繞過(guò)CSRF令牌驗(yàn)證。
抓包,利用burp的 Change request method,來(lái)將請(qǐng)求改為GET方式。
再利用CSRF poc生成器生成一個(gè)自動(dòng)提交腳本代碼的poc。
2. 令牌存在即驗(yàn)證:
我們可以直接將CSRF令牌參數(shù)刪除,看能否繞過(guò),因?yàn)橛械膽?yīng)用程序只有令牌存在時(shí)進(jìn)行驗(yàn)證,如果不存在令牌,則不驗(yàn)證。
3. 令牌未綁定到用戶會(huì)話繞過(guò):
應(yīng)用程序沒(méi)有將CSRF令牌與用戶會(huì)話進(jìn)行綁定,只是在他的令牌池中進(jìn)行驗(yàn)證,只要請(qǐng)求中的令牌存在于令牌 池中,則通過(guò)驗(yàn)證。攻擊者就可以使用自己的賬戶登錄,拿到一個(gè)有效令牌,然后在攻擊者將該令牌提供給正常用戶,就會(huì)繞過(guò)令牌驗(yàn)證,造成攻擊。
4. 令牌未綁定到會(huì)話cookie:
雖然令牌綁定了cookie,但未將令牌綁定到用于跟蹤會(huì)話的cookie上。當(dāng)應(yīng)用程序使用兩個(gè)不同的框架時(shí),很容易發(fā)生這種情況。一個(gè)cookie用于會(huì)話處理,一個(gè)用于CSRF保護(hù),他倆沒(méi)有集成在一起。
漏洞利用
利用burp 的CSRF poc生成器生成poc。再將poc復(fù)制到自己的vps中,讓用戶進(jìn)行訪問(wèn)該poc,就完成攻擊。
因?yàn)橐詣?dòng)提交修改信息的請(qǐng)求,所以在burp中,還要勾選include auto-submit script,重新生成一個(gè)可以自動(dòng)提交的poc。
防御措施
1. 增加token驗(yàn)證:
在http請(qǐng)求中以參數(shù)的形式加入一個(gè)隨機(jī)產(chǎn)生的token,并在服務(wù)端來(lái)驗(yàn)證這個(gè)token值,如果token不存在或者不正確,則拒絕該請(qǐng)求。
2. 驗(yàn)證Referer字段:
驗(yàn)證http請(qǐng)求包referer字段值,該字段值記錄了http請(qǐng)求的來(lái)源url,如果來(lái)源地址不一樣,則說(shuō)明該請(qǐng)求不合法,服務(wù)端拒絕該請(qǐng)求。這個(gè)防御方法攻擊者可以進(jìn)行繞過(guò),攻擊者自定義referer字段來(lái)繞過(guò)。
或者直接刪除Referer字段值,也可繞過(guò)。
3. 對(duì)關(guān)鍵操作進(jìn)行二次身份驗(yàn)證:
修改密碼、重置密碼等要進(jìn)行二次身份驗(yàn)證,或者增加驗(yàn)證碼驗(yàn)證。
4. 使用SameSite cookie
SameSite屬性用來(lái)控制在跨站請(qǐng)求中是否包含cookie。通常與CSRF令牌一起使用。
如果該屬性設(shè)置為SameSite=Strict; 則瀏覽器不會(huì)在來(lái)自其他站點(diǎn)的任何請(qǐng)求中包含cookie,這種方法雖然防御性最好,但是影響用戶體驗(yàn),用戶訪問(wèn)第三方鏈接時(shí),用顯示未登錄。需要再次登錄才能正常與網(wǎng)站交互。
如果設(shè)置為SameSite=Lax; 瀏覽器會(huì)判斷跨站請(qǐng)求是GET還是POST請(qǐng)求方式,如果是GET請(qǐng)求,則會(huì)給該請(qǐng)求包含cookie,如果是其他請(qǐng)求方法,會(huì)不包含cookie。并且還會(huì)判斷該請(qǐng)求是否是用戶的頂級(jí)導(dǎo)航(單擊鏈接 ),如果是其他請(qǐng)求,例如:由腳本發(fā)起的請(qǐng)求,則也會(huì)不包含cookie。
Set-Cookie: SessionId=sYMnfCUrAlmqVVZn9dqevxyFpKZt30NN; SameSite=Strict; Set-Cookie: SessionId=sYMnfCUrAlmqVVZn9dqevxyFpKZt30NN; SameSite=Lax;
5. CSRF令牌驗(yàn)證
在服務(wù)端應(yīng)用程序生成,并包含在后續(xù)的http請(qǐng)求中,后面所有的http請(qǐng)求都需要包含該令牌,如果令牌丟失或者無(wú)效,服務(wù)端會(huì)拒絕該請(qǐng)求。
總結(jié)
到此這篇關(guān)于CSRF跨站請(qǐng)求偽造漏洞分析與防御的文章就介紹到這了,更多相關(guān)CSRF跨站請(qǐng)求偽造漏洞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
當(dāng)網(wǎng)站不允許上傳asp cer cdx htr文件時(shí)的一個(gè)解決方法!
當(dāng)網(wǎng)站不允許上傳asp cer cdx htr文件時(shí)的一個(gè)解決方法!...2006-12-12