下面我們來查看一下low級(jí)別的CSRF源碼:


代碼中在獲取了$pass_new和$pass_conf這兩個(gè)變量之后,利用mysql_real_escape_string()函數(shù)進(jìn)行了過濾,這樣雖然可以防止SQL注入,但卻無法阻止CSRF***,之后這兩個(gè)變量便被直接代入U(xiǎn)PDATE語句中執(zhí)行了數(shù)據(jù)庫更新操作。
下面再來分析一下medium級(jí)別的代碼:

可以看到這里在獲取$pass_new和$pass_conf這兩個(gè)變量之前,先利用一個(gè)if語句來判斷“$_SERVER['HTTP_REFERER']”的值是否是127.0.0.1。這是一種基本的防御CSRF***的方法:驗(yàn)證HTTP Referer字段。我們可以再次使用之前的方法來實(shí)施CSRF***,可以發(fā)現(xiàn)已經(jīng)不起作用了。下面就來解釋一下這種防御方法的原理。
根據(jù)HTTP協(xié)議,在HTTP頭中有一個(gè)字段叫Referer,它記錄了該HTTP請(qǐng)求的來源地址。比如下面這個(gè)利用Burpsuite攔截到的數(shù)據(jù)包,數(shù)據(jù)要提交到的頁面是upfile_Other.asp,而我們是通過Referer字段后的http://192168.80.131/upload_Other.asp這個(gè)頁面發(fā)起的請(qǐng)求。

在通常情況下,訪問一個(gè)安全受限頁面的請(qǐng)求應(yīng)來自于同一個(gè)網(wǎng)站,比如需要訪問 http://bank.example/withdraw?account=bob&amount=1000000&for=Mallor,用戶必須先登陸 bank.example,然后通過點(diǎn)擊頁面上的按鈕來觸發(fā)轉(zhuǎn)賬事件。這時(shí),該轉(zhuǎn)帳請(qǐng)求的Referer值就會(huì)是轉(zhuǎn)賬按鈕所在的頁面的URL,通常是以bank.example域名開頭的地址。而如果***要對(duì)銀行網(wǎng)站實(shí)施CSRF***,他只能在他自己的網(wǎng)站構(gòu)造請(qǐng)求,當(dāng)用戶通過***的網(wǎng)站發(fā)送請(qǐng)求到銀行時(shí),該請(qǐng)求的Referer是指向***自己的網(wǎng)站。因此,要防御CSRF***,銀行網(wǎng)站只需要對(duì)于每一個(gè)轉(zhuǎn)賬請(qǐng)求驗(yàn)證其Referer值,如果是以bank.example開頭的域名,則說明該請(qǐng)求是來自銀行網(wǎng)站自己的請(qǐng)求,是合法的。如果Referer是其他網(wǎng)站的話,則有可能是***的CSRF***,拒絕該請(qǐng)求。
在DVWA中,管理員是通過本地地址127.0.0.1來訪問密碼修改頁面的,因而對(duì)于任何一個(gè)修改密碼的請(qǐng)求,如果其Referer不是127.0.0.1,那么就判斷為CSRF***,而予以拒絕。
然而這種方法并非萬無一失,由于Referer的值是由瀏覽器提供的,對(duì)于某些瀏覽器,可以利用一些方法來篡改Referer值。所以***完全可以把用戶瀏覽器的Referer值修改為需要的地址,這樣就可以通過驗(yàn)證,從而進(jìn)行 CSRF ***。
另外即使***無法篡改Referer值,這種方法也仍然存在問題。因?yàn)镽eferer值會(huì)記錄下用戶的訪問來源,有些用戶認(rèn)為這樣會(huì)侵犯到他們自己的隱私權(quán),特別是有些組織擔(dān)心Referer值會(huì)把組織內(nèi)網(wǎng)中的某些信息泄露到外網(wǎng)中。因此,用戶自己可以設(shè)置瀏覽器使其在發(fā)送請(qǐng)求時(shí)不再提供 Referer。當(dāng)他們正常訪問銀行網(wǎng)站時(shí),網(wǎng)站會(huì)因?yàn)檎?qǐng)求沒有 Referer 值而認(rèn)為是 CSRF ***,拒絕合法用戶的訪問。
總之,通過驗(yàn)證HTTP Referer字段來防止CSRF***是不可靠的,這也是為什么DVWA的medium級(jí)別采用這種防御方法的原因。但是如何修改用戶端瀏覽器的Referer值來繞過防御,我暫時(shí)還沒有查到相關(guān)資料,這個(gè)問題就暫且擱置,待以后再補(bǔ)上。
最后再來分析一下high級(jí)別,首先在界面上就可以看到不同:這里需要管理員首先輸入當(dāng)前密碼,然后才能重新設(shè)置密碼。這就是目前非常有效的一種防御CSRF***的方法:二次確認(rèn)。

所謂二次確認(rèn),就是在調(diào)用某些功能時(shí)進(jìn)行二次驗(yàn)證,如:刪除用戶時(shí),產(chǎn)生一個(gè)提示對(duì)話框,提示“確定刪除用戶嗎?”。轉(zhuǎn)賬操作時(shí),要求用戶輸入二次密碼。另外,設(shè)置驗(yàn)證碼也可以起到相同的效果。
當(dāng)二次驗(yàn)證后,即使用戶打開漏洞CSRF***頁面,也不會(huì)直接去執(zhí)行,而需要用戶再次輸入才可以完成***。這樣,當(dāng)用戶突然收到提示后,可能會(huì)心存懷疑,就不會(huì)再乖乖地中招。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
本文題目:DVWA系列之18CSRF漏洞分析-創(chuàng)新互聯(lián)
分享URL:http://chinadenli.net/article26/ecccg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、企業(yè)建站、外貿(mào)建站、定制網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容