Wordpress(低版本)與XSSerjavascript
復現過程html
首先在虛擬機上搭建wordpressjava
在wordpress的管理用戶界面,能夠看到只有admin一個用戶程序員
添加用戶,並利用burp抓包瀏覽器
使用burp 自帶的csrf插件安全
會生成一個能夠利用的CSRF頁面,更改標籤中的參數,防止參數重複添加失敗服務器
在瀏覽器中打開,測試cookie
能夠看到,成功的添加了另外一個用戶session
到此,就能夠證實存在csrf漏洞而且已經成功利用csrf漏洞dom
那麼如何與XSS漏洞結合起來實現呢?
搭建XSSer平臺而且新建一個項目,根據抓包的內容編寫項目代碼
打開以前搭建的wordpress,將XSS項目的playload寫入評論中
留言成功以後以下圖:當管理員查看留言時,就會觸發XSS漏洞,執行建立用戶的操做
抓包查看:
成功執行了XSS中的惡意代碼,添加了test5用戶
修復建議
目前防護 CSRF 攻擊主要有三種策略:
驗證 HTTP Referer 字段
在請求地址中添加 token 並驗證
在 HTTP 頭中自定義屬性並驗證
(1)驗證 HTTP Referer 字段
根據 HTTP 協議,在 HTTP 頭中有一個字段叫 Referer,它記錄了該 HTTP 請求的來源地址。在一般狀況下,訪問一個安全受限頁面的請求來自於同一個網站,好比訪問
http://bank.example/withdrawaccount=bob&amount=1000000&for=Mallory,
用戶必須先登錄 bank.example,而後經過點擊頁面上的按鈕來觸發轉帳事件。這時,該轉賬請求的 Referer 值就會是轉帳按鈕所在的頁面的 URL,一般是以 bank.example 域名開頭的地址。而若是黑客要對銀行網站實施 CSRF 攻擊,他只能在他本身的網站構造請求,當用戶經過黑客的網站發送請求到銀行時,該請求的 Referer 是指向黑客本身的網站。所以,要防護 CSRF 攻擊,銀行網站只須要對於每個轉帳請求驗證其 Referer 值,若是是以 bank.example 開頭的域名,則說明該請求是來自銀行網站本身的請求,是合法的。若是 Referer 是其餘網站的話,則有多是黑客的 CSRF 攻擊,拒絕該請求。
然而,這種方法並不是萬無一失。Referer 的值是由瀏覽器提供的,雖然 HTTP 協議上有明確的要求,可是每一個瀏覽器對於 Referer 的具體實現可能有差異,並不能保證瀏覽器自身沒有安全漏洞。使用驗證 Referer 值的方法,就是把安全性都依賴於第三方(即瀏覽器)來保障,從理論上來說,這樣並不安全。事實上,對於某些瀏覽器,好比 IE6 或 FF2,目前已經有一些方法能夠篡改 Referer 值。若是 bank.example 網站支持 IE6 瀏覽器,黑客徹底能夠把用戶瀏覽器的 Referer 值設爲以 bank.example 域名開頭的地址,這樣就能夠經過驗證,從而進行 CSRF 攻擊。
(2)在請求地址中添加 token 並驗證
CSRF 攻擊之因此可以成功,是由於黑客能夠徹底僞造用戶的請求,該請求中全部的用戶驗證信息都是存在於 cookie 中,所以黑客能夠在不知道這些驗證信息的狀況下直接利用用戶本身的 cookie 來經過安全驗證。要抵禦 CSRF,關鍵在於在請求中放入黑客所不能僞造的信息,而且該信息不存在於 cookie 之中。能夠在 HTTP 請求中以參數的形式加入一個隨機產生的 token,並在服務器端創建一個攔截器來驗證這個 token,若是請求中沒有 token 或者 token 內容不正確,則認爲多是 CSRF 攻擊而拒絕該請求。
這種方法要比檢查 Referer 要安全一些,token 能夠在用戶登錄後產生並放於 session 之中,而後在每次請求時把 token 從 session 中拿出,與請求中的 token 進行比對,但這種方法的難點在於如何把 token 以參數的形式加入請求。對於 GET 請求,token 將附在請求地址以後,這樣 URL 就變成 http://url?csrftoken=tokenvalue。而對於 POST 請求來講,要在 form 的最後加上 <input type=」hidden」 name=」csrftoken」 value=」tokenvalue」/>,這樣就把 token 以參數的形式加入請求了。可是,在一個網站中,能夠接受請求的地方很是多,要對於每個請求都加上 token 是很麻煩的,而且很容易漏掉,一般使用的方法就是在每次頁面加載時,使用 javascript 遍歷整個 dom 樹,對於 dom 中全部的 a 和 form 標籤後加入 token。這樣能夠解決大部分的請求,可是對於在頁面加載以後動態生成的 html 代碼,這種方法就沒有做用,還須要程序員在編碼時手動添加 token。
(3)在 HTTP 頭中自定義屬性並驗證
這種方法也是使用 token 並進行驗證,和上一種方法不一樣的是,這裏並非把 token 以參數的形式置於 HTTP 請求之中,而是把它放到 HTTP 頭中自定義的屬性裏。經過 XMLHttpRequest 這個類,能夠一次性給全部該類請求加上 csrftoken 這個 HTTP 頭屬性,並把 token 值放入其中。這樣解決了上種方法在請求中加入 token 的不便,同時,經過 XMLHttpRequest 請求的地址不會被記錄到瀏覽器的地址欄,也不用擔憂 token 會透過 Referer 泄露到其餘網站中去。
總結思考
CSRF單純的利用起來實際上是比較困難的,可是結合了XSS漏洞以後,它利用起來就相對來講比較簡單了。從中咱們不難看出CSRF的危害:
配合XSS漏洞可形成蠕蟲
更改用戶密碼
更改(商城)用戶收貨地址
一切用戶能夠操做的,黑客均可以操做,只須要構造PoC讓受害者點擊。通俗點就是說,B以A的身份執行了A能夠執行的操做,固然,這裏B是黑客,A是受害者,因而可知,CSRF漏洞的危害也是顯著的,也是須要在安全工做中重視起來。