从零开始学CSRF
為什么要拿CSRF來當“攻擊手法系列”的開頭篇呢?因為CSRF/XSRF我個人喜愛他的程度已經超過XSS了。如果說XSS是一個老虎,那么CSRF就是隱藏在暗處的蛇。--all from freebuf
相信現在很多人不明白CSRF是怎么運作,他和XSS的不同是在哪里。我這里就逐步為大家解釋,并從淺入深的介紹CSRF。
入門
我們先來看看CSRF和XSS的工作原理,先讓大家把這兩個分開來。
XSS:
攻擊者發現XSS漏洞——構造代碼——發送給受害人——受害人打開——攻擊者獲取受害人的cookie——完成攻擊CSRF:
攻擊者發現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文件里。
1 rs("title")=trim(request.form("title")) 2 rs("sh")=request.form("sh") 3 rs("ly_name")=trim(request.form("ly_name")) 4 rs("tel")=trim(request.form("tel")) 5 rs("email")=trim(request.form("email")) 6 rs("body")=trim(request.form("body"))title留言標題??ly_name姓名??tel聯系電話??email聯系郵箱??body留言內容存在XSS(不想吐槽了)
OK,因為上一節已經說了添加管理員無認證的漏洞了,我也就不多說了。
提交的時候抓包下,然后根據數據包來寫ajax代碼(之所以沒用那個軟件來生成,是讓大家更加深刻,同時也不要太依賴軟件)
下面就是我自己寫的一個ajax:
1 var xmlhttp; 2 if(window.XMLHttpRequest){ 3 xmlhttp=new XMLHttpRequest(); 4 }else{ 5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 6 } 7 xmlhttp.open("POST","/admin/admin_manage.asp?act=add",true); 8 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 9 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攻擊代碼。
注意
攻擊者事先要知道對方使用的是哪個CMS。像那些自己寫的網上沒有的程序,幾乎不可能用CSRF來完成攻擊。
XYCMS下載地址:http://pan.baidu.com/s/1qWJRZGS
CSRFTester下載地址:http://pan.baidu.com/s/1qWE2tIW
index.html源碼下載:http://pan.baidu.com/s/1sjJkcrj
Index.js下載:http://pan.baidu.com/s/1jG3PoGm
遨游插件結合CSRF(包括了MxPacker):http://pan.baidu.com/s/1ntJso0T
?
轉載于:https://www.cnblogs.com/cyjaysun/p/4222436.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 统筹保险不理赔怎么办
- 下一篇: ffmpeg-URL(转)