从CSRF原理到CMS漏洞利用
文章目錄
- 0x01 基礎(chǔ)知識(shí):
- 1、CSRF漏洞簡(jiǎn)介:
- 2、與XSS的區(qū)別:
- 3、攻擊的細(xì)節(jié):
- 4、常見的攻擊類型:
- 4.1、GET類型的CSRF:
- 4.2、POST類型的CSRF:
- 0x02 CSRF漏洞檢測(cè):
- 1、手動(dòng)測(cè)試:
- 2、使用CSRF檢測(cè)工具:
- 2.1、CSRFTester:
- 2.2、BurpSuite:
- 0x03 CSRF漏洞利用實(shí)例:
- 1、MetInfo CMS:
- 2、騎士CMS:
- 0x04 如何防御CSRF攻擊:
- 1、驗(yàn)證HTTP Referer字段:
- 2、添加Token,并驗(yàn)證:
- 3、關(guān)鍵請(qǐng)求添加驗(yàn)證碼:
- 最后:
0x01 基礎(chǔ)知識(shí):
1、CSRF漏洞簡(jiǎn)介:
CSRF全稱:Cross-site request forgery,即,跨站請(qǐng)求偽造,也被稱為 “One Click Attack” 或 “Session Riding”,通常縮寫為CSRF或者XSRF,是一種對(duì)網(wǎng)站的惡意利用。舉個(gè)生活中的例子:就是某個(gè)人點(diǎn)了個(gè)奇怪的鏈接,自己什么也沒輸,但自己的qq號(hào)或其他的號(hào)就被盜了。即該攻擊可以在受害者不知情的情況下以受害者名義偽造請(qǐng)求,執(zhí)行惡意操作,具有很大的危害性。
2、與XSS的區(qū)別:
CSRF聽起來很像跨站腳本攻擊(XSS),但它與XSS有很大區(qū)別,XSS 利用的是用戶對(duì)指定網(wǎng)站的信任,CSRF 利用的是網(wǎng)站對(duì)用戶網(wǎng)頁瀏覽器的信任。兩者的攻擊流程如下圖:
3、攻擊的細(xì)節(jié):
跨站請(qǐng)求攻擊,簡(jiǎn)單地說,是攻擊者通過一些技術(shù)手段欺騙用戶的瀏覽器去訪問一個(gè)用戶曾經(jīng)認(rèn)證過的網(wǎng)站并執(zhí)行一些操作(如發(fā)郵件,發(fā)消息,甚至財(cái)產(chǎn)轉(zhuǎn)賬和購(gòu)買商品)。由于瀏覽器曾經(jīng)認(rèn)證過,所以被訪問的網(wǎng)站會(huì)認(rèn)為是真正的用戶操作而去運(yùn)行。這利用了Web中用戶身份驗(yàn)證的一個(gè)漏洞:簡(jiǎn)單的身份驗(yàn)證只能保證請(qǐng)求發(fā)自某個(gè)用戶的瀏覽器,卻不能保證請(qǐng)求本身是用戶自愿發(fā)出的。
CSRF攻擊流程如下:
舉個(gè)例子:
場(chǎng)景需求:壞人小黑想要修改小明在購(gòu)物網(wǎng)站www.xx.com上填寫的會(huì)員地址。
小黑想要修改小明的信息,他需要擁有:1、登錄權(quán)限 2、修改個(gè)人信息的請(qǐng)求。
但是小明又不會(huì)把自己的賬號(hào)密碼告訴小黑,那小黑怎么辦?于是小黑自己跑到www.xx.com上注冊(cè)了一個(gè)賬號(hào),然后修改了一下自己的個(gè)人信息(比如email地址),他發(fā)現(xiàn)修改的請(qǐng)求是:http://www.xxx.com/edit.php?email=xiaohei@qq.com&Change=Change
然后,他進(jìn)行了這樣一個(gè)操作:把這個(gè)鏈接偽裝一下,在小明登錄xxx網(wǎng)站后,欺騙他進(jìn)行點(diǎn)擊,小明點(diǎn)擊這個(gè)鏈接后,個(gè)人信息就被修改了,小黑就完成了攻擊目的。
這種惡意的網(wǎng)址可以有很多種形式,藏身于網(wǎng)頁中的許多地方。此外,攻擊者也不需要控制放置惡意網(wǎng)址的網(wǎng)站。例如他可以將這種地址藏在論壇,博客等任何用戶生成內(nèi)容的網(wǎng)站中。這意味著如果服務(wù)端沒有合適的防御措施的話,用戶即使訪問熟悉的可信網(wǎng)站也有受攻擊的危險(xiǎn)。
通過例子能夠看出,攻擊者并不能通過CSRF攻擊來直接獲取用戶的賬戶控制權(quán),也不能直接竊取用戶的任何信息。他們能做到的,是欺騙用戶的瀏覽器,讓其以用戶的名義運(yùn)行操作。
CSRF的攻擊過程需要滿足以下兩個(gè)條件:
目標(biāo)用戶已經(jīng)登錄了網(wǎng)站,能夠執(zhí)行網(wǎng)站的功能。
目標(biāo)用戶訪問了攻擊者構(gòu)造的URL。
4、常見的攻擊類型:
CSRF原理很簡(jiǎn)單,一般來說,常見的攻擊類型有以下2 種:
-
GET型
-
POST型
下面就以pikachu靶場(chǎng)為例,演示下這幾種類型的攻擊流程。靶場(chǎng)下載
4.1、GET類型的CSRF:
GET類型的CSRF利用很簡(jiǎn)單,只需要構(gòu)造一個(gè)HTTP請(qǐng)求就可以完成。
示例:
某網(wǎng)站的個(gè)人信息頁面如下:
修改個(gè)人信息并抓包:
從提交的請(qǐng)求可以看到,系統(tǒng)并沒有對(duì)用戶設(shè)置 Token,而且是通過GET請(qǐng)求來提交修改信息。那么我們拿到這個(gè)URL之后,就可以改成自己想要修改的數(shù)據(jù),如把受害者的郵箱修改為自己的郵箱:
然后通過各種手段讓已經(jīng)登錄的用戶訪問這個(gè)鏈接,攻擊就完成了。
當(dāng)受害者點(diǎn)擊鏈接后,可以看到受害者的郵箱地址已經(jīng)變成我們自己設(shè)置的了,如圖:
當(dāng)然,直接訪問上面這個(gè)鏈接太可疑了,因此可以利用短鏈接生成器進(jìn)行偽裝,例:
訪問生成的短鏈接同樣執(zhí)行成功。
常用短鏈接網(wǎng)站:
http://tool.chinaz.com/tools/dwz.aspx
https://www.985.so/
4.2、POST類型的CSRF:
還是和上面一樣,修改個(gè)人信息,抓包:
可以看到是POST類型,參數(shù)是在請(qǐng)求體中提交的,我們就不能通過偽造URL的方式進(jìn)行攻擊了。
這種類型的 CSRF 利用起來通常使用的是一個(gè)自動(dòng)提交的表單;攻擊者可以在自己的公網(wǎng)服務(wù)器上搭建一個(gè)站點(diǎn),在站點(diǎn)上做一個(gè)表單,誘導(dǎo)受害者點(diǎn)擊這個(gè)鏈接,當(dāng)用戶點(diǎn)擊時(shí),就會(huì)自動(dòng)向存在CSRF的服務(wù)器提交POST請(qǐng)求修改個(gè)人信息。
編寫一個(gè)html 頁面,代碼如下,然后把此頁面放到攻擊者自己的Web服務(wù)器上(這里為了演示方便,放在虛擬機(jī)上了)
post.html:
<html> <head> <script> window.onload = function() {document.getElementById("postsubmit").click(); } </script> </head> <body> <form method="post" action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php"><input id="sex" type="text" name="sex" value="boy" /><input id="phonenum" type="text" name="phonenum" value="1367676776" /><input id="add" type="text" name="add" value="nab 76" /><input id="email" type="text" name="email" value="hacker@pikachu.com" /><input id="postsubmit" type="submit" name="submit" value="submit" /> </form> </body> </html>目標(biāo)服務(wù)器:127.0.0.1
攻擊者服務(wù)器:192.168.50.130
把上面的構(gòu)建好的頁面放在kali上的var/www/html目錄下(別忘開啟apache服務(wù)),訪問鏈接為:
http://192.168.50.130/post.html然后把該URL發(fā)送給受害者,只要受害者一點(diǎn)擊這個(gè)鏈接,就會(huì)自動(dòng)發(fā)送POST請(qǐng)求,修改其郵箱地址。
點(diǎn)擊鏈接是這個(gè)頁面,然后會(huì)自動(dòng)提交數(shù)據(jù)。
修改成功。( ̄︶ ̄)↗
0x02 CSRF漏洞檢測(cè):
1、手動(dòng)測(cè)試:
常用的辦法是:尋找站內(nèi)增刪改的地方,抓取一個(gè)正常請(qǐng)求的數(shù)據(jù)包,修改鏈接或表單的參數(shù),再用驗(yàn)證過的瀏覽器打開鏈接或提交表單,如果操作可以成功執(zhí)行就代表存在CSRF漏洞。
手動(dòng)測(cè)試CSRF漏洞比較麻煩,因此可以選擇使用工具來進(jìn)行高效的檢測(cè)。下面簡(jiǎn)單介紹下幾個(gè)常用的CSRF檢測(cè)工具。
2、使用CSRF檢測(cè)工具:
常用的CSRF檢測(cè)工具有CSRFTester、Burpsuite、CSRF Request Builder等,這里介紹下前兩個(gè)工具的使用方法。
2.1、CSRFTester:
CSRFTester測(cè)試流程:使用代理抓取我們?cè)跒g覽器中訪問過的所有的連接以及表單等信息,然后在CSRFTester中修改相應(yīng)的表單參數(shù)等信息,重新提交,相當(dāng)于一次偽造客戶端請(qǐng)求,如果修改后的測(cè)試請(qǐng)求成功被目標(biāo)服務(wù)器接受,則說明存在CSRF漏洞。同理 CSRFTester也可作為攻擊工具。最新下載鏈接
使用注意事項(xiàng):
-
需要java環(huán)境,并更改 run.bat中的 jre路徑為你自己的:
-
設(shè)置HTTP代理,端口為8008。
雙擊 run.bat文件啟動(dòng),頁面如下:
像這樣就是正常啟動(dòng)了。
點(diǎn)擊Start Recording,開啟CSRFTester檢測(cè)工作,執(zhí)行添加管理員操作,抓取到數(shù)據(jù)包:
修改管理員用戶名(也可以在下面生成的表單中修改),點(diǎn)擊 Generate HTML 會(huì)生成一個(gè) HTML 測(cè)試腳本:
使用同一瀏覽器打開此文件
可以看到,成功添加了賬號(hào),說明網(wǎng)站存在CSRF漏洞。
2.2、BurpSuite:
Burpsuite中 Engagement tools 的 Generate CSRF PoC 模塊也可以作為CSRF的測(cè)試工具。
還是同樣執(zhí)行添加管理員操作,抓包,然后右鍵選擇 Engagement tools 找到Generate CSRF PoC。
修改參數(shù),生成測(cè)試表單
右下角的 Test in browser 是在本地測(cè)試用的(Copy HTML 可以復(fù)制下來HTML,保存到攻擊者服務(wù)器,用來攻擊),點(diǎn)擊會(huì)生成一個(gè)測(cè)試鏈接,內(nèi)容就是生成的測(cè)試頁面,打開鏈接(這里瀏覽器必須開著bp的代理):
點(diǎn)擊提交按鈕并在bp中放包。
可以看到成功執(zhí)行了測(cè)試,證明存在著CSRF漏洞。
0x03 CSRF漏洞利用實(shí)例:
說了這么多,不實(shí)際操作下還是紙上談兵;下面就以這兩個(gè)本地CMS為例,復(fù)現(xiàn)一下CSRF漏洞的實(shí)際利用過程。
1、MetInfo CMS:
cms版本:MetInfo5.3.1
環(huán)境:phpStudy集成環(huán)境
cms下載:https://pan.baidu.com/s/1ZgKx3BE3hmJkflJxundYSA 提取碼:pek6
解壓到www目錄下,訪問目錄開始安裝
按照提示一步一步完成配置,進(jìn)入網(wǎng)站
訪問 /網(wǎng)站首頁/admin 進(jìn)入后臺(tái)管理頁面,并登錄,找到添加管理員模塊,添加一個(gè)管理員。
瀏覽器開啟代理后,使用我們的 CSRFTester工具抓取數(shù)據(jù)包
找到對(duì)應(yīng)的請(qǐng)求,修改參數(shù)。這里用戶名改為hacker,然后點(diǎn)擊Generate HTML 保存表單。
刪除多余的請(qǐng)求表單后,放到攻擊者的服務(wù)器上,訪問鏈接為(這里放本地了):http://127.0.0.1/Me/index.html
然后誘導(dǎo)網(wǎng)站管理員訪問鏈接
成功添加。
使用添加的用戶登錄,賬號(hào):hacker 密碼:admin
登陸成功,攻擊完成
2、騎士CMS:
cms版本:74cms_v4.1.24
環(huán)境:phpStudy集成環(huán)境
cms下載:https://pan.baidu.com/s/1U-I28J2DDTZkY1esQr9H4A 提取碼:75sx
解壓后訪問 upload目錄開始安裝:
按照提示一步一步完成配置,進(jìn)入網(wǎng)站
進(jìn)入后臺(tái)管理頁面,找到添加管理員頁面
使用bp抓包,使用 Generate CSRF PoC 構(gòu)造攻擊頁面
點(diǎn)擊 Copy HTML 保存到本地,為誘惑管理員點(diǎn)擊,可以添加一些具有誘惑性的東西,舉個(gè)例子:(忽略這個(gè)很丑的頁面→_→)
然后放到攻擊者的服務(wù)器上(這里就放到本地了),訪問鏈接為:http://127.0.0.1/74/lol.html
然后誘導(dǎo)管理員點(diǎn)開鏈接并提交,成功執(zhí)行。
使用剛才創(chuàng)建的賬號(hào)密碼進(jìn)行登錄測(cè)試,賬號(hào) hacker 密碼 admin
登錄成功,攻擊完成。
0x04 如何防御CSRF攻擊:
CSRF通常從第三方網(wǎng)站發(fā)起,被攻擊的網(wǎng)站無法防止攻擊發(fā)生,只能通過增強(qiáng)網(wǎng)站對(duì)CSRF的防護(hù)能力來提升安全性。
在服務(wù)器端防御CSRF攻擊主要有三種策略:
1、驗(yàn)證HTTP Referer字段:
Referer字段存在于 HTTP請(qǐng)求頭中,它記錄了該 HTTP請(qǐng)求的來源地址。正常情況下請(qǐng)求的 Referer 值是 請(qǐng)求發(fā)出所在頁面的URL,當(dāng)檢測(cè)到 Referer 是其他網(wǎng)站的話,則有可能是黑客的 CSRF 攻擊,拒絕該請(qǐng)求。
例如黑客要對(duì)銀行網(wǎng)站實(shí)施 CSRF 攻擊,他只能在他自己的服務(wù)器構(gòu)造請(qǐng)求,當(dāng)用戶點(diǎn)擊黑客的鏈接發(fā)送請(qǐng)求到銀行時(shí),該請(qǐng)求的 Referer 是指向黑客自己的網(wǎng)站,就會(huì)拒絕該請(qǐng)求。
2、添加Token,并驗(yàn)證:
Token介紹:
- token是服務(wù)端生成的一串隨機(jī)數(shù),作為客戶端進(jìn)行請(qǐng)求的一個(gè)令牌,當(dāng)?shù)谝淮蔚卿浐?#xff0c;服務(wù)器生成一個(gè)Token并返回給客戶端。
Token驗(yàn)證:
- 在 HTTP請(qǐng)求中以參數(shù)的形式添加一個(gè)隨機(jī)產(chǎn)生的 token,并在服務(wù)器端建立一個(gè)攔截器來驗(yàn)證這個(gè) token,假設(shè)請(qǐng)求中沒有token 或者 token 內(nèi)容不對(duì),則可能是 CSRF 攻擊而拒絕該請(qǐng)求。
3、關(guān)鍵請(qǐng)求添加驗(yàn)證碼:
當(dāng)進(jìn)行一些敏感操作時(shí),如修改密碼、添加管理員等操作,可以通過增加網(wǎng)站的驗(yàn)證手段,例如增加圖形驗(yàn)證碼或短信驗(yàn)證碼等,只有通過驗(yàn)證的請(qǐng)求才算合法。
最后:
🆗,本次的CSRF學(xué)習(xí)就到這了,本次學(xué)習(xí) 收獲頗豐,繼續(xù)加油!最后提醒大家,一定不要隨便點(diǎn)別人發(fā)的鏈接!
參考文章:
https://cloud.tencent.com/developer/article/1586164
https://www.jianshu.com/p/4152a4947cdc
https://blog.csdn.net/kzadmxz/article/details/92076837
https://www.cnblogs.com/54chensongxia/p/11693666.html
https://www.secpulse.com/archives/78792.html
https://shu1l.github.io/2020/04/03/csrf-lou-dong-xue-xi/
https://shu1l.github.io/2020/04/03/csrf-lou-dong-xue-xi/
總結(jié)
以上是生活随笔為你收集整理的从CSRF原理到CMS漏洞利用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 渗透测试之信息收集篇
- 下一篇: 分离图片中的隐藏文件方法总结