从零开始学CSRF
為什么要拿CSRF來當(dāng)“攻擊手法系列”的開頭篇呢?因?yàn)镃SRF/XSRF我個(gè)人喜愛他的程度已經(jīng)超過XSS了。如果說XSS是一個(gè)老虎,那么CSRF就是隱藏在暗處的蛇。--all from freebuf
相信現(xiàn)在很多人不明白CSRF是怎么運(yùn)作,他和XSS的不同是在哪里。我這里就逐步為大家解釋,并從淺入深的介紹CSRF。
入門
我們先來看看CSRF和XSS的工作原理,先讓大家把這兩個(gè)分開來。
XSS:
攻擊者發(fā)現(xiàn)XSS漏洞——構(gòu)造代碼——發(fā)送給受害人——受害人打開——攻擊者獲取受害人的cookie——完成攻擊CSRF:
攻擊者發(fā)現(xiàn)CSRF漏洞——構(gòu)造代碼——發(fā)送給受害人——受害人打開——受害人執(zhí)行代碼——完成攻擊而且XSS容易發(fā)現(xiàn),因?yàn)楣粽咝枰卿浐笈_(tái)完成攻擊。管理員可以看日志發(fā)現(xiàn)攻擊者。
而CSRF則不同,他的攻擊一直是管理員自己實(shí)現(xiàn)的,攻擊者只負(fù)責(zé)了構(gòu)造代碼。
我這只是簡(jiǎn)單的說明下流程。大伙應(yīng)該發(fā)現(xiàn)CSRF少了一個(gè)?獲取受害人的cookie的步驟。為什么會(huì)少了呢。因?yàn)槭芎θ嗽趫?zhí)行代碼的時(shí)候就已經(jīng)完成攻擊,而攻擊者并沒有參與進(jìn)來。
舉個(gè)例子來說吧(受害者的網(wǎng)址是a.cn,攻擊者的網(wǎng)址是b.cn)攻擊者想要在某個(gè)網(wǎng)站(網(wǎng)站是某個(gè)開源CMS)添加上另一個(gè)管理員,但是這個(gè)網(wǎng)站并沒有XSS漏洞。怎么辦呢?這時(shí)攻擊者發(fā)現(xiàn)了這個(gè)開源CMS后臺(tái)添加管理員時(shí)并沒有加入驗(yàn)證碼或者token,只需要輸入要添加的管理員賬號(hào)和密碼點(diǎn)擊確定就可以添加管理員賬戶了。這時(shí)和我一樣聰明的攻擊者在自己的服務(wù)器上建立了一個(gè)html文件(假設(shè)地址是b.cn/index.html)。然后就給網(wǎng)站管理員發(fā)郵件等等,誘使管理員打開b.cn/index.html。當(dāng)管理員打開后(這時(shí)管理員正在網(wǎng)站后臺(tái),或者管理員的session并沒有失效的話),就可以神不知鬼不覺的在網(wǎng)站后臺(tái)添加了一個(gè)管理員賬戶。
相信這時(shí)大伙已經(jīng)明白CSRF和XSS的區(qū)別了,不是太明白也沒事,下面還有。
接下來我先給大家介紹一個(gè)軟件,再運(yùn)用實(shí)例來詳細(xì)地說明CSRF。
OWASP?CSRFTester:
這是OWASP推出的CSRF半自動(dòng)化軟件,他省去了CSRF最繁瑣的過程,代碼構(gòu)造。下面是軟件的截圖
?
這款軟件是由java編寫的,所以在運(yùn)行軟件之前需要事先安裝java環(huán)境,cmd窗口是告訴我們此時(shí)軟件正在監(jiān)聽8008端口。軟件的大致介紹就到這,后文我將進(jìn)一步的說明。
這里我選擇了“XYCMS中心小學(xué)建站系統(tǒng)”
OK,我們進(jìn)入后臺(tái)a.cn:88/admin,賬號(hào)密碼默認(rèn)都是admin。進(jìn)入后臺(tái),我們選擇“管理員管理”
我想細(xì)心的人已經(jīng)發(fā)現(xiàn)了。他只要求你輸入賬號(hào)?密碼?確認(rèn)密碼。沒有發(fā)現(xiàn)驗(yàn)證碼驗(yàn)證。我們?cè)跒g覽器里代理下8008端口(雖然網(wǎng)站是88端口,但是還是可以監(jiān)聽到數(shù)據(jù),所以不必在意網(wǎng)站是88,軟件監(jiān)聽的是8008的問題。因?yàn)樵?strong>瀏覽器里任何數(shù)據(jù)都必須要經(jīng)過8008,網(wǎng)站雖說是88端口,但是數(shù)據(jù)還要轉(zhuǎn)到8008端口)。然后用軟件看下有沒有token的存在(你也可以用burp、fiddler等等)。
點(diǎn)擊開始
我們?cè)诰W(wǎng)站里輸入賬號(hào)和密碼。
點(diǎn)擊提交數(shù)據(jù)后,軟件就會(huì)抓到數(shù)據(jù)包了。
下面4個(gè)是傲游瀏覽器發(fā)送的,把他們刪除。第二個(gè)是跳轉(zhuǎn),我們也把他刪除。
我們發(fā)現(xiàn)并沒有找到token的值,那么我們就可以來實(shí)現(xiàn)CSRF攻擊了。
看到下面的Report?Type了么。這些是讓你選擇用什么方法來進(jìn)行攻擊。
Forms:創(chuàng)建一個(gè)form表單。內(nèi)容為hidden(隱藏),用戶不可見(可POST、GET)
iFrame:創(chuàng)建一個(gè)iframe框架,高寬為0,用戶不可見。(可POST、GET)
IMG:創(chuàng)建一個(gè)IMG標(biāo)簽(只能GET)。
XHR:創(chuàng)建一個(gè)AJAX請(qǐng)求(可POST、GET)
Link:創(chuàng)建一個(gè)a標(biāo)簽的超鏈接(只能GET)
OK,介紹完了。但是呢,這五個(gè)里,我只推薦第一個(gè)。原因有下:
第二個(gè)容易找不到對(duì)象(如果你是新手,對(duì)JavaScript不熟的話,不建議選擇這個(gè))
第三個(gè)只能發(fā)送GET請(qǐng)求,有限制。
第四個(gè)有跨域限制,有的瀏覽器不允許發(fā)送跨域請(qǐng)求,除非網(wǎng)站有設(shè)置。
第五個(gè)需要點(diǎn)擊才能觸發(fā)(當(dāng)然可以修改為自動(dòng)觸發(fā)),還有一個(gè)是他也只能發(fā)送GET請(qǐng)求。
Ok,我這時(shí)選擇forms選項(xiàng),他會(huì)生成一個(gè)HTML文件,而且會(huì)自動(dòng)打開,如果不成功不要灰心,這個(gè)軟件不是特別的完整,有些地方需要改進(jìn)。不成功的話就打開HTML改下源碼,參照瀏覽器的審查元素就行。
點(diǎn)擊Generate?HTML來生成,生成好后,把生成的index.html放到b.cn下。誘使管理員打開,管理員打開后,將會(huì)是這樣:
?
成功了,我們?cè)诤笈_(tái)看下。
可以看到成功添加了。
我們可以把這個(gè)index.html放到自己服務(wù)器上,誘使管理員打開,然后如果管理員當(dāng)時(shí)正在后臺(tái),或者管理員的session沒有過期,你可以在網(wǎng)站留言板里把網(wǎng)址寫上去,就可以完成CSRF攻擊了。
這里我不用上面這個(gè)軟件,再完成一次攻擊
我想入侵一個(gè)網(wǎng)站,得知這個(gè)網(wǎng)站使用的是XYCMS,于是我在網(wǎng)上把XYCMS源碼下載下來,分析下。我發(fā)現(xiàn)在后臺(tái)添加管理員的地方?jīng)]有token驗(yàn)證,于是我就走上了構(gòu)造代碼一路。
F12看下添加管理員的鏈接是什么
打開此鏈接就是添加管理員的地方。
Ctrl+U?看下源代碼,把form標(biāo)簽里的內(nèi)容全部復(fù)制下來,放到本地的html文件里。去掉沒用的代碼。就像下面這樣:
OK,現(xiàn)在我們來改下,把a(bǔ)ction改成目標(biāo)網(wǎng)站(a.cn),然后在input類型為text的地方,加上Value的值,這個(gè)值就是你要添加的管理員賬號(hào)和密碼,改后為:
我們打開測(cè)試下,看能不能添加管理員
點(diǎn)擊“提交數(shù)據(jù)”
添加成功了,剩下的就是自動(dòng)提交了,這里就要用到JavaScript了。
打開后,自動(dòng)添加了。接下來就是讓表單隱藏,我們加個(gè)style讓form為隱藏就行了。像下面這樣:
一個(gè)csrf網(wǎng)頁就完成了,上傳到b.cn,誘使管理員打開就行了。
進(jìn)階
相信細(xì)心的人已經(jīng)發(fā)現(xiàn)上面是一個(gè)1.html文件,需要誘使管理員打開,而且他還有彈窗。太被動(dòng)了,想用ajax來發(fā)送吧,又需要跨域。怎么辦呢?這里我們可以結(jié)合XSS來完成攻擊。
在之前XSS系列我說過一句話“XSS就是讓對(duì)方執(zhí)行你的JS代碼”,聰明的人已經(jīng)想到了,那就是把CSRF的AJAX請(qǐng)求放到XSS里,以達(dá)到攻擊的效果,具體怎么做到呢,看完這一節(jié),你就會(huì)了。
首先你要挖到一個(gè)XSS漏洞(反射、存儲(chǔ)都行,當(dāng)然存儲(chǔ)更好。因?yàn)檫@個(gè)CMS特別小眾,幾乎沒人用,所以在前年挖到這個(gè)漏洞時(shí),就一直放那沒動(dòng)過)。找到一個(gè)存儲(chǔ)型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留言標(biāo)題??ly_name姓名??tel聯(lián)系電話??email聯(lián)系郵箱??body留言內(nèi)容存在XSS(不想吐槽了)
OK,因?yàn)樯弦还?jié)已經(jīng)說了添加管理員無認(rèn)證的漏洞了,我也就不多說了。
提交的時(shí)候抓包下,然后根據(jù)數(shù)據(jù)包來寫ajax代碼(之所以沒用那個(gè)軟件來生成,是讓大家更加深刻,同時(shí)也不要太依賴軟件)
下面就是我自己寫的一個(gè)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=提交數(shù)據(jù)");生成好后,得到地址http://xss8.pw/0IrU5I?1420780331
OK,我們?nèi)チ粞园迳喜灏伞?/span>
之所以沒用全插,是因?yàn)檫@樣做的話,管理員一打開就會(huì)多插幾個(gè)賬號(hào)。
管理員打開后的樣子,這時(shí)候其實(shí)已經(jīng)在后臺(tái)添加了管理員。
深入
我之前在http://www.freebuf.com/articles/web/55505.html和http://www.freebuf.com/articles/web/54686.html談到過插件安全。這里我教大家一個(gè)猥瑣的CSRF技巧。
現(xiàn)在的我掌握了這個(gè)CMS的CSRF漏洞,我想讓所有使用這個(gè)CMS的網(wǎng)站全部添加管理員怎么辦呢?我們可以用插件。
首先建立一個(gè)ceshi目錄,在里面建立一個(gè)def.json文件,內(nèi)容如下:
然后我們?cè)谕夸浵陆⒁粋€(gè)test.js文件,在里面寫入下面這些代碼:
for的存在是讓他只運(yùn)行一次,只不過因?yàn)檫@個(gè)是在插件里,當(dāng)你打開一次頁面他就會(huì)重新加載這個(gè)js。也就是說,如果管理員一直刷新頁面,那么就會(huì)出現(xiàn)和刷新次數(shù)一樣的賬戶,之所以加for是因?yàn)槿绻悴患?#xff0c;刷新一次會(huì)添加幾個(gè)賬戶,而不是一個(gè)。
然后用MxPacker軟件打包成maxthon插件,雙擊安裝后,就會(huì)發(fā)現(xiàn)已經(jīng)在后臺(tái)添加了賬戶。
?
如果你掌握了幾個(gè)CMS的CSRF漏洞,那么你可以結(jié)合到一個(gè)插件里,加個(gè)if判斷,是哪個(gè)CMS就用哪段CSRF攻擊代碼。
注意
攻擊者事先要知道對(duì)方使用的是哪個(gè)CMS。像那些自己寫的網(wǎng)上沒有的程序,幾乎不可能用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
遨游插件結(jié)合CSRF(包括了MxPacker):http://pan.baidu.com/s/1ntJso0T
?
轉(zhuǎn)載于:https://www.cnblogs.com/cyjaysun/p/4222436.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: 统筹保险不理赔怎么办
- 下一篇: ffmpeg-URL(转)