解析CSRF攻擊原理

|=——————————————————————=|
|=————–=[ CSRF攻擊原理解析 ]=——————=|
|=——————————————————————=|
|=——————-=[ By rayh4c ]=————————=|
|=————-=[ rayh4c@80sec.com ]=——————-=|
|=——————————————————————=|
Author: rayh4c [80sec]
EMail: rayh4c#80sec.com
Site: http://www.80sec.com
Date: 2008-9-21
0×00.前言
在Web程序中普通用戶一般只在Web界面里完成他想要的操作,Web程序接受的正常客戶端請(qǐng)求一般來自用戶的點(diǎn)擊鏈接和表單提交等行為,可是惡意攻擊者卻可以依靠腳本和瀏覽器的安全缺陷來jc客戶端會(huì)話、偽造客戶端請(qǐng)求。
0×01.CSRF攻擊分類
CSRF是偽造客戶端請(qǐng)求的一種攻擊,CSRF的英文全稱是Cross Site Request Forgery,字面上的意思是跨站點(diǎn)偽造請(qǐng)求。這種攻擊方式是國(guó)外的安全人員于2000年提出,國(guó)內(nèi)直到06年初才被關(guān)注,早期我們團(tuán)隊(duì)的劍心使用過CSRF攻擊實(shí)現(xiàn)了DVBBS后臺(tái)的SQL注射,同時(shí)網(wǎng)上也出現(xiàn)過動(dòng)易后臺(tái)管理員添加的CSRF漏洞等,08年CSRF攻擊方式開始在BLOG、SNS等大型社區(qū)類網(wǎng)站的腳本蠕蟲中使用。
CSRF的定義是強(qiáng)迫受害者的瀏覽器向一個(gè)易受攻擊的Web應(yīng)用程序發(fā)送請(qǐng)求,最后達(dá)到攻擊者所需要的操作行為。CSRF漏洞的攻擊一般分為站內(nèi)和站外兩種類型:
CSRF站內(nèi)類型的漏洞在一定程度上是由于程序員濫用$_REQUEST類變量造成的,一些敏感的操作本來是要求用戶從表單提交發(fā)起POST請(qǐng)求傳參給程序,但是由于使用了$_REQUEST等變量,程序也接收GET請(qǐng)求傳參,這樣就給攻擊者使用CSRF攻擊創(chuàng)造了條件,一般攻擊者只要把預(yù)測(cè)好的請(qǐng)求參數(shù)放在站內(nèi)一個(gè)貼子或者留言的圖片鏈接里,受害者瀏覽了這樣的頁(yè)面就會(huì)被強(qiáng)迫發(fā)起請(qǐng)求。
CSRF站外類型的漏洞其實(shí)就是傳統(tǒng)意義上的外部提交數(shù)據(jù)問題,一般程序員會(huì)考慮給一些留言評(píng)論等的表單加上水印以防止SPAM問題,但是為了用戶的體驗(yàn)性,一些操作可能沒有做任何限制,所以攻擊者可以先預(yù)測(cè)好請(qǐng)求的參數(shù),在站外的Web頁(yè)面里編寫javascript腳本偽造文件請(qǐng)求或和自動(dòng)提交的表單來實(shí)現(xiàn)GET、POST請(qǐng)求,用戶在會(huì)話狀態(tài)下點(diǎn)擊鏈接訪問站外的Web頁(yè)面,客戶端就被強(qiáng)迫發(fā)起請(qǐng)求。
0×02.瀏覽器的安全缺陷
現(xiàn)在的Web應(yīng)用程序幾乎都是使用Cookie來識(shí)別用戶身份以及保存會(huì)話狀態(tài),但是所有的瀏覽器在最初加入Cookie功能時(shí)并沒有考慮安全因素,從WEB頁(yè)面產(chǎn)生的文件請(qǐng)求都會(huì)帶上COOKIE,如下圖所示,Web頁(yè)面中的一個(gè)正常的圖片所產(chǎn)生的請(qǐng)求也會(huì)帶上COOKIE:
<img src=”http://website/logo.jpg”>
↓
GET /Article/UploadFiles/200809/20080922055213222.jpg
Cookie: session_id
客戶端 ——————————————————-服務(wù)器
瀏覽器的這種安全缺陷給CSRF漏洞的攻擊創(chuàng)造了最基本的條件,因?yàn)閃eb頁(yè)面中的任意文件請(qǐng)求都會(huì)帶上COOKIE,所以我們將文件地址替換為一個(gè)鏈接的話,用戶訪問Web頁(yè)面就相當(dāng)于會(huì)話狀態(tài)下自動(dòng)點(diǎn)擊了鏈接,而且?guī)в蠸RC屬性具有文件請(qǐng)求的HTML標(biāo)簽,如圖片、FLASH、音樂等相關(guān)的應(yīng)用都會(huì)產(chǎn)生偽造GET請(qǐng)求的CSRF安全問題。一個(gè)web應(yīng)用程序可能會(huì)因?yàn)樽罨镜匿秩卷?yè)面的HTML標(biāo)簽應(yīng)用,而導(dǎo)致程序里所有的GET類型傳參都不可靠。
0×03.瀏覽器的會(huì)話安全特性
參照Set-Cookie的標(biāo)準(zhǔn)格式,現(xiàn)今瀏覽器支持的cookie實(shí)際上分為兩種形式:
Set-Cookie: <name>=<value>[; <name>=<value>] [; expires=<date>][; domain=<domain_name>] [; path=<some_path>][; secure][; HttpOnly]
一種是內(nèi)存COOKIE,在沒有設(shè)定COOKIE值的expires參數(shù),也就是沒有設(shè)置COOKIE的失效時(shí)間情況下,這個(gè)COOKIE在關(guān)閉瀏覽器后將失效,并且不會(huì)保存在本地。另外一種是本地保存COOKIE,也就是設(shè)置了expires參數(shù),COOKIE的值指定了失效時(shí)間,那么這個(gè)COOKIE會(huì)保存在本地,關(guān)閉瀏覽器后再訪問網(wǎng)站,在COOKIE有效時(shí)間內(nèi)所有的請(qǐng)求都會(huì)帶上這個(gè)本地保存COOKIE。
Internet Explorer有一個(gè)隱私報(bào)告功能,其實(shí)這是一個(gè)安全功能,它會(huì)阻擋所有的第三方COOKIE,比如A域Web頁(yè)面嵌入了B域的文件,客戶端瀏覽器訪問了A域的Web頁(yè)面后對(duì)B域所發(fā)起的文件請(qǐng)求所帶上的COOKIE會(huì)被IE攔截。除開文件請(qǐng)求情況,A域的Web頁(yè)面如果使用IFRAME幀包含B域的Web頁(yè)面,訪問A域的Web頁(yè)面后,B域的Web頁(yè)面里的所有請(qǐng)求包括文件請(qǐng)求帶上的COOKIE同樣會(huì)被IE攔截。不過Internet Explorer的這個(gè)安全功能有兩個(gè)特性,一是不會(huì)攔截內(nèi)存COOKIE,二是在網(wǎng)站設(shè)置了P3P頭的情況下,會(huì)允許跨域訪問COOKIE,隱私報(bào)告功能就不會(huì)起作用了。
所以在Internet Explorer的這個(gè)安全特性的前提下,攻擊者要進(jìn)行站外的CSRF攻擊使用文件請(qǐng)求來偽造GET請(qǐng)求的話,受害者必須在使用內(nèi)存COOKIE也就是沒有保存登陸的會(huì)話狀態(tài)下才可能成功。而Firefox瀏覽器并沒有考慮使用這樣的功能,站外的CSRF攻擊完全沒有限制。
0×04.關(guān)于Javascriptjc技術(shù)
近年來的web程序頻繁使用Ajax技術(shù),JSON也開始取代XML做為AJAX的數(shù)據(jù)傳輸格式,JSON實(shí)際上就是一段javascript,大部分都是定義的數(shù)組格式。fortify公司的三位安全人員在2007年提出了Javascriptjc技術(shù),這是一種針對(duì)JSON動(dòng)態(tài)數(shù)據(jù)的攻擊方式,實(shí)際上這也是一種變相的CSRF攻擊。攻擊者從站外調(diào)用一個(gè)script標(biāo)簽包含站內(nèi)的一個(gè)JSON動(dòng)態(tài)數(shù)據(jù)接口,因?yàn)?lt;script src=”>這種腳本標(biāo)簽的文件請(qǐng)求會(huì)帶上COOKIE,用戶訪問后相當(dāng)于被迫從站外發(fā)起了一個(gè)帶有身份認(rèn)證COOKIE的GET請(qǐng)求,web程序馬上返回了用戶相關(guān)的JSON數(shù)據(jù),攻擊者就可以取得這些關(guān)鍵的JSON數(shù)據(jù)加以利用,整個(gè)過程相當(dāng)于一個(gè)站外類型的CSRF攻擊。
WEB應(yīng)用中的JSON數(shù)據(jù)大部分使用在個(gè)人資料、好友列表等隱私功能里,這類數(shù)據(jù)一般是web蠕蟲最重要的傳播功能所需要的數(shù)據(jù),而CSRF攻擊結(jié)合Javascript jc技術(shù)完全可以分析這類數(shù)據(jù)制作自動(dòng)傳播的web蠕蟲,在一定情況下這種web蠕蟲比網(wǎng)站出現(xiàn)跨站腳本漏洞制作的web蠕蟲更具威脅性,幾乎不受網(wǎng)站架構(gòu)的限制,因?yàn)楣粽呃玫牟皇莻鹘y(tǒng)的Web漏洞而是網(wǎng)站自身正常的功能,如果出現(xiàn)這類CSRF蠕蟲,對(duì)網(wǎng)站的打擊將是災(zāi)難性的。
0×05.安全提醒
各個(gè)大型社區(qū)類網(wǎng)站必須警惕CSRF攻擊和相關(guān)web蠕蟲的爆發(fā),并且針對(duì)這類web攻擊制定有效的應(yīng)急措施。同建議程序員不要濫用$_REQUEST類變量,在必要的情況下給某些敏感的操作加上水印,考慮使用類似DISCUZ論壇的formhash技術(shù)提高黑客預(yù)測(cè)請(qǐng)求參數(shù)的難度,注意JSON數(shù)據(jù)接口的安全問題等。最后希望大家全面的考慮客戶端和服務(wù)端整體的安全,注意Internet Explorer等客戶端瀏覽器一些安全缺陷和安全特性,防止客戶端程序的安全問題影響整個(gè)Web應(yīng)用程序。
相關(guān)文章
封UDP的服務(wù)器真的打不了么?封UDP、封海外服務(wù)器
很多游戲服務(wù)器租用的時(shí)候會(huì)出現(xiàn)一些封UDP的字眼,網(wǎng)上一些文章也說UDP協(xié)議不可靠!為什么要封UDP呢?既然不可靠,為什么有些人還要使用它呢?今天與你們分享一下UDP,希望2024-05-07魔獸世界服務(wù)器被DDoS攻擊怎么辦?DDoS攻擊防御方法
魔獸世界服務(wù)器被攻擊在目前來說也是比較常見的,同行競(jìng)爭(zhēng)激烈,在官服開放時(shí)也遇到過DDOS攻擊,要是飛飛沒記錯(cuò)是在22年9月14日,從剛開始的身份驗(yàn)證服務(wù)器出現(xiàn)問題,到確2023-07-17分享五大免費(fèi)企業(yè)網(wǎng)絡(luò)入侵檢測(cè)(IDS)工具
這篇文章主要分享一下五大免費(fèi)企業(yè)網(wǎng)絡(luò)入侵檢測(cè)(IDS)工具,當(dāng)前企業(yè)對(duì)于網(wǎng)絡(luò)安全越來越重視,那么后期可能就需要大家多多關(guān)注一些安全工具的使用于檢測(cè)2019-12-01網(wǎng)絡(luò)安全基礎(chǔ)之網(wǎng)絡(luò)協(xié)議與安全威脅的關(guān)系介紹
網(wǎng)絡(luò)協(xié)議是什么呢?網(wǎng)絡(luò)協(xié)議是網(wǎng)絡(luò)中計(jì)算機(jī)或設(shè)備之間進(jìn)行通信的一系列規(guī)則集合。本文中小編介紹的是網(wǎng)絡(luò)協(xié)議和安全威脅的關(guān)系,需要的朋友不妨閱讀本文了解一下2019-04-02DDoS攻擊原理是什么?DDoS攻擊原理及防護(hù)措施介紹
DDoS攻擊是由DoS攻擊轉(zhuǎn)化的,這項(xiàng)攻擊的原理以及表現(xiàn)形式是怎樣的呢?要如何的進(jìn)行防御呢?本文中將會(huì)有詳細(xì)的介紹,需要的朋友不妨閱讀本文進(jìn)行參考2019-01-15基于Web攻擊的方式發(fā)現(xiàn)并攻擊物聯(lián)網(wǎng)設(shè)備介紹
本文中介紹的是基于Web攻擊的方式發(fā)現(xiàn)并攻擊物聯(lián)網(wǎng)設(shè)備,感興趣的朋友不妨閱讀本文進(jìn)行了解2019-01-11為何黑客要挾制路由器DNS 用戶該怎樣實(shí)時(shí)發(fā)覺和防備方法
起首說說挾制路由器是什么意思,路由器挾制平日指的是,開啟了無線網(wǎng)絡(luò)功效的無線路由器,攻擊者經(jīng)由過程破解無線暗碼銜接上無線網(wǎng)后,再登錄路由治理界面來節(jié)制全部無線網(wǎng)2018-05-16大勢(shì)至共享文件監(jiān)控軟件、共享文件權(quán)限管理軟件主控端與客戶端的連接設(shè)
這篇文章主要介紹了大勢(shì)至共享文件監(jiān)控軟件、共享文件權(quán)限管理軟件主控端與客戶端的連接設(shè)置方法詳解,,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,下面就來和小編一起看看2018-01-25詳細(xì)介紹sd卡加密軟件的選擇以及給sd卡設(shè)置密碼、給sd卡加密
這篇文章主要介紹了詳細(xì)介紹sd卡加密軟件的選擇以及給sd卡設(shè)置密碼、給sd卡加密,如何保護(hù)sd卡文件的安全,如何給SD卡設(shè)置密碼、如何給SD卡加密,下面就跟小編一起來看看吧2018-01-19server2008共享設(shè)置、服務(wù)器共享文件設(shè)置、服務(wù)器設(shè)置共享文件夾的方法
這篇文章主要介紹了server2008共享設(shè)置、服務(wù)器共享文件設(shè)置、服務(wù)器設(shè)置共享文件夾的方法詳細(xì)介紹,保護(hù)服務(wù)器共享文件設(shè)置訪問權(quán)限,讓每個(gè)部門只訪問自己的共享文件等,2018-01-19