您好,登錄后才能下訂單哦!
Wordpress(低版本)與XSSer
首先在虛擬機(jī)上搭建wordpress
在wordpress的管理用戶界面,可以看到只有admin一個(gè)用戶
添加用戶,并利用burp抓包
使用burp 自帶的csrf插件
會(huì)生成一個(gè)可以利用的CSRF頁面,更改標(biāo)簽中的參數(shù),防止參數(shù)重復(fù)添加失敗
在瀏覽器中打開,測(cè)試
可以看到,成功的添加了另一個(gè)用戶
到此,就可以證明存在csrf漏洞并且已經(jīng)成功利用csrf漏洞
那么如何與XSS漏洞結(jié)合起來實(shí)現(xiàn)呢?
搭建XSSer平臺(tái)并且新建一個(gè)項(xiàng)目,根據(jù)抓包的內(nèi)容編寫項(xiàng)目代碼
打開之前搭建的wordpress,將XSS項(xiàng)目的playload寫入評(píng)論中
留言成功之后如下圖:當(dāng)管理員查看留言時(shí),就會(huì)觸發(fā)XSS漏洞,執(zhí)行創(chuàng)建用戶的操作
抓包查看:
成功執(zhí)行了XSS中的惡意代碼,添加了test5用戶
目前防御 CSRF 攻擊主要有三種策略:
驗(yàn)證 HTTP Referer 字段
在請(qǐng)求地址中添加 token 并驗(yàn)證
在 HTTP 頭中自定義屬性并驗(yàn)證
(1)驗(yàn)證 HTTP Referer 字段
根據(jù) HTTP 協(xié)議,在 HTTP 頭中有一個(gè)字段叫 Referer,它記錄了該 HTTP 請(qǐng)求的來源地址。在通常情況下,訪問一個(gè)安全受限頁面的請(qǐng)求來自于同一個(gè)網(wǎng)站,比如訪問
http://bank.example/withdrawaccount=bob&amount=1000000&for=Mallory,
http://www.gendan5.com
用戶必須先登陸 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)求。
然而,這種方法并非萬無一失。Referer 的值是由瀏覽器提供的,雖然 HTTP 協(xié)議上有明確的要求,但是每個(gè)瀏覽器對(duì)于 Referer 的具體實(shí)現(xiàn)可能有差別,并不能保證瀏覽器自身沒有安全漏洞。使用驗(yàn)證 Referer 值的方法,就是把安全性都依賴于第三方(即瀏覽器)來保障,從理論上來講,這樣并不安全。事實(shí)上,對(duì)于某些瀏覽器,比如 IE6 或 FF2,目前已經(jīng)有一些方法可以篡改 Referer 值。如果 bank.example 網(wǎng)站支持 IE6 瀏覽器,黑客完全可以把用戶瀏覽器的 Referer 值設(shè)為以 bank.example 域名開頭的地址,這樣就可以通過驗(yàn)證,從而進(jìn)行 CSRF 攻擊。
(2)在請(qǐng)求地址中添加 token 并驗(yàn)證
CSRF 攻擊之所以能夠成功,是因?yàn)楹诳涂梢酝耆珎卧煊脩舻恼?qǐng)求,該請(qǐng)求中所有的用戶驗(yàn)證信息都是存在于 cookie 中,因此黑客可以在不知道這些驗(yàn)證信息的情況下直接利用用戶自己的 cookie 來通過安全驗(yàn)證。要抵御 CSRF,關(guān)鍵在于在請(qǐng)求中放入黑客所不能偽造的信息,并且該信息不存在于 cookie 之中。可以在 HTTP 請(qǐng)求中以參數(shù)的形式加入一個(gè)隨機(jī)產(chǎn)生的 token,并在服務(wù)器端建立一個(gè)攔截器來驗(yàn)證這個(gè) token,如果請(qǐng)求中沒有 token 或者 token 內(nèi)容不正確,則認(rèn)為可能是 CSRF 攻擊而拒絕該請(qǐng)求。
這種方法要比檢查 Referer 要安全一些,token 可以在用戶登陸后產(chǎn)生并放于 session 之中,然后在每次請(qǐng)求時(shí)把 token 從 session 中拿出,與請(qǐng)求中的 token 進(jìn)行比對(duì),但這種方法的難點(diǎn)在于如何把 token 以參數(shù)的形式加入請(qǐng)求。對(duì)于 GET 請(qǐng)求,token 將附在請(qǐng)求地址之后,這樣 URL 就變成 http://url?csrftoken=tokenvalue。而對(duì)于 POST 請(qǐng)求來說,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,這樣就把 token 以參數(shù)的形式加入請(qǐng)求了。但是,在一個(gè)網(wǎng)站中,可以接受請(qǐng)求的地方非常多,要對(duì)于每一個(gè)請(qǐng)求都加上 token 是很麻煩的,并且很容易漏掉,通常使用的方法就是在每次頁面加載時(shí),使用 javascript 遍歷整個(gè) dom 樹,對(duì)于 dom 中所有的 a 和 form 標(biāo)簽后加入 token。這樣可以解決大部分的請(qǐng)求,但是對(duì)于在頁面加載之后動(dòng)態(tài)生成的 html 代碼,這種方法就沒有作用,還需要程序員在編碼時(shí)手動(dòng)添加 token。
(3)在 HTTP 頭中自定義屬性并驗(yàn)證
這種方法也是使用 token 并進(jìn)行驗(yàn)證,和上一種方法不同的是,這里并不是把 token 以參數(shù)的形式置于 HTTP 請(qǐng)求之中,而是把它放到 HTTP 頭中自定義的屬性里。通過 XMLHttpRequest 這個(gè)類,可以一次性給所有該類請(qǐng)求加上 csrftoken 這個(gè) HTTP 頭屬性,并把 token 值放入其中。這樣解決了上種方法在請(qǐng)求中加入 token 的不便,同時(shí),通過 XMLHttpRequest 請(qǐng)求的地址不會(huì)被記錄到瀏覽器的地址欄,也不用擔(dān)心 token 會(huì)透過 Referer 泄露到其他網(wǎng)站中去。
CSRF單純的利用起來其實(shí)是比較困難的,但是結(jié)合了XSS漏洞之后,它利用起來就相對(duì)來說比較簡(jiǎn)單了。 從中我們不難看出CSRF的危害:
配合XSS漏洞可造成蠕蟲
更改用戶密碼
更改(商城)用戶收貨地址
一切用戶可以操作的,黑客都可以操作,只需要構(gòu)造PoC讓受害者點(diǎn)擊。 通俗點(diǎn)就是說,B以A的身份執(zhí)行了A可以執(zhí)行的操作,當(dāng)然,這里B是黑客,A是受害者,由此可見,CSRF漏洞的危害也是顯著的,也是需要在安全工作中重視起來。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。