爲何要拿CSRF來當「攻擊手法系列」的開頭篇呢?由於CSRF/XSRF我我的喜好他的程度已經超過XSS了。若是說XSS是一個老虎,那麼CSRF就是隱藏在暗處的蛇。php
相信如今不少人不明白CSRF是怎麼運做,他和XSS的不一樣是在哪裏。我這裏就逐步爲你們解釋,並從淺入深的介紹CSRF。html
入門java
咱們先來看看CSRF和XSS的工做原理,先讓你們把這兩個分開來。web
XSS:ajax
攻擊者發現XSS漏洞——構造代碼——發送給受害人——受害人打開——攻擊者獲取受害人的cookie——完成攻擊
CSRF:json
攻擊者發現CSRF漏洞——構造代碼——發送給受害人——受害人打開——受害人執行代碼——完成攻擊
並且XSS容易發現,由於攻擊者須要登陸後臺完成攻擊。管理員能夠看日誌發現攻擊者。跨域
而CSRF則不一樣,他的攻擊一直是管理員本身實現的,攻擊者只負責了構造代碼。瀏覽器
我這只是簡單的說明下流程。大夥應該發現CSRF少了一個 獲取受害人的cookie的步驟。爲何會少了呢。由於受害人在執行代碼的時候就已經完成的攻擊,而攻擊者並無參與進來。安全
舉個例子來講吧(受害者的網址是a.cn,攻擊者的網址是b.cn)攻擊者想要在某個網站(網站是某個開源CMS)添加上另外一個管理員,可是這個網站並無XSS漏洞。怎麼辦呢?這時攻擊者發現了這個開源CMS後臺添加管理員時並無加入驗證碼或則token,只須要輸入要添加的管理員帳號和密碼點擊肯定就能夠添加管理員帳戶了。這時和我同樣聰明的攻擊者在本身的服務器上創建了一個html文件(假設地址是b.cn/index.html)。而後就給網站管理員發郵件等等,誘使管理員打開b.cn/index.html。當管理員打開後(這時管理員正在網站後臺,或則管理員的session並無失效的話),就能夠神不知鬼不覺的在網站後臺添加了一個管理員帳戶。服務器
相信這時大夥已經明白CSRF和XSS的區別了,不是太明白也沒事,下面還有。
接下來我先給你們介紹一個軟件,在運用實例來詳細的說明CSRF。
OWASP CSRFTester:
這是OWASP推出的CSRF半自動化軟件,他省去了CSRF最繁瑣的過程,代碼構造。下面是軟件的截圖
這款軟件是由java編寫的,因此在運行軟件以前須要事先安裝java環境,cmd窗口是告訴咱們此時軟件正在監聽8008端口。軟件的大體介紹就到這,後文我將進一步的說明。
這裏我選擇了「XYCMS中心小學建站系統」
OK,咱們進入後臺a.cn:88/admin,帳號密碼默認都是admin。進入後臺,咱們選擇「管理員管理」
我想細心的人已經發現了。他只要求你輸入帳號 密碼 確認密碼。沒有發現驗證碼驗證。咱們在瀏覽器裏代理下8008端口(雖然網站是88端口,可是仍是能夠監聽到數據,因此沒必要在乎網站是88,軟件監聽的是8008的問題。由於在瀏覽器裏任何數據都必需要通過8008,網站雖然說是88端口,可是數據還要轉到8008端口)。而後用軟件看下有沒有token的存在(你也能夠用burp、fiddler等等)。
點擊開始
咱們在網站裏輸入帳號和密碼。
點擊提交數據後,軟件就會抓到數據包了。
下面4個是傲遊瀏覽器發送的,把他們刪除。第二個是跳轉,咱們也把他刪除。
咱們發現並無找到token的值,那麼咱們就能夠來實現CSRF攻擊了。
看到下面的Report Type了麼。這些是讓你選擇用什麼方法來進行攻擊。
Forms:建立一個form表單。內容爲hidden(隱藏),用戶不可見(可POST、GET)
iFrame:建立一個iframe框架,高寬爲0,用戶不可見。(可POST、GET)
IMG:建立一個IMG標籤(只能GET)。
XHR:建立一個AJAX請求(可POST、GET)
Link:建立一個a標籤的超連接(只能GET)
OK,介紹完了。可是呢,這五個裏,我只推薦第一個。緣由有下:
第二個容易找不到對象(若是你是新手,對JavaScript不熟的話,不建議選擇這個)
第三個只能發送GET請求,有限制。
第四個有跨域限制,有的瀏覽器不容許發送跨域請求,除非網站有設置。
第五個須要點擊才能觸發(固然能夠修改成自動觸發),還有一個是他也只能發送GET請求。
Ok,我這時選擇forms選項,他會生成一個HTML文件,並且會自動打開,若是不成功不要灰心,這個軟件不是特別的完整,有些地方須要改進。不成功的話就打開HTML改下源碼,參照瀏覽器的審查元素就行。
點擊Generate HTML來生成,生成好後,把生成的index.html放到b.cn下。誘使管理員打開,管理員打開後,將會是這樣:
成功了,咱們在後臺看下。
能夠看到成功添加了。
咱們能夠把這個index.html放到本身服務器上,又是管理員打開,而後了管理員當時正在後臺,或則管理員的session沒有過時,你能夠在網站留言板裏吧網址寫上去。就能夠完成CSRF攻擊了。
這裏我不用上面這個軟件,再完成一次攻擊
我想入侵一個網站,得知這個網站使用的是XYCMS,因而我在網上把XYCMS源碼下載下來,分析下。我發如今後臺添加管理員的地方沒有token驗證,因而我就走上了構造帶代碼一路。
F12看下添加管理員的連接是什麼
打開此連接就是添加管理員的地方。
Ctrl+U 看下源代碼,把form標籤裏的內容所有複製下來,放到本地的html文件裏。去掉沒用的代碼。就像下面這樣:
OK,如今咱們來改下,把action改爲目標網站(a.cn),而後在input類型爲text的地方,加上Value的值,這個值就是你要添加的管理員帳號和密碼,改後爲:
咱們打開測試下,看能不能添加管理員
點擊「提交數據」
添加成功了,剩下的就是自動提交了,這裏就要用到JavaScript了。
打開後,自動添加了。接下來就是讓表單隱藏,咱們加個style讓form爲隱藏就好了。像下面這樣:
一個csrf網頁就完成了,上傳到b.cn,誘使管理員打開就好了。
進階
相信細心的人已經發現上面是一個1.html文件,須要誘使管理員打開,並且他還有彈窗。太被動了,想用ajax來發送吧,又須要跨域。怎麼辦呢?這裏咱們能夠結合XSS來完成攻擊。
在以前XSS系列我說過一句話「XSS就是讓對方執行你的JS代碼」,聰明的人已經想到了,那就是把CSRF的AJAX請求放到XSS裏,以達到攻擊的效果,具體怎麼作到呢,看完這一節,你就會了。
首先你要挖到一個XSS漏洞(反射、儲蓄都行,固然儲蓄更好。由於這個CMS特別小衆,幾乎沒人用,因此在前年挖到這個漏洞時,就一直放那沒動過)。找到一個儲蓄型XSS,在根目錄的add_book.asp文件裏。
rs("title")=trim(request.form("title")) rs("sh")=request.form("sh") rs("ly_name")=trim(request.form("ly_name")) rs("tel")=trim(request.form("tel")) rs("email")=trim(request.form("email")) rs("body")=trim(request.form("body"))
title留言標題 ly_name姓名 tel聯繫電話 email聯繫郵箱 body留言內容存在XSS(不想吐槽了)
OK,由於上一節已經說了添加管理員無認證的漏洞了,我也就很少說了。
提交的時候抓包下,而後根據數據包來寫ajax代碼(之因此沒用那個軟件來生成,是讓你們更加深入,同時也不要太依賴軟件)
下面就是我本身寫的一個ajax:
var xmlhttp; if(window.XMLHttpRequest){ xmlhttp=new XMLHttpRequest(); }else{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("POST","/admin/admin_manage.asp?act=add",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("admin=123&password=admin&password3=admin&button=提交數據");
生成好後,獲得地址http://xss8.pw/0IrU5I?1420780331
OK,咱們去留言板上插吧。
之因此沒用全插,是由於這樣作的話,管理員一打開就會多插幾個帳號。
管理員打開後的樣子,這時候其實已經在後臺添加了管理員。
深刻
我以前在http://www.freebuf.com/articles/web/55505.html和http://www.freebuf.com/articles/web/54686.html談到過插件安全。這裏我教你們一個猥瑣的CSRF技巧。
如今的我掌握了這個CMS的CSRF漏洞,我想讓全部使用這個CMS的網站所有添加管理員怎麼辦呢?咱們能夠用插件。
首先創建一個ceshi目錄,在裏面創建一個def.json文件,內容以下:
而後咱們在同目錄下創建一個test.js文件,在裏面寫入下面這些代碼:
for的存在是讓他只運行一次,只不過由於這個是在插件裏,當你打開一次頁面他就會從新加載這個js。也就是說,若是管理員一直刷新頁面,那麼就會出現和刷新次數同樣的帳戶,之因此加for是由於若是你不加,刷新一次會添加幾個帳戶,而不是一個。
而後用MxPacker軟件打包成maxthon插件,雙擊安裝後,就會發現已經在後臺添加了帳戶。
若是你帳務了幾個CMS的CSRF漏洞,那麼你能夠結合到一個插件裏,價格if判斷是哪一個CMS就用哪段CSRF攻擊代碼。
原文連接:http://www.freebuf.com/articles/web/55965.html
------------------------------------------------------------------------------------------------------------------
這裏貼出一個OWASP CSRFTester的下載地址
https://www.owasp.org/index.php/File:CSRFTester-1.0.zip